標籤:
高效能重複資料檢測與刪除技術研究
這裡介紹一些零碎的有關資料重刪的東西,以前總結的,放上可以和大家交流交流。
1 資料量的爆炸增長對現有儲存系統的容量、吞吐效能、可擴充性、可靠性、安全性、 可維護性和能耗管理等各個方面都帶來新的挑戰, 消除冗餘資訊最佳化儲存空間效率成為 緩解儲存容量瓶頸的重要手段,現有消除資訊冗餘的主要技術包括資料壓縮[8]和資料去 重。
2 資料壓縮是通過編碼方法用更少的位( bit)表達未經處理資料的過程,根據編碼 過程是否損失原始資訊量,又可將資料壓縮細分為無損壓縮和有損壓縮。無損壓縮通常 利用統計冗餘,用較少的位表達具有更高出現頻率的位串,根據編碼演算法和字典資訊可 從無損壓縮資料中完全恢複出未經處理資料資訊。
3 資料去重
資料去重( Data Deduplication)是在資料集或資料流中發現和消除重複內容以提高 資料的儲存和/或傳輸效率的過程,又稱重複資料刪除( Duplicate Data Elimination),簡 稱去重或重刪。作為最佳化儲存空間的一項關鍵技術,資料去重有助於減少儲存系統的資 源開銷和總體擁有成本( Total Cost of Ownership, TCO),其優點包括:
增加單位儲存空間所能容納的資料量以提高儲存空間效率。
減少維護單位元據量所需的裝置資源和降低相應能耗。
通過避免發送重複內容提高網路傳輸效率。
4 資料備份。
資料備份通過建立和 轉儲目標資料集在不同時間點的多個副本來提高資料的可靠性。資料備份根據策略不同 一般可分為全量備份( Full Backup)、差異增量備份( Differential Incremental Backup) 和累積增量備份( Cumulative Incremental Backup)。全量備份每次複製並儲存目標資料 集的完整副本,因此需要最長的備份時間和最多的儲存空間;差異增量備份僅複製和保 存上一次全量或差異增量備份之後修改過的資料,該策略減少了資料轉送量,但恢複數 據時需要首先還原到上一次全量備份,然後依次還原所有後續的差異增量資料,具有較 差的恢復目標( Recovery Time Objectives, RTO);累積增量備份複製和儲存上一次 全量備份之後修改過的所有資料, 因此恢複資料時僅需要還原上一次全量備份和最近的。
5 重複資料的界定方法
新型儲存解決方案引入基於內容的重複資料界定方法,此 類方法可工作在位元組、塊或檔案等三種不同的粒度層級。
位元組級重複資料界定方法主要採用 Delta 編碼演算法[24]。該演算法將檔案看成一系列符 號組成的有序串,通過計算並編碼待處理檔案 Fnew 與既有基準檔案 Fbase 之間的差量數 據形成 delta(Fnew, Fbase)檔案。若 Fnew 與 Fbase 之間具有很高的相似性,則僅儲存 delta(Fnew,Fbase)能夠達到節約儲存空間的效果。
檔案級重複資料界定方法通常採用高可靠性雜湊演算法(如 MD5 和 SHA-1)為給定 檔案產生具有極低衝突機率的標識符(也稱指紋),並通過篩查相同標識符來識別重複 檔案檔案是管理非結構化資料所普遍使用的資料群組織單元,常見檔案如文檔、圖 片、音頻和視頻等都具有特定的資料結構且容易作為整體在不同的儲存地區(如檔案夾)
塊級重複資料界定方法主要用於在相似而不相同的檔案之間檢測重複資料, 其通常 採用基於雜湊的內容標識技術, 以達到比位元組級去重更高的重複資料篩查速度和更廣的 重複內容檢測範圍。確定分塊邊界的主要方法可分為兩類,包括:固定長度分塊和可變 長度分塊。
固定長度分塊方法通常將目標檔案劃分為具有相同尺寸 Lfixed 的分塊( block), 然後去重過程計算每個分塊的指紋,並從中篩查出重複的資料對象。該方法簡單高效, 但當檔案因插入資料而形成新版本時, 原有分塊的邊界可能漂移到無法用既定演算法捕獲 的位置,從而導致重複資料無法被檢測。
基於滑動視窗的固定長度分塊方法[30]採用長度為 W=Lfixed 的視窗分析檔案資料。該 方法首先計算視窗內資料的雜湊值, 然後查詢系統中是否已存在重複雜湊記錄。若存在, 則確定當前視窗內的資料為重複分塊,並直接將視窗滑動到未處理的資料區;反之,則 將視窗向前滑動一個位元組,重新計算視窗內資料的雜湊值並查詢其重複性。若視窗向前 滑動 Lfixed 位元組仍未捕捉到重複分塊,則劃分之前的資料為一個長度為 Lfixed 的非重複分。此類方法能夠解決因插入資料導致的邊界 漂移問題,但其需要頻繁計算候選分塊指紋和查詢指紋重複性,具有很高的時間開銷, 因此缺乏實用性。
基於內容的分塊( Content Defined Chunking, CDC)演算法是最常用的可變長度分塊 方法[31-33],其通常利用長度 w<<Lfixed 的滑動視窗分析檔案資料,並採用具有較低計算複 雜度的雜湊演算法快速計算視窗內資料的指紋,若發現某個指紋匹配預定義的模式,則選 擇該滑動視窗所在位置為一個塊邊界。 1.6 所示,由於滑動視窗中資料的指紋僅依 賴於其內容和既定的雜湊函數,檔案a中資料區塊 e 的邊界能夠在檔案b中重新捕獲,進 而後續的重複資料也都能夠被再次發現。此類方法通常選用 Rabin 指紋演算法[34]計算視窗 內資料的指紋,其計算效率遠高於用於產生塊指紋的高可靠性雜湊演算法(如 MD5 和SHA-1),具有很強的實用性且被廣泛應用到各種去重解決方案中。
6 去重效率的評估方法
在基於網路的分布式儲存環境中,資料去重可以選擇性部署在源端(用戶端)或宿 端(服務端)。源端去重( Source Deduplication) [36,37]首先在用戶端計算待傳輸資料的 指紋並通過與服務端進行指紋比對發現和消除重複內容, 然後僅向服務端發送非重複數 據內容,從而達到同時節約網路頻寬和儲存資源的目標。宿端去重( DestinationDeduplication) [11]直接將用戶端的資料轉送到服務端,並在服務端內部檢測和消除重複 內容。兩種部署方式都能夠提高儲存空間效率,其主要區別在於源端去重通過消耗客戶。
資料去重的效率可從時間和空間兩個維度進行評估。從時效性方面,可將資料去重 方 法 劃 分 為 在 線 去 重 (Inline Deduplication ) [38] 和 後 處 理 去 重 (Postprocessing Deduplication) [39]。線上去重在資料寫入儲存系統之前完成重複內容的界定、檢測和刪 除過程。為了保障即時性,線上去重通常在記憶體中維護全部的資料索引(如雜湊表), 且需要消耗大量的計算資源。後處理去重將資料寫入儲存系統之後再適時檢測和消除重 複內容,其對計算和記憶體資源佔用率較低,但具有較大的硬碟空間開銷且無法保障去重過程的完成時間。
去重時間效率(去重效能)的量化評價指標為吞吐率( Throughput)。宿端去重的 吞吐率通常以網卡吞吐能力為上限。
7 當前去重方法突破效能瓶頸的主要技術手段包括構造記憶體快速索引、 挖掘資料局部 性、利用資料相似性和使用新型儲存介質等。
8 Data Domain 去重 檔案系統( Data Domain Deduplication File System, DDDFS)的技術架構。 DDDFS 分為 提供者、檔案服務、內容管理、段管理和容器管理五個層次,其中提供者層對外提 供 NFS、 CIFS 和 VTL 等標準協議的訪問服務;檔案服務層負責名字空間及檔案中繼資料 管理;內容管理層將檔案分割為可變長的資料區段(塊),並計算段指紋和建立檔案的段 構造表;段管理層維護資料區段的索引資訊並偵測和消除其中的重複資料;內容管理層將 平均長度為 8KB 的段彙總並封裝在 4MB 大小的容器中, 並採用順序壓縮演算法進一步提高資料的儲存空間效率, 此外, 採用容器作為儲存單元還有利於提高資料的讀寫吞吐率。
9 提高去重效率的方法
Mark Lillibridge 等[17]於 2009 年提出 Sparse Indexing 方法同時挖掘資料的局部性和 相似性以進一步減少記憶體開銷。 Sparse Indexing 採用雙限雙模演算法( Two-Thresholds
Two-Divisors, TTTD) [41]將備份資料流切割成平均長度為 4KB 的分塊,並按基於內容 的分塊演算法的基本原則將分塊序列劃分為 10MB 量級的資料區段。在儲存端, Sparse
Indexing 以 1/2n 的採樣率從每段資料中抽取分塊指紋並以此建立記憶體索引,其中被採樣 的塊指紋稱為鉤子( hook),每個鉤子維護至多 L 個與之關聯的段標識符。每個新資料 段 S 首先會被取樣,然後通過查詢記憶體索引確定與該資料區段共用鉤子數量最多的 M 個 相似資料區段。最後, Sparse Indexing 載入 M 個相似資料區段的全部指紋資訊與新資料區段 S 的指紋序列進行比對並消除後者所含重複分塊。由上可知, Sparse Indexing 是一種近似的去重解決方案,它允許少量重複內容存在於相似性較低的資料區段之間,從而達到減少記憶體開銷和提高去重效能的目標。
為了避免尋找重複內容時的硬碟訪問瓶頸和進一步提高去重效能, Biplob Debnath 等[21]在 ChunkStash 解決方案中採用固態盤儲存全部指紋索引。 ChunkStash 將資料流劃 分成平均長度為 8KB 的分塊序列,每個分塊採用 64 位元組記錄指紋和中繼資料資訊,每1024 個塊被封裝為一個保持局部性的容器( Container),其相應的 64KB 指紋資訊被保 存在固態盤的一個邏輯頁面中,固態盤具有 100~1000 倍於磁碟的訪問效率,因此能夠 從根本上提升指紋的尋找效能。 ChunkStash 在記憶體中維護三種資料結構,包括中繼資料緩 存、寫緩衝和緊湊型雜湊表( Compact Hash Table)。其中中繼資料快取維護從固態盤預取 的各容器的指紋序列,用於挖掘資料局部性;寫緩衝用於緩衝去重後的資料及其指紋, 以便封裝為容器和提高固態盤索引的寫入效率; 緊湊型雜湊表用於儲存固態盤索引的摘 要資訊,每個表項包含 2 位元組的緊湊指紋摘要和 4 位元組的固態盤地址,以便去重過程能 夠直接從固態盤中讀取該表項對應容器的完整指紋資訊。對於新收到的資料區塊,ChunkStash 首先在中繼資料快取和寫緩衝中尋找可能的重複指紋, 若未找到則進一步查詢 緊湊型雜湊表, 並在雜湊命中時讀取固態盤上對應容器的指紋頁面確認該資料區塊的重複 性。由於緊湊型雜湊表僅記錄 2位元組的指紋摘要,當查詢某個目標發生雜湊衝突時則會 導致對固態盤的錯誤讀取。 根據上述資料可知, 若採用 8KB 的平均分塊長度, 則 256GB固態盤可儲存約 32TB 資料的全部塊指紋,而對應的記憶體開銷約為 24GB。為了進一步 節約記憶體開銷, Biplob Debnath 等提出採用類似於 Sparse Indexing 的採樣方法,僅在每 個容器中抽取部分指紋插入緊湊型雜湊表,並允許 ChunkStash 成為一種近似去重方法。 其實驗顯示,當採用 1.563%的採樣率時,僅有約 0.5%的重複分塊無法識別。
Wen Xia 等[42]提出 SiLo 去重解決方案,綜合挖掘資料的局部性和相似性以 提高去重效能和減少記憶體開銷。 SiLo 在變長塊( Chunk)和檔案的基礎上引入段 ( Segment)和區( Block)的概念,其中變長塊是長度在 8KB 量級的重複資料刪除單 元;段是長度在 2MB 量級的相似性評估單元,大檔案的資料可能分布到多個段中,而 多個小檔案的內容也可能被彙總為一個段;區由多個段構成,是長度在 256MB 量級的 局部性保持單元。SiLo 在記憶體中維護三種資料結構:相似性雜湊表 ( Similarity Hash Table,SHT)、讀緩衝和寫緩衝。其中, SHT 儲存來自各個段的樣本指紋,讀緩衝維護最近使 用過的含有重複資料的區所對應的塊指紋序列, 寫緩衝用於將捕獲的非重複資料區塊彙總 為段和區並寫入硬碟。對於新資料區段 Si, SiLo 首先提取其樣本指紋並查詢 SHT 判斷系 統中是否存在重複或相似段, 若發現相似段則確保相似段所屬區的全部指紋被載入到讀 緩衝,最後在緩衝中檢索 Si 所含分塊的指紋並消除重複內容。值得注意的是,若 Si 之 前的鄰近段被檢測出相似性,則即使 Si 未被識別為相似段, SiLo 仍可能通過查詢讀緩 存預取的指紋序列識別出 Si所含的重複內容。與前述的解決方案相比, SiLo 並不單方 面依賴資料的局部性或相似性,因而對不同類型的資料集有更好的適應性。
資料去重2---高效能重複資料檢測與刪除技術研究一些零碎的知識