專利名稱:一種雙向并發(fā)執(zhí)行的文件級可變長數(shù)據(jù)分塊方法
技術領域:
本發(fā)明涉及的是一種信息系統(tǒng)中文件級可變長數(shù)據(jù)分塊方法。 背景技術:
隨著信息化系統(tǒng)廣泛應用,大型數(shù)據(jù)中心的數(shù)據(jù)存儲設備的容量由于數(shù)據(jù)信息呈 指數(shù)級增長而快速趨于飽和。同時,由于以自然災難、人為惡意災難為代表的各種災難性 事件頻發(fā),企事業(yè)單位正面臨著業(yè)務量激增和信息備份間隔縮短雙重壓力,管理數(shù)據(jù)成本 (包括存儲成本、空間成本、功耗成本等綜合)顯著增加,提高數(shù)據(jù)存儲效率已經(jīng)成為當前 數(shù)據(jù)備份研究的熱點問題。研究同時發(fā)現(xiàn),應用系統(tǒng)中的數(shù)據(jù)信息的冗余度很高,存在大量重復的文件或數(shù) 據(jù)塊。為此,人們提出了重復數(shù)據(jù)刪除技術,以消除分布在存儲系統(tǒng)中的冗余信息,降低信 息存儲成本。重復數(shù)據(jù)刪除是一種數(shù)據(jù)縮減技術,旨在減少存儲系統(tǒng)中實際使用的存儲容量。 其核心思想是在存儲系統(tǒng)中只保留不同內容的數(shù)據(jù),當數(shù)據(jù)中心進行數(shù)據(jù)添加或更新時, 如果新數(shù)據(jù)和存儲系統(tǒng)中已有數(shù)據(jù)內容相同,則不直接保存該新數(shù)據(jù),而是在新數(shù)據(jù)位置 上保存指向已有數(shù)據(jù)塊的指針。由于指針占用空間遠遠低于數(shù)據(jù)占用空間,因此,采用重復 數(shù)據(jù)刪除技術可以有效地減少數(shù)據(jù)在實際存儲系統(tǒng)中的存儲容量。在應用重復數(shù)據(jù)刪除技術進行數(shù)據(jù)刪冗過程中,通常是以數(shù)據(jù)塊作為查找相同數(shù) 據(jù)的基本單位,即首先將數(shù)據(jù)切分為若干的數(shù)據(jù)塊,然后將數(shù)據(jù)塊和存儲系統(tǒng)中數(shù)據(jù)塊進 行比較,并以此確定可以刪除的冗余數(shù)據(jù)塊。顯然,數(shù)據(jù)切分算法的優(yōu)劣將直接關系到重復 數(shù)據(jù)刪除技術效率。為描述方便,首先給出如下定義1、哈希值,哈希算法哈希算法將任意長度的二進制值映射為固定長度的較小二 進制值,這個小的二進制值稱為哈希值。2、滑動窗口 即一個可滑動、覆蓋固定大小數(shù)據(jù)的窗口。每次滑動,便將窗口的覆 蓋范圍朝指定方向移動一個字節(jié)。3、指紋即對數(shù)據(jù)進行校驗所得到的二進制值。4、查重將數(shù)據(jù)塊的哈希值發(fā)送到備份服務器端,與已存儲數(shù)據(jù)塊的哈希值作比 較,若存在相等的哈希值,則該數(shù)據(jù)塊為重復數(shù)據(jù);否則,即為新數(shù)據(jù)。當前,文件級數(shù)據(jù)切分方法主要有三種1、文件塊方法,即數(shù)據(jù)塊以文件為單位,通過對文件計算哈希值來判斷該文件是 否冗余。該方法的優(yōu)點是算法簡單、計算速度快,缺點是數(shù)據(jù)塊粒度較大。2、固定分塊方法,即將文件切分成固定長度的數(shù)據(jù)塊,通過計算每塊數(shù)據(jù)塊的哈 希值來判斷其是否冗余。該方法的優(yōu)點是數(shù)據(jù)塊粒度較小、處理速度快,缺點是當文件發(fā)生 插入或刪除變化時冗余處理效率較低。3、可變分塊方法,即從文件頭開始掃描,計算固定字節(jié)大小滑動窗口中數(shù)據(jù)的指紋,當指紋值滿足一定條件時,便認為這是一個數(shù)據(jù)塊的邊界,否則將滑動窗口向文件尾滑 動一個字節(jié),繼續(xù)計算指紋值并進行判斷;相鄰的兩個邊界則確定了一個數(shù)據(jù)塊,再計算該 數(shù)據(jù)塊的哈希值來判斷其是否冗余。該方法的優(yōu)點是對于文件發(fā)生插入或刪除變化時處理 高效,缺點是算法復雜、計算量高、處理速度慢。在上述三種方法中,可變分塊方法處理由于效率較高而得到了廣泛應用。然而,其 存在處理速度慢的問題。從可變分塊方法處理流程來看,其是一種單向的數(shù)據(jù)切分方法,即 數(shù)據(jù)切分方法從頭掃描文件內容以確定數(shù)據(jù)塊的邊界,當獲得兩個相鄰邊界時,便得到了 一個數(shù)據(jù)塊;接著,繼續(xù)掃描文件內容、獲取數(shù)據(jù)塊,直到文件尾。為了提高其執(zhí)行速度,本發(fā)明提供了一種雙向并發(fā)執(zhí)行的數(shù)據(jù)切分方法,即方法 的執(zhí)行借助多核處理器的并發(fā)處理能力,用兩個線程分別從文件的首尾出發(fā),利用數(shù)據(jù)塊 邊界只由數(shù)據(jù)內容所確定,在文件中位置固定的特性,同時掃描文件,確定數(shù)據(jù)塊的邊界, 進而切分數(shù)據(jù)塊,直到由首尾出發(fā)的兩個線程在文件中部相遇為止,從而顯著提高了數(shù)據(jù) 切分的速度。
發(fā)明內容
本發(fā)明的目的在于一種信息系統(tǒng)中改進的文件級可變長數(shù)據(jù)分塊方法。該方法能 夠根據(jù)文件內容,通過從文件兩端同時切分的方法快速對文件進行數(shù)據(jù)分塊,從而大大提 高數(shù)據(jù)分塊的速度、改進重復數(shù)據(jù)刪除的效能。本發(fā)明的目的是這樣實現(xiàn)的設待處理的文件集包含了 m個文件(F1, F2, ... , Fffl);方法中使用的兩個線程為 (TpT2);兩個滑動窗口分別為(Wl、W2),其大小為W;對兩個滑動窗口中數(shù)據(jù)計算得到指紋 值分別記錄為參數(shù)(I^r2);模數(shù)(判斷滑動窗口是否確定了數(shù)據(jù)塊邊界時所用到的取模 整數(shù))為E ;兩個磁盤數(shù)據(jù)緩存(緩存從磁盤中讀取的文件內容,加快處理速度)名分別為 (bufi; buf2),其大小均為N(N >> W),兩個滑動指針(用于判斷是否已處理完整個文件的 數(shù)據(jù))分別為(Sl、S2)。對一個文件F做數(shù)據(jù)切塊時,輸入待處理文件集(F1, F2, ... , Fm),及各文件大小 (f1 f2,. . .,fm),滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存Oxif1,buf2)大小均為N,開 啟兩個線程1\、T2,分別從文件的首尾并發(fā)向文件的中間讀取數(shù)據(jù)到各自的緩存中,并利用 滑動窗口以每次一個字節(jié)的速度,在數(shù)據(jù)緩存中往相應方向滑動,并計算滑動窗口中數(shù)據(jù) 的指紋值。當該指紋值對模數(shù)求模為0時,該窗口便確定了是一個數(shù)據(jù)塊的邊界。而兩個 相鄰的數(shù)據(jù)塊邊界即確定了 一個數(shù)據(jù)塊。其具體方法步驟為(1)輸入待處理的文件集(F1, F2, ... , Fm),各文件大小分別為(fl,f2, . . . , fj ;(2)輸入滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存Oxifpbuf2)大小均為N ;(3) Vi E [1,皿],若文件&的大小& <滑動窗口大小W,則直接將其作為一個數(shù)據(jù) 塊,用以查重,并將文件Fi從待處理的文件集中刪除,執(zhí)行步驟11 ;否則,就設置滑動指針S1為0、S2為fi;執(zhí)行步驟4 ;(4)若文件Fi的大小Iii <緩存的大小N,則線程T1, T2分別將&字節(jié)數(shù)據(jù)讀到緩 存Ixifpbuf2中,執(zhí)行步驟6 ;
否則,執(zhí)行步驟5;(5)線程T1將由文件頭部開始的N字節(jié)數(shù)據(jù)讀到緩存Uif1,線程T2將以文件尾部 為結尾的N字節(jié)數(shù)據(jù)讀到緩存buf2 ;(6)在Uif1的頭部設置滑動窗口 W1,在buf2的末尾設置滑動窗口 W2 ;(7)分別計算滑動窗口 Wl、W2所包含數(shù)據(jù)的指紋值r1、r2,若指紋值rl對模數(shù)E求 模為0,則滑動窗口 W1確定了一個數(shù)據(jù)塊的邊界,則將前一邊界末尾后接的第一個字節(jié)到此 邊界末尾的數(shù)據(jù)作為一個數(shù)據(jù)塊;若是指紋值r2對模數(shù)E求模為0,則將此邊界術尾后接的 第一個字節(jié)到前一邊界尾部的數(shù)據(jù)作為一個數(shù)據(jù)塊;(8)若滑動指針S1等于S2,則將文件Fi中部還沒有切塊數(shù)據(jù)作為一個數(shù)據(jù)塊,并 將文件Fi從待處理的文件集中刪除,執(zhí)行步驟11 ;否則執(zhí)行步驟9 ;(9)若此時滑動窗口 W1到達緩存Uif1的尾部,則將尚未切分成塊的數(shù)據(jù)移到緩存 Uif1的頭部,然后線程T1從磁盤讀取數(shù)據(jù)至其后,直到將緩存Uif1填滿;若滑動窗口 W2到 達緩存buf2的頭部,則將尚未切分成塊的數(shù)據(jù)移到緩存buf2的尾部,線程T2從磁盤讀取數(shù) 據(jù)至其前面,直到將緩存buf2填滿,執(zhí)行步驟6 ;(10)滑動窗口 W1向緩存Uif1的尾部滑動1字節(jié),滑動指針S1自增1 ;滑動窗口 W2 向緩存buf2的頭部滑動1字節(jié),滑動指針S2自減1 ;執(zhí)行步驟7 ;(11)如文件集為空,則處理過程結束;否則,執(zhí)行步驟3。本發(fā)明的關鍵在于如何根據(jù)文件內容,從文件的兩端同時進行數(shù)據(jù)切塊。為此,使 用了兩個線程,分別從文件的兩端并發(fā)做分塊操作,從而大大提高了數(shù)據(jù)分塊的速度、改進 了重復數(shù)據(jù)刪除的效能。其主要創(chuàng)新點如下1、根據(jù)文件內容,通過兩個線程分別從文件的頭部和尾部并發(fā)進行數(shù)據(jù)切塊,從 而大大提高了數(shù)據(jù)分塊的速度、改進了重復數(shù)據(jù)刪除的效能。2、將文件塊方法與可變分塊方法相結合,對于較小的文件,采用文件塊方法,將整 個文件作為數(shù)據(jù)塊;而對于較大的文件,則用兩個線程分別從文件的頭部和尾部并發(fā)進行 數(shù)據(jù)切塊,從而提高數(shù)據(jù)分塊的速度。
圖1、可變分塊方法示意2、雙向并發(fā)執(zhí)行的文件級可變長數(shù)據(jù)分塊方法示意圖 具體實施例方式下面結合附圖舉例對本發(fā)明做更詳細地描述本發(fā)明所述算法的特征在于設待處理的文件集包含了 m個文件(F1, F2, ... , Fffl);方法中使用的兩個線程為 (TpT2);兩個滑動窗口分別為(Wl、W2),其大小為W;對兩個滑動窗口中數(shù)據(jù)計算得到指紋 值分別記錄為參數(shù)(I^r2);模數(shù)(判斷滑動窗口是否確定了數(shù)據(jù)塊邊界時所用到的取模 整數(shù))為E ;兩個磁盤數(shù)據(jù)緩存(緩存從磁盤中讀取的文件內容,加快處理速度)名分別為 (bufi; buf2),其大小均為N(N >> W),兩個滑動指針(用于判斷是否已處理完整個文件的 數(shù)據(jù))分別為(Sl、S2)。
6
對一個文件F做數(shù)據(jù)切塊時,輸入待處理文件集(F1, F2, ... , Fm),及各文件大小 (f1 f2,. . .,fm),滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存Oxif1,buf2)大小均為N,開 啟兩個線程1\、T2,分別從文件的首尾并發(fā)向文件的中間讀取數(shù)據(jù)到各自的緩存中,并利用 滑動窗口以每次一個字節(jié)的速度,在數(shù)據(jù)緩存中往相應方向滑動,并計算滑動窗口中數(shù)據(jù) 的指紋值。當該指紋值對模數(shù)求模為0時,該窗口便確定了是一個數(shù)據(jù)塊的邊界。而兩個 相鄰的數(shù)據(jù)塊邊界即確定了 一個數(shù)據(jù)塊。其具體方法步驟為(1)輸入待處理的文件集(F1, F2, ... , Fm),各文件大小分別為(f1; f2,. . .,fffl);(2)輸入滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存Oxifpbuf2)大小均為N ;(3) Vt e [l,m],若文件Fi的大小& <滑動窗口大小W,則直接將其作為一個數(shù)據(jù) 塊,用以查否則,就設置滑動指針S1為0、S2為執(zhí)行步驟4 ;(4)若文件Fi的大小Iii <緩存的大小N,則線程T1, T2分別將&字節(jié)數(shù)據(jù)讀到緩 存Ixifpbuf2中,執(zhí)行步驟6 ;否則,執(zhí)行步驟5;(5)線程T1將由文件頭部開始的N字節(jié)數(shù)據(jù)讀到緩存Uif1,線程T2將以文件尾部 為結尾的N字節(jié)數(shù)據(jù)讀到緩存buf2 ;(6)在Uif1的頭部設置滑動窗口 W1,在buf2的末尾設置滑動窗口 W2 ;(7)分別計算滑動窗口 Wl、W2所包含數(shù)據(jù)的指紋值r1、r2,若指紋值rl對模數(shù)E求 模為0,則滑動窗口 W1確定了一個數(shù)據(jù)塊的邊界,則將前一邊界末尾后接的第一個字節(jié)到此 邊界末尾的數(shù)據(jù)作為一個數(shù)據(jù)塊;若是指紋值r2對模數(shù)E求模為0,則將此邊界末尾后接的 第一個字節(jié)到前一邊界尾部的數(shù)據(jù)作為一個數(shù)據(jù)塊;(8)若滑動指針S1等于s2,則將文件Fi中部還沒有切塊數(shù)據(jù)作為一個數(shù)據(jù)塊,并 將文件Fi從待處理的文件集中刪除,執(zhí)行步驟11 ;否則執(zhí)行步驟9 ;(9)若此時滑動窗口 W1到達緩存Uif1的尾部,則將尚未切分成塊的數(shù)據(jù)移到緩存 Uif1的頭部,然后線程T1從磁盤讀取數(shù)據(jù)至其后,直到將緩存Uif1填滿;若滑動窗口 W2到 達緩存buf2的頭部,則將尚未切分成塊的數(shù)據(jù)移到緩存buf2的尾部,線程T2從磁盤讀取數(shù) 據(jù)至其前面,直到將緩存buf2填滿,執(zhí)行步驟6 ;(10)滑動窗口 W1向緩存Uif1的尾部滑動1字節(jié),滑動指針S1自增1 ;滑動窗口 W2 向緩存buf2的頭部滑動1字節(jié),滑動指針S2自減1 ;執(zhí)行步驟7 ;(11)如文件集為空,則處理過程結束;否則,執(zhí)行步驟3。其具體實施模式是這樣的整個算法具體實施模式可分為一小一大兩個循環(huán),小的循環(huán)是根據(jù)文件內容,通 過兩個線程分別從文件的頭部和尾部并發(fā)進行數(shù)據(jù)切塊,大的循環(huán)是對文件集中的所有文 件使用小循環(huán)進行處理。小循環(huán)用兩個線程,分別從文件的首尾并發(fā)向文件的中間讀取數(shù)據(jù)到各自的緩存中,并 利用滑動窗口以每次一個字節(jié)的速度,在數(shù)據(jù)緩存中往相應方向滑動,并計算滑動窗口中 數(shù)據(jù)的指紋值。當該指紋值與期望塊大小構成某種條件時,該窗口便確定了是一個數(shù)據(jù)塊 的邊界。而兩個相鄰的數(shù)據(jù)塊邊界即確定了一個數(shù)據(jù)塊。若兩個滑動窗口在文件的中部相
7遇了,就將此時未切分成塊的數(shù)據(jù)作為一個數(shù)據(jù)塊,并跳出該循環(huán)。大循環(huán)當對一個文件的分塊結束后,將其從帶切塊文件集中刪除,則文件集是否為空,若 仍有未分塊的文件,則對該文件使用上述小循環(huán)做分塊處理;否則,處理過程結束。
權利要求
一種信息系統(tǒng)中雙向并發(fā)執(zhí)行的文件級可變長數(shù)據(jù)分塊方法,其特征在于設待處理的文件集包含了m個文件(F1,F(xiàn)2,...,F(xiàn)m);方法中使用的兩個線程為(T1、T2);兩個滑動窗口分別為(w1、w2),其大小為W;對兩個滑動窗口中數(shù)據(jù)計算得到指紋值分別記錄為參數(shù)(r1、r2);模數(shù)(判斷滑動窗口是否確定了數(shù)據(jù)塊邊界時所用到的取模整數(shù))為E;兩個磁盤數(shù)據(jù)緩存(緩存從磁盤中讀取的文件內容,加快處理速度)名分別為(buf1,buf2),其大小均為N(N>>W(wǎng)),兩個滑動指針(用于判斷是否已處理完整個文件的數(shù)據(jù))分別為(s1、s2);對一個文件F做數(shù)據(jù)切塊時,輸入待處理文件集(F1,F(xiàn)2,...,F(xiàn)m),及各文件大小(f1,f2,...,fm),滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存(buf1,buf2)大小均為N,開啟兩個線程T1、T2,分別從文件的首尾并發(fā)向文件的中間讀取數(shù)據(jù)到各自的緩存中,并利用滑動窗口以每次一字節(jié)的速度,在數(shù)據(jù)緩存中往相應方向滑動,并計算滑動窗口中數(shù)據(jù)的指紋值。當該指紋值對模數(shù)求模為0時,該窗口便確定了是一個數(shù)據(jù)塊的邊界。而兩個相鄰的數(shù)據(jù)塊邊界即確定了一個數(shù)據(jù)塊。
2.權利要求1所述的信息系統(tǒng)中雙向并發(fā)執(zhí)行的文件級可變長數(shù)據(jù)分塊方法,其具體 方法步驟為(1)輸入待處理的文件集(F1,F2, ...,F(xiàn)m),各文件大小分別為(f1; f2,. . .,fffl);(2)輸入滑動窗口大小W,模數(shù)E,兩個相對獨立的緩存Oxifpbuf2)大小均為N;(3)Vi e [l,m],若文件Fi的大小& <滑動窗口大小W,則直接將其作為一個數(shù)據(jù)塊,用 以查重,并將文件Fi從待處理的文件集中刪除,執(zhí)行步驟11 ;否則,就設置滑動指針S1為0、S2為執(zhí)行步驟4 ;(4)若文件Fi的大小Ili<緩存的大小N,則線程T1, T2分別將&字節(jié)數(shù)據(jù)讀到緩存 buf”buf2 中,執(zhí)行步驟6 ;否則,執(zhí)行步驟5;(5)線程T1將由文件頭部開始的N字節(jié)數(shù)據(jù)讀到緩存Uif1,線程T2將以文件尾部為結 尾的N字節(jié)數(shù)據(jù)讀到緩存buf2 ;(6)在Uif1的頭部設置滑動窗口W1,在buf2的末尾設置滑動窗口 W2 ;(7)分別計算滑動窗口Wl、W2所包含數(shù)據(jù)的指紋值巧、r2,若指紋值Γι對模數(shù)E求模為 0,則滑動窗口 W1確定了一個數(shù)據(jù)塊的邊界,則將前一邊界末尾后接的第一個字節(jié)到此邊界 末尾的數(shù)據(jù)作為一個數(shù)據(jù)塊;若是指紋值r2對模數(shù)E求模為0,則將此邊界末尾后接的第一 個字節(jié)到前一邊界尾部的數(shù)據(jù)作為一個數(shù)據(jù)塊;(8)若滑動指針S1等于S2,則將文件Fi中部還沒有切塊數(shù)據(jù)作為一個數(shù)據(jù)塊,并將文 件Fi從待處理的文件集中刪除,執(zhí)行步驟11 ;否則執(zhí)行步驟9 ;(9)若此時滑動窗口W1到達緩存Uif1的尾部,則將尚未切分成塊的數(shù)據(jù)移到緩存Uif1 的頭部,然后線程T1從磁盤讀取數(shù)據(jù)至其后,直到將緩存Inif1填滿;若滑動窗口 W2到達緩 存buf2的頭部,則將尚未切分成塊的數(shù)據(jù)移到緩存buf2的尾部,線程T2從磁盤讀取數(shù)據(jù)至 其前面,直到將緩存buf2填滿,執(zhí)行步驟6 ;(10)滑動窗口W1向緩存Uif1的尾部滑動1字節(jié),滑動指針S1自增1 ;滑動窗口 W2向 緩存buf2的頭部滑動1字節(jié),滑動指針S2自減1 ;執(zhí)行步驟7 ;(11)如文件集為空,則處理過程結束;否則,執(zhí)行步驟3。
全文摘要
本發(fā)明提供的是一種信息系統(tǒng)中雙向并發(fā)執(zhí)行的文件級可變長數(shù)據(jù)分塊方法。本發(fā)明的關鍵在于對文件進行切塊的過程中,該方法能夠借助多核處理器的并發(fā)處理能力,用兩個線程分別從文件的首尾出發(fā),利用數(shù)據(jù)塊邊界只通過對數(shù)據(jù)內容進行計算來確定,分別從前往后和從后往前并發(fā)地掃描文件,并確定數(shù)據(jù)塊的邊界,進而切分數(shù)據(jù)塊,直到由首尾出發(fā)的兩個線程在文件中部相遇為止,從而顯著提高了數(shù)據(jù)分塊的速度。
文檔編號G06F17/30GK101968796SQ20101027623
公開日2011年2月9日 申請日期2010年9月9日 優(yōu)先權日2010年9月9日
發(fā)明者伍淳華, 劉建毅, 葉鵬迪, 姚文斌, 王樅, 肖達 申請人:北京郵電大學