2011-04-21 72 views
0

我有一個需要在磁盤上緩存大量數據的需求。 每當數據庫發生變化時,都會從數據庫中檢索數據並緩存在磁盤上。我將有一個後臺進程,不斷檢查我的緩存數據與數據庫,並在需要時更新它。將大量數據緩存到磁盤中

我想知道在我的磁盤上組織緩存數據的最佳方式是什麼,以便從緩存寫入和讀取速度更快。 另一個線程將用於從數據庫中提取一些新數據並將其緩存在磁盤上。我還需要注意兩個線程之間的同步(一個將更新現有的緩存數據,另一個將新寫入的數據寫入緩存)。 請建議一個組織緩存中數據的策略,並且也是線程之間的同步。

+4

這太瘋狂了。緩存在光盤上?你的意思是在磁盤上存檔嗎?數據庫已經具有內置緩存 - 並且比任何有人提供的手工存儲更高效和智能。 – Aliostad 2011-04-21 10:32:31

+1

是的,我會緩存在硬盤上。這是爲了避免來自數據庫服務器的多個數據庫調用和數據傳輸。 – KhanS 2011-04-21 10:47:51

+1

這不是緩存。這就是「歸檔」。緩存意味着通過存儲**更多的易失性存儲**來加快速度。這不是你在做什麼。 – Aliostad 2011-04-21 10:51:23

回答

1

SQL Server有一些叫做XML表的東西。這些表基於位於磁盤中的物理XML文件。您可以將磁盤中的XML數據映射/鏈接到SQL Server中的表中。對於用戶來說,它是無縫的,換句話說,他們將這些表格視爲常規表格。

除了對於磁盤緩存上的海量數據技術/哲學討論,這只是一個想法...

1

你關心的數據相合?關於電源故障?

內存映射文件連同occational衝porbably希望得到你想要

你需要有數據的索引訪問?

您可能需要設計一些B樹實現或B +樹實現。這使索引數據的有效恢復和更好的塊級鎖定成爲可能。

http://code.google.com/p/high-concurrency-btree/

0

作爲替代答案,我自己B+Tree implementation將整齊地解決這個問題作爲一個完全託管代碼(C#)實現一個IDictionary < TKEY的,TValue >的。它是一個單文件鍵/值存儲,它是線程安全的並且針對併發進行了優化。它是專門爲此目的而創建的,用於提供直寫式高速緩存。