2010-12-19 121 views
1

我有一個應用程序,我每0.1秒存儲大約1k字節的數據。這是36MByte /小時,或大約600MByte /天。我可以使用什麼技術來存儲數據

數據是高度可壓縮的,所以它應該壓縮在10:1和100:1之間。所有數據都由時間戳記引用。

我的問題是:我可以用什麼技術來存儲這些數據?

約束:

  • 將數據插入到數據庫不能隨着數據庫大小變大的時間。這個限制排除了Microsoft SQL Server(我們嘗試了它,並且在5天后它停止了,因爲每個「插入」都花了一分鐘)。
  • 我們可以有效地暫停每天4小時的數據記錄,這會讓我們有時間做壓縮等。
  • 我們希望與LINQ for .NET兼容,這意味着我們可能需要一個數據庫一個LINQ適配器(一個MySQL風格的界面可以)。
+2

您的SQL服務器配置不正確。可以將其設置爲無限期地插入一段時間。 – 2010-12-19 22:20:06

+1

插入時間超過一分鐘? 99%的時間,這是查詢問題,而不是數據庫。嘗試使用NOLOCK指定Insert,並確保如果插入的行中有索引,則插入的行將在索引的「結尾」處或附近的某處,而不是隨機在中間。 – Juliet 2010-12-19 22:22:29

+1

我會重新評估是否需要使用Linq ...雖然我認爲Linq很棒,而且我自己也使用它,但對於這樣的事情,我會謹慎的鼓勵客戶端處理的編程方法(而不是服務器端處理)。 – Arafangion 2010-12-19 22:41:07

回答

3

一種方法是簡單地將傳入數據附加到磁盤上的文件。一天之後,切換到一個新文件,然後產生一個進程來壓縮和存儲前一天的文件。

您似乎認爲您需要將數據存儲在數據庫中,而沒有說明原因。你做?

+0

我想要在數據庫中的數據,所以我可以很容易地查詢它。 LINQ查詢非常有表現力,使事情變得更容易。 – Contango 2010-12-20 00:47:38

+0

如果您不需要立即使用當前的數據,那麼您可以讓後臺進程執行實際插入數據庫的操作。這樣,您的在線日誌記錄根本不依賴於數據庫。這將是更強大系統的一個方面。 – 2010-12-20 01:51:24

+0

如果沒有併發編寫器,這實際上是一個非常好的解決方案,可以很好地擴展。 – Ronnis 2010-12-20 16:37:59

1

如果你不能讓SQL Server及時處理這麼小的負載,那麼我想知道如果你沒有探究你如何插入數據,任何RDBMS都會對你有效。

你是否正在做一個非常簡單的插入到一個沒有其他索引/函數/進程阻塞/讀取的表(帶有主鍵)?或者說,這個過程實際上比這個簡單/小插入更復雜一點?

如果你對使用Linq沒有信心,你是否在分析你的linq語句以確保你沒有告訴ORM做一些愚蠢的事情?

+0

我們正在做一個簡單的插入。我會按照你的建議去做 - 分析我們的LINQ,確保我們沒有做任何愚蠢的事情(比如使用「Orderby」強制整個表加載到內存中,以便它可以被分類)。 – Contango 2010-12-21 11:45:43

1

也許您可以將所有內容存儲到二進制文件中,並將元數據存儲到數據庫中。

相關問題