我正在開發一個實施重複數據刪除的開源項目。 (關於該項目的鏈接,請參閱下面的兩個超鏈接) 當前項目的性能相當好,但隨着更多塊寫入磁盤會降低性能。 這是由於HashManager。對於每個寫入的塊,hashmanager存儲一個Hash-BlockId對。對於重複數據刪除過程,需要具有給定散列的塊標識符列表。 (使用的散列是Crc32) 對於HashManager的接口,請參閱the source。如何爲許多數據塊存儲散列,並通過散列檢索列表?
接口的當前implementation將列表存儲在256個文件(crc & 0xFF)中,並將完整列表加載到內存中。當需要另一個列表時,先前的列表被保存並且下一個被加載。除了這可能導致內存耗盡的事實之外,這意味着降低性能。
有什麼好的選擇來解決這個問題?
(只是爲了clearify:塊完全檢查,看他們是否重複數據刪除之前匹配)
我在搜索過程中遇到了B樹,但在我看來,它似乎是一個複雜的算法。你是否熟悉任何好的實現? – mterwoord 2012-04-23 10:39:21