我正在寻找最快的方法,用Java存储大约10亿条记录,每条记录约250字节(存储只会发生一次),然后能够以非连续顺序多次读取它。Java:用于存储和读取10亿条数据记录的最佳方法
源记录正在生成简单的java值对象,我想以相同的格式读回它们。
现在我最好的猜测是在平面文件中使用快速序列化库(如Kryo)存储这些对象,然后使用Java FileChannel直接随机访问以读取文件中特定位置的记录(当存储数据时,我将保存在一个hashmap中(也可以保存在磁盘上),每个记录的文件中的位置,以便我知道在哪里读取它)。
另外,不需要优化磁盘空间。我主要关心的是优化读取性能,同时具有合理的写入性能(即再次仅发生一次)。 最后精确度:虽然记录都是相同类型(相同的Java值对象),但它们的大小(以字节为单位)是可变的(例如它包含字符串)。
有没有比我上面提到的更好的方法?任何暗示或建议将不胜感激!
非常感谢, 托马斯
你有没有考虑将它们放入数据库?这样可以让您以更低的编程成本进行更复杂的索引。 –
对复杂索引没有实际需求:我只需要知道在哪里阅读特定记录(其在文件中的位置永远不会改变)。我的猜测是使用数据库将会慢得多(与数据库通信的开销较大等)。 – Tom
我一直在考虑索引更多的性能,特别是在选择内存中的内容时。 –