2009-09-06 93 views
2

在開發實時記錄輸入信號(數字)的軟件時,如何最好地存儲和壓縮這些數據?一個SQL引擎是否會對此有利,允許將來進行快速數據挖掘,還是有其他適合或足夠壓縮的數據格式,可以支持每秒多達1000個數據樣本?如何存儲和壓縮實時數據記錄的數據?

我不介意使用VC++進行構建,但適用於C#的想法是理想的。

+0

每秒1000個數據採樣,但是多少秒? – 2009-09-06 11:03:03

+0

認爲「永遠」!我的客戶說我真的無法控制這個參數。 – 2009-09-06 11:16:05

回答

2

如果沒有更多的信息,比如說什麼來源,你需要查詢存儲的數據等等,很難說。

但是,對於1000個樣本/秒,您應該有把握地在內存中保留幾秒鐘的數據,然後將它們批量寫入另一個線程的持久存儲中。 (建議使用多處理器機器)。

如果您決定通過託管語言進行操作,請保留相同的數據結構以保留樣本 - 這樣GC就不需要經常收集內存。通過使用指針和不安全關鍵字(提供對內存結構的直接訪問並消除數組的邊界檢查代碼),可以獲得稍好的性能。

我不知道你需要多少CPU時間來收集每個樣本;以及如何在指定的時間讀取每個樣本的時間關鍵(它們是否會被緩存在您讀取的設備中?)。如果採樣對時間要求很高,則每個採樣需要1 ms;那麼你可能無法負擔垃圾收集器踢的風險,因爲它會阻塞你的線程一段時間。在這種情況下,我會採取非託管方式。

SQL Server可以輕鬆保存您的數據,或者您可以將它們寫入文件。它主要取決於你以後需要怎樣處理數據。我不知道每個樣本有多少數據,但我們假設它是8個字節。然後你有8000字節每秒寫入原始數據 - 也許你有一些開銷,所以它可能是10 kB /秒。我能想到的大多數存儲機制都能夠以這種速度寫入數據。只要確保在另一個線程上進行寫入,而不是進行採樣。

2

您可能需要查看時間序列數據庫,而不是關係數據庫。這些將進行優化,以處理您正在考慮的數據和使用情況。

Kx是受歡迎的選擇,因爲是Fame