2012-12-10 84 views
1

我處於C#(它將作爲Windows服務運行)內存緩存設計的初始階段。預計一旦投入生產,平均可以容納近百萬個物體(各種類型)。某些緩存項目的大小可能高達10MB(或更多)。 我考慮了各種數據存儲解決方案,現在我決定使用DataTable或SQLite內存中的實例作爲緩存存儲。在這一點上我的問題是內存中緩存 - SQLite vs System.Data.DataTable

  1. 你認爲一個DataTable的性能將與這麼多的記錄數?
  2. 你覺得和SQLite的解決方案會是一個矯枉過正?(由於SQLite是設計成一個「數據庫」,我可能不是真的想所有這些數據庫相關的水暖活動)

性能是最高優先級我。

編輯

添加一些細節。

  1. 這些緩存項不只是鍵值對,他們有兩個 (截至目前),性質(固定和鎖定的項目),這會影響 其可用性。每個查找將包括所有三個 屬性。
  2. Memcached已經考慮過了,但在這一點上,這不是一個 選項,主要是由於我們的SLA限制(這就是我可以說的關於 它)。
  3. 並非所有項目都是10MB大小。
  4. 我非常肯定,這些項目中的很多將僅僅是 數字和小字符串值。
  5. 我相信RAM的可用性不是問題。

由於提前, 詹姆斯

+2

這真的取決於您的查詢要求。如果您需要相對複雜的臨時查詢,您可能需要使用SQLite解決方案。但是,如果每個查詢都要使用鍵/索引,那麼DataTable應該足夠了。 – rossipedia

+1

你有10,000,000MB的RAM? –

+1

在作爲服務運行的內存緩存中?像memcached?爲什麼重新發明輪子?如果你的第一個想法是在內存中使用數據表或SQL數據庫,那麼你不會這麼做。 – Chris

回答

2

1:糟糕。 DataTable速度慢,內存大,不會奇蹟般地改變大件物品。
2:你告訴我們。

你有沒有考慮過使用簡單的字典?鍵/值對,你知道。

答案真的要依賴於你計劃用Cache做什麼。

+0

我已更新了我的原始問題的更多細節。 –

1

如果每個項目都是1 MB,即1 TB的內存。
你有1 TB的內存專用於此?
固態硬盤上的數據庫可能是更好的設計。

DataTable很大很慢。

你打算怎麼看項目?
你打算擁有一個完整的密鑰嗎?
你打算有足夠的memeory?
如果是這樣的字典。

+0

我已更新了我的原始問題的更多細節 –