我正在尋找最快的方法,用Java存儲大約10億條記錄,每條記錄約250字節(存儲只會發生一次),然後能夠以非連續順序多次讀取它。Java:用於存儲和讀取10億條數據記錄的最佳方法
源記錄正在生成簡單的java值對象,我想以相同的格式讀回它們。
現在我最好的猜測是在平面文件中使用快速序列化庫(如Kryo)存儲這些對象,然後使用Java FileChannel直接隨機訪問以讀取文件中特定位置的記錄(當存儲數據時,我將保存在一個hashmap中(也可以保存在磁盤上),每個記錄的文件中的位置,以便我知道在哪裏讀取它)。
另外,不需要優化磁盤空間。我主要關心的是優化讀取性能,同時具有合理的寫入性能(即再次僅發生一次)。 最後精確度:雖然記錄都是相同類型(相同的Java值對象),但它們的大小(以字節爲單位)是可變的(例如它包含字符串)。
有沒有比我上面提到的更好的方法?任何暗示或建議將不勝感激!
非常感謝, 托馬斯
你有沒有考慮將它們放入數據庫?這樣可以讓您以更低的編程成本進行更復雜的索引。 –
對複雜索引沒有實際需求:我只需要知道在哪裏閱讀特定記錄(其在文件中的位置永遠不會改變)。我的猜測是使用數據庫將會慢得多(與數據庫通信的開銷較大等)。 – Tom
我一直在考慮索引更多的性能,特別是在選擇內存中的內容時。 –