2013-06-30 77 views
1

我正在尋找一種方式來存儲大量的後續處理模擬的時間序列數據。數據點可以通過映射從字符串來描述基本數據類型(主要是浮點數)的元組。每個數據點都有一個時間序列,每個時間序列都有一個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需要逐行讀取文件中的行。

+1

Mapdb是一件好事 - 看看這個http://kotek.net/blog/3G_map是否可以幫助您更好地調整一下以獲得更好的性能 – Slartibartfast

回答

0

由於您使用的是外部存儲器,因此您可能需要閱讀Henrik Jonsson's thesis - B-trees中B樹的章節。它們本身是一種非常流行的索引外部存儲器中數據的方式,您應該能夠在Java中查找實現,Jonnson討論瞭如何調整它們以存儲時間序列數據。

+0

我寧願在製作之前尋找一個隨時可用的庫努力實現(和測試)我自己的B樹。我認爲MapDB也爲其BTreeMap使用了一個b-tree。但是感謝這篇論文的鏈接。 – Nils

0

甲現成-GO(開源)庫是可用於存儲的時間序列數據的Hierarchical Data Format(HDF)。軟件的Java-compatible version也存在。

它在內部使用B樹來存儲數據,並提供許多其他功能來提高性能(壓縮,緩存等)。

相關問題