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