我正在寻找最快的方法,在 Java 中,存储约 10 亿条记录,每条记录约 250 字节(存储仅发生一次),然后能够以非顺序顺序多次读取它。
源记录正在生成为简单的 java 值对象,我想以相同的格式读回它们。
目前我最好的猜测是使用快速序列化库(例如 Kryo)将这些对象存储在平面文件中,然后使用 Java FileChannel 进行直接随机访问以读取文件中特定位置的记录(当存储数据时,我将保留在 HashMap 中(也将保存在磁盘上)以及每个记录在文件中的位置,以便我知道在哪里读取它)。
此外,无需优化磁盘空间。我主要关心的是优化读取性能,同时具有合理的写入性能(同样,只会发生一次)。 最后精度:虽然记录都是相同类型(相同的 Java 值对象),但它们的大小(以字节为单位)是可变的(例如,它包含字符串)。
还有比我上面提到的更好的方法吗?任何提示或建议将不胜感激!
非常感谢, 托马斯
最佳答案
您可以使用 Apache Lucene,它将处理您上面提到的所有事情:) 它非常快,您可以比以往更快地搜索结果。 Apache Lucene 将对象保存在文件中并为其建立索引。我们已经在几个应用程序中使用了它,而且速度非常快。
关于Java:存储和读取10亿条数据记录的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21073010/