我正在寻找Java中最快的方法来存储大约10亿条记录,每条记录大约250个字节(存储只发生一次),然后能够以非连续的顺序多次读取它。 / p>
源记录正在生成简单的java值对象,我想以相同的格式读回来。
现在我最好的猜测是在平面文件中使用快速序列化库(如Kryo)存储这些对象,然后使用Java FileChannel进行直接随机访问以读取文件中特定位置的记录(当存储数据,我将保留在每个记录的文件中的位置的哈希映射(也保存在磁盘上),以便我知道在哪里读取它。
此外,无需优化磁盘空间。我关键的问题是优化读取性能,同时具有合理的写入性能(同样,只会发生一次)。 最后一个精度:虽然记录都是相同的类型(相同的Java值对象),但它们的大小(以字节为单位)是可变的(例如它包含字符串)。
有没有比我上面提到的更好的方法?任何提示或建议将不胜感激!
非常感谢, 托马斯
答案 0 :(得分:1)
你可以使用Apache Lucene,它将照顾你上面提到的一切:) 它速度非常快,您可以更快地搜索结果。 Apache Lucene将对象保存在文件中并对其进行索引。我们已经在几个应用程序中使用它并且速度非常快。
答案 1 :(得分:1)
您可以使用嵌入式Derby数据库。它是用Java编写的,您实际上可以在流程中嵌入它,因此不存在进程间或网络通信的开销。它将存储数据并允许您查询/等处理所有复杂性和索引。