我目前正在开发一个Java项目,我必须在一个非常大的数据集上执行几个信息检索和分类任务。一个小集合将有10K文件。从每个文件大约100个150维向量的双打。因此,大约有150个双打或1M双打的1M矢量。存储后,我需要回忆所有这些或其中的一部分,并执行聚类(例如KMEANS)。实际收藏有更多的文件(我目前正在处理200K文件)。使用Java存储和检索大型数据集的最佳方法
当然,我已经多次处理OutOfMemoryError,并且我最后一次解决问题的方法是存储10个大小超过5GB的XML文件。这些文件必须是10,因为DOM Writer的内存已满。对于阅读,我使用了SAX Parser,它没有将它们加载到内存中。另外,在任何类型的文本中存储一个double都会增加他的实际大小,并增加解析和转换的计算成本。最后,聚类算法通常是迭代的,所以它们会一次又一次地需要相同的数据。我的方法没有缓存任何东西,它只是从磁盘读取很多次。
我现在正在寻找一种以二进制格式(数据库,原始二进制文件等)以及读取它们的有效方式存储任意数量数据的更紧凑方法。有没有人有任何想法提出?
JDBM3已经升级到JDBM4,更好地了解为[创建mapdb(http://www.mapdb.org/)。 –