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

标签 java performance serialization file-io storage

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

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

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

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

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

非常感谢, 托马斯

最佳答案

您可以使用 Apache Lucene,它将处理您上面提到的所有事情:) 它非常快,您可以比以往更快地搜索结果。 Apache Lucene 将对象保存在文件中并为其建立索引。我们已经在几个应用程序中使用了它,而且速度非常快。

关于Java:存储和读取10亿条数据记录的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21073010/

相关文章:

java - 类 从 Servlet 请求数据

c# - 带有 IXmlSerializable 的命名空间前缀

c++ - Boost序列化数据标准

java - 使用向后兼容性编译的 java 类是否使用更新版本的 JavaVM 优化?

javascript - 为什么向后迭代数组比向前迭代更快

sql-server - 与查询单独运行时相比,查询在跟踪中显示的持续时间值更大

c# - 为什么我的 JSON 中没有添加大括号?

java - 将 XText 模型实例序列化和反序列化为 OutputStream

java - 在 Java 中使用 Google Drive 中的 Google Spreadsheet API 创建电子表格

java - 数据存储是否适合存储小时类次?