重複數據刪除(dedup)技術介紹 1

重複數據刪除(de-duplication)是存儲領域,尤其是數據備份領域的一個非常重要的概念。其目的是刪除重複的數據塊,從而減少對存儲空間的使用。

這種想法的出發點是非常自然的。通常情況下,每次備份的數據總是會有一部分跟上一次備份的數據重合。

比如,每次備份都要包含一個100MB的文件,那麼這個文件就會重複出現在所有的備份數據中。

經過多次備份操作之後,重複的數據塊就會佔用可觀的存儲空間,而實際上,這些重複的數據塊保留一份就足夠了。

dedup就是爲了解決這種問題而產生的。


dedup和數據壓縮是不同的兩個概念。

它們都能減少對存儲空間的佔用,這是它們的共同點。

數據壓縮需要大量的CPU和IO資源,並且解壓之後才能使用。另外,數據壓縮沒有辦法解決重複數據塊的問題。

dedup同樣需要較多的CPU資源,但是大幅度降低了對IO資源的佔用。


既然要消除重複的數據塊,那麼dedup面對的第一個問題就是怎樣劃分數據塊。

最簡單的也最容易想到的辦法,就是以固定的長度進行劃分,比如每個數據塊都是1MB大小。

這種方法的好處是易於實現,效率高。

缺點也是非常明顯的,那就是對於增加/刪除的數據效果不明顯。

比如一個10MB的文件,第一次備份的時候劃分成了10個數據塊。

隨後在文件的開頭增加了一個字符,文件長度變成了10MB+1Byte。那麼下一次備份發生的時候,這個文件會被分成11個數據段,前10個數據段都是1MB大小,最後一個數據段包含1個Byte。

但是現在這11個數據段都會被認爲是新的數據段,從而沒有達到dedup所期望的效果。


解決這個問題的辦法有很多,最容易想到的辦法就是根據不同的offset,在新的備份數據中順序查找是否與已有的數據塊重複。

這樣做雖然會解決數據去重的問題,但是也會帶來很大的CPU消耗。一個通用的附加解決方案是scroll checksum,用於降低計算數據塊的checksum所打來的CPU開銷。


當然針對這個問題也有很多更好的解決方案,但是這個方法因爲簡潔易於實現,所以被大量採用。比如著名的rsync工具,就是這麼實現的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章