我正在尋找一種方式來存儲大量的後續處理模擬的時間序列數據。數據點可以通過映射從字符串來描述基本數據類型(主要是浮點數)的元組。每個數據點都有一個時間序列,每個時間序列都有一個ID。我正在尋找一種有效的方式來寫入/從磁盤讀取這些數據。仿真大致是這樣的存儲大量的模擬時間序列數據的
Sample sample = new Sample();
for (int i=0; i<samplesize; i++) {
State s = initialState();
for (int t=0; t<stages; t++) {
Map<String,Double> data = s.getData();
sample.add(i,t,data);
s = s.nextState();
}
}
實現樣例類,到目前爲止我測試了以下
- 嵌套列表/鍵值地圖:很簡單,但保留所有的數據在內存中,然後將所有內容序列化到磁盤不能很好地擴展。
- 創建mapdb:我已測試了兩種變體中,(a)使用所述時間序列id作爲密鑰和時間系列作爲值,(b)使用時間系列ID和時間索引的平坦索引作爲密鑰和數據點作爲值。 (b)的表現我有點擔心,但(a)工作得很好。
我也考慮過乾脆把每件事寫成CSV。這種情況的好處是,幾乎任何人都可以在以後導入數據。不足之處是,直到找到記錄搜索特定時間序列或記錄與任意ID需要逐行讀取文件中的行。
Mapdb是一件好事 - 看看這個http://kotek.net/blog/3G_map是否可以幫助您更好地調整一下以獲得更好的性能 – Slartibartfast