2013-11-15 45 views
2

I'm寫作C#組件,其中應存儲和檢索的基於時間的數據,由此所述數據由二維的具有500×2000。高效存儲和檢索的二維陣列用附加日期信息

尺寸雙陣列

每10到100秒,我就會得到一組應該存儲約2年的數據。 檢索速度應該足夠快以在秒內獲得一組〜5000個數組。

此外,例如6個月以上的數據應該被刪除,每小時只有一個數組可用。

現在有幾種可能性,我已經簽出:

  • 「經典」的數據庫,例如MS SQL。我創建了一個數據庫結構,它存儲與timedata分開的數組,所以我可以查詢時間數據並只獲得我真正需要的數組。優點是對數據的非常好的處理(插入/刪除/選擇)。 問題是,您需要對數據庫進行某種級別的維護,但我無法保證在任何時候。

  • 鍵值數據庫例如Redis的。運行良好,(必須序列化+壓縮數組),但是我擔心由於數組大小,這種存儲不適合這種情況。另一件事是,它應該是一個持久存儲,不僅在內存中可用。

有人知道其他可能嗎?

+3

雙倍大小的500x2000 5000倍的數據是總共近40千兆字節。你確定這些數字嗎?在幾秒鐘內獲得一組這樣大小的5000個陣列是不可實現的... –

+0

它應該在20 GB左右(4字節* 500 * 2000 * 5000),但你是對的 - 這是相當多的。我已經將每個soap格式化程序的數組序列化(大小爲txt文件〜17 MB,並將其壓縮 - 現在的大小〜1 MB)。問題是解壓5000個陣列的巨大cpu利用率...... phew –

+0

請注意,雙打是8個字節,而不是4個字節!但是,如果它壓縮得太多,似乎表明許多值是相同的 - 是這種情況嗎? –

回答

0

我懷疑數據的使用者會依次需要它。如果是用於處理或查看,可能不需要一次擁有所有陣列。也許你可以實現一種數組的流式傳輸。 您可以通過這樣做:

  • 將它們存儲在文件系統中,閱讀和發送文件一個接一個。您可以將索引保存在SQL數據庫中的文件中,其中時間戳是聚集的主索引。
  • 使用一個數據庫(SQL很好),在這個數據庫中,您按照時間戳記對數組進行索引和排序,並將這些數組保存爲blob數據。這可以促進快速有序的讀取。