java - 使用 Java 存储和检索大型数据集的最佳方式

标签 java dataset store

我目前正在用 Java 开发一个项目,我必须在一个非常大的数据集上执行多项信息检索和分类任务。一个小型集合将包含 10K 个文档。来自每个文档大约 100 个 150 维的 double vector 。所以大约有 1M 个 vector ,包含 150 个 double 或 150M 个 double 。存储后我需要召回所有这些或其中的一部分并执行聚类(例如 KMEANS)。实际集合有更多文档(我目前正在处理 200K 文档)。

当然,我已经处理过几次 OutOfMemoryError,我最后的解决方案是存储在 10 个总大小 >5GB 的巨大 XML 文件中。文件必须是 10,因为 DOM Writer 的内存已满。对于阅读,我使用了 SAX 解析器,它在不将它们加载到内存中的情况下完成了这项工作。此外,将 double 存储到任何类型的文本中都会使其实际大小成倍增加,并增加解析和转换的计算成本。最后,聚类算法通常是迭代的,因此它们将一次又一次地需要相同的数据。我的方法没有缓存任何东西,它只是多次从磁盘读取。

我现在正在寻找一种更紧凑的方式来以二进制格式(数据库、原始二进制文件等)存储任意数量的数据,以及一种读取它们的有效方式。有没有人有任何想法可以提出?

最佳答案

嵌入式数据库或键值存储。它们有很多,例如JDBM3 .以 xml 格式存储是多么奇怪的想法?您可以使用标准序列化技术简单地将数组转储到文件中。

关于java - 使用 Java 存储和检索大型数据集的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713194/

相关文章:

java - Node 缓冲区打印问题

php - 在 MySQL 中存储日期

java - 如何解决此 java.lang.UnsupportedOperationException : This is not supported in Android L?

php - 从 PHP 将数据集传递给 JavaScript 验证

c# - BindingSource 上的 EndEdit 更新 DataTable,但 rowstate 仍未改变

dataset - REXX/z/OS 数据集锁

javascript - 第一次使用 redux。如何实现?

c - 如何按字母顺序将结果存储在不同的文件中

java - 在 Java 的方法中将 Collection 的 Collection 联合成 Collection

java - 如何在单元测试中站起来然后关闭 Solr 实例?