Java:存储和读取10亿条数据记录的最佳方法

时间:2014-01-12 09:10:23

标签: java performance serialization file-io storage

我正在寻找Java中最快的方法来存储大约10亿条记录,每条记录大约250个字节(存储只发生一次),然后能够以非连续的顺序多次读取它。 / p>

源记录正在生成简单的java值对象,我想以相同的格式读回来。

现在我最好的猜测是在平面文件中使用快速序列化库(如Kryo)存储这些对象,然后使用Java FileChannel进行直接随机访问以读取文件中特定位置的记录(当存储数据,我将保留在每个记录的文件中的位置的哈希映射(也保存在磁盘上),以便我知道在哪里读取它。

此外,无需优化磁盘空间。我关键的问题是优化读取性能,同时具有合理的写入性能(同样,只会发生一次)。 最后一个精度:虽然记录都是相同的类型(相同的Java值对象),但它们的大小(以字节为单位)是可变的(例如它包含字符串)。

有没有比我上面提到的更好的方法?任何提示或建议将不胜感激!

非常感谢, 托马斯

2 个答案:

答案 0 :(得分:1)

你可以使用Apache Lucene,它将照顾你上面提到的一切:) 它速度非常快,您可以更快地搜索结果。 Apache Lucene将对象保存在文件中并对其进行索引。我们已经在几个应用程序中使用它并且速度非常快。

答案 1 :(得分:1)

您可以使用嵌入式Derby数据库。它是用Java编写的,您实际上可以在流程中嵌入它,因此不存在进程间或网络通信的开销。它将存储数据并允许您查询/等处理所有复杂性和索引。