現在有兩個不同內容的Word文檔(其顯示的文字不同 ),他們之間有沒有重合地方呢?或者說,這兩個不同的文檔之間有沒有通用的內容呢?答案是肯定的。如不同的文檔之間,可能具有相同的訪問權限。假設,每個 文檔需要利用0.5K的容量來保存這些信息或者屬性(如只讀或者隱藏等等)。那么10000個文件,需要占用多少容量呢?上百萬個文件呢?顯然,這些通用 的信息會造成比較大的浪費。為了節約存儲的成本,此時重復刪除技術就派上用場了。
重復數據刪除技術是一個減少或者消除冗余文件、字節、或者 數據塊的一個過程。簡單的說,就是確保只有獨一無二的數據被保存到存儲設備中。重復的內容都被壓縮了。從而來降低存儲成本(如硬盤或者維護的成本等等)。 在存儲設備中(如用于文件服務器的存儲設備),往往數據會有比較高的通用性。用戶之間、服務器之間、同一種類型的文件之間相當一部分內容都是通用的。重復 數據刪除技術按自然邊界江數據拆分為非常細粒度的子塊單元,會采用指針代替相同的子塊單元,從而達到顯著降低存儲空間的目的。這個原理跟數據庫中的關系表 有點類似。不過重復數據刪除技術的工作原理要比其復雜的多。還好這并不是存儲管理員必須要掌握的內容。我們只需要知道,重復數據刪除技術有哪幾種類型、各 自有什么特點、如何根據企業的實際情況來選擇適用的存儲技術等等。
根據啟動重復數據刪除技術的時機來區分,可以將重復數據刪除技術分為聯機重復數據刪除技術和后期處理重復數據刪除技術。作為存儲管理員,可以不精通重復刪除技術背后的工作原理,但是對于這兩種技術的特點必須了解。
一、 后期處理重復數據刪除技術的優缺點分析。
假設現在往存儲設備中存儲數據,那么存儲系統是什么時候判斷是否有重復的子塊呢?是存儲之間判斷,還是存儲作業完成之后判斷呢?這就是重復數據刪除流程啟動的時機。如果是在存儲作業完成之后再進行判斷的話,那么就是后期重復數據刪除技術。
這 里筆者以一個備份的案例來談這種技術的優缺點。現在有一個Oracle數據庫,需要定期向存儲設備中備份數據。當數據庫服務器開始向備份設備傳輸備份數據 流時,系統是將整個備份數據量作為一個整體來傳遞。然后啟動單獨的進程開始讀取已寫入磁盤的數據塊,開始判斷是否有重復的子塊,并進行后續的相關動作。如 下圖所示,可以形象的說明這種方式的特點。
從上圖中可以知道,數據存儲與重復數據刪出流程是兩個獨立的進程。一個進程負責數據的存儲,另外 一個進程來檢查是否有重復的數據塊以及后續的處理。簡單的說,就是一邊往存儲設備中存儲數據、一邊進行判斷。如果讀入的數據塊和已存儲的數據塊重復了,則 會使用指針來替代這個數據塊并刪除重復的數據塊(或者說可以被后續的數據所覆蓋)。如果沒有重復的話,則不會對這個暑假塊進行任何操作(因為這個數據塊實 際上已經保存在硬盤上)。
這種處理方式主要的缺陷是對于I/O的要求比較高。其先將數據保存在存儲設備上。然后再由一個獨立的進程從硬盤中 讀取數據來判斷是否有重復的現象。如果有的話,還需要將其刪除。從這個流程中就可以看出,有多個I/O的過程。所以對硬盤的I/O提出了比較高的要求。其 優勢是在存儲數據的時候,不需要先在內存中進行緩存、再判斷。為此可以節省內存的開銷,提高數據存儲的效率。
二、 聯機重復數據刪除技術的優缺點分析。
采用聯機重復刪除技術的方式時,其主要的特點就是數 據存儲、重復數據刪除進程有一個前后的過程,而不是并列。筆者也以數據庫備份為例來說明這種方式的特點。當備份數據流到達存儲設備時,數據并不會直接保存 在硬盤中,而是先駐留在內存中。然后重復數據刪除技術進程會對這個數據進行重復性的判斷。如果與硬盤中已有的內容重復的,則不會將這個數據保存在硬盤中, 而是利用指針來代替。相反,如果硬盤中沒有已知的重復數據則將數據保存在硬盤中。其主要的過程就如下圖所示。
使用聯機重復數據刪除技術主要 的優勢是可以降低硬盤的I/O開銷。在后期處理重復數據刪除技術這種方式中,需要先對所有備份數據進行寫操作。然后重復數據刪除進程需要將寫入的數據再次 讀取出來,以判斷是否有重復的子塊。如果有重復子塊的話,就需要進行刪除的操作。光從這個數據流來看,就用了三次的I/O操作。這還不包括更新哈希表的I /O操作。所以采用后期處理重復數據的刪除技術,其I/O的開銷是非常龐大的。
而采用聯機重復數據刪除技術,就不存在這個問題。因為其數據一開始就是在內存中,不保存在硬盤上。只有確認存儲設備中沒有重復的子塊時,才會將數據保存在硬盤上。為此其基本上只有一個I/O操作。也就是說,其大部分的工作都是在內存中完成的,就沒有涉及到硬盤的I/O。
不 過采用聯機重復刪除技術,其對于內存的要求會比較高,需要利用額外的內存在保存這些備份數據。另外,從存儲的時間上來看,由于其采用的是一前一后的方式, 為此從整體的存儲時間來看(假設不考慮I/O沖突),要比后期重復數據處理要長。在實際工作中,如果存儲設備的I/O不理想,后期處理方式則會造成I/O 比較嚴重的沖突,此時后期處理方式的作業時間反而要比聯機處理方式要長。
三、 如何選擇適用自己企業的處理方式。
可見,兩種處理方式各有各的特點。后期處理重復數據刪 除技術主要耗費的是硬盤的I/O資源,而聯機重復數據刪除技術其主要占用的是存儲服務器的內存。即后期重復數據刪除技術會將整個處理過程分解為兩個相對獨 立的進程,從而縮短整個作業的時間。但是其是以增加至少三倍以上的I/O操作來達到這個目的的。采用聯機重復數據刪除技術,整個處理過程中所需要的I/O 操作比較少。但是中間數據存儲有一個等待的過程,為此會導致備份時間作業的延長。
了解了這些差異之后,要做出一個合理的判斷難度應該不是很 大。如果存儲服務器的硬盤性能比較好、但是內存比較小的話,顯然比較適合采用后期處理重復數據刪除技術。如果在后續的維護中,發現磁盤的I/O沖突比較嚴 重,已經影響到了數據存儲的效率,此時則比較適合采用聯機重復刪除技術。一般來說,對于備份作業并發數量比較多的企業,如當用戶關機時會將每臺客戶端上的 特定文件夾中有更新的文件在服務器上進行備份。當員工下班時,會觸發大量的備份作業。此時如果采用聯機重復刪除技術的話,用戶可能會有一個比較長的等待時 間。不過如果采用后期處理刪除技術的話,可以先將數據在服務器上進行備份。用戶可以在比較短的時間內完成備份作業并實現關機的過程。然后存儲服務器就可以 慢慢的判斷是否有重復的子塊,并進行后續的處理。
可見針對不同的情形,會有不同的選擇。主要還是需要根據企業的實際情況來進行判斷。作為存儲管理員,需要牢牢的掌握這兩種處理方式的差異。雖然最終都可以實現相同的結果,但是對于其性能會有很大的影響。