一種可擴展的重復(fù)數(shù)據(jù)檢測方法
【專利摘要】一種可擴展的重復(fù)數(shù)據(jù)檢測方法,屬于計算機存儲【技術(shù)領(lǐng)域】,解決現(xiàn)有重復(fù)數(shù)據(jù)檢測方法中存儲容量無法高效擴展的問題,以適應(yīng)存儲需求擴大,重刪系統(tǒng)面臨升級換代的現(xiàn)狀。本發(fā)明包括分塊處理、指紋提取、布隆過濾器檢索、指紋子集表檢索、未滿布隆過濾器判斷、新指紋標記、布隆過濾器數(shù)量判斷以及布隆過濾器陣列擴展步驟。本發(fā)明采用布隆過濾器陣列來檢索指紋數(shù)據(jù),可快速定位檢索范圍,提高檢索效率,實現(xiàn)重復(fù)數(shù)據(jù)的檢測,具有高擴展性、高查詢性能、支持元素定位、可控制誤判率,有效減少內(nèi)存開銷。布隆過濾器陣列由同構(gòu)的一系列布隆過濾器構(gòu)成,只需提供誤判率ε’及預(yù)估檢索的指紋總數(shù)量nmax,就能計算出需要的布隆過濾器的數(shù)量及哈希函數(shù)的個數(shù)。
【專利說明】 一種可擴展的重復(fù)數(shù)據(jù)檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機存儲【技術(shù)領(lǐng)域】,具體涉及一種可擴展的重復(fù)數(shù)據(jù)檢測方法。
【背景技術(shù)】
[0002]1998年,Jim Gray在獲頒計算機圖靈獎時的演講中總結(jié)“信息產(chǎn)業(yè)在過去100年中呈指數(shù)增長態(tài)勢”,并根據(jù)“摩爾定律”提出新經(jīng)驗定律“未來每18個月全球新增存儲容量是有史以來全部存儲容量的總和”。從2007年起,IDC公司與EMC公司連續(xù)五年合作發(fā)布信息存儲市場調(diào)研報告,測算數(shù)據(jù)顯示全球創(chuàng)造和復(fù)制的數(shù)字信息總量從2006年的161EB(exabytes)增加到2011年的1.8ZB (zettabytes),其中2007年全球數(shù)字信息總量首次超過可用存儲容量,且兩者之間的差異仍在逐年擴大。同時,IDC公司調(diào)研報告顯示現(xiàn)存約75%的數(shù)據(jù)為副本信息,即僅有25%的數(shù)據(jù)具有唯一性。在此背景下,數(shù)據(jù)去重作為在較大空間范圍內(nèi)偵測和消除冗余信息的一種新型技術(shù)成為近幾年學(xué)術(shù)界和工業(yè)界的研究熱點,并正被愈加廣泛地應(yīng)用到各種信息存儲系統(tǒng)。數(shù)據(jù)去重(Data Deduplication)是在數(shù)據(jù)集或數(shù)據(jù)流中發(fā)現(xiàn)和消除重復(fù)內(nèi)容以提高數(shù)據(jù)的存儲和/或傳輸效率的過程,又稱重復(fù)數(shù)據(jù)刪除(Duplicate Data Elimination),簡稱去重或重刪。
[0003]重復(fù)數(shù)據(jù)元素的檢測是實現(xiàn)數(shù)據(jù)去重的重要技術(shù)手段。隨著數(shù)據(jù)規(guī)模的擴大,其索引信息量也會持續(xù)增長甚至超過可用內(nèi)存容量。若索引信息被迫轉(zhuǎn)儲到硬盤,則查找和識別重復(fù)數(shù)據(jù)元素會遇到硬盤訪問性能瓶頸,因此有必要研究支持重復(fù)元素快速檢測的高效索引機制。
[0004]目前主要通過利用數(shù)據(jù)指紋、數(shù)據(jù)局部性、數(shù)據(jù)相似性和緩存技術(shù)等加速重復(fù)數(shù)據(jù)的檢索。下面列舉一些有代表性的可擴展重復(fù)數(shù)據(jù)檢測方法。
[0005]2009年,NEC實驗室的CezaryDubnicki等在HYDRAstor存儲系統(tǒng)中提出按指紋前綴將數(shù)據(jù)塊分布到負責不同指紋空間的虛擬超級節(jié)點(Supernode)中,并在各個超級節(jié)點中分別消除重復(fù)內(nèi)容。通過細分指紋空間和遷移數(shù)據(jù),HYDRAstor可以隨時添加新的存儲節(jié)點實現(xiàn)擴容,但擴容時面臨大量的數(shù)據(jù)遷移。見Dubnicki C,GryzLjHeldt Lj et al.HYDRAstor: a Scalable Secondary Storage.1n: Proceedingsof the7th USENIX Conference on File and Storage Technologies(FAST),SanFrancisco,CA,USA, 2009,197-210。
[0006]2009 年,HP 實驗室的 Deepavali Bhagwat 等提出 Extreme Binning 分布式去重方案。Extreme Binning分布式去重方案從每個文件的分塊指紋序列中選擇最小值作為文件的特征指紋(Representative Fingerprint),共享相同的特征指紋的文件被聚合到一個去重域中,同時以文件的特征指紋作為該去重域的標識符。當需要擴展到多個節(jié)點時,Extreme Binning將去重域的特征指紋空間劃分為多個區(qū),并分別映射到各個節(jié)點。該方法易于擴展,但無法消除不同去重域之間的重復(fù)數(shù)據(jù),因而是一種近似的去重解決方案,見 Bhagwat D, Eshghi K, Long DDE, et al.Extreme Binning: Scalable, ParallelDeduplication for Chunk-based File Backup.1n:Proceedings of thel7th IEEE/ACMInternational Symposium on Modelling, Analysis and Simulation of Computer andTelecommunication Systems (MASCOTS), London, UK, 2009, 237-245。
[0007]2011年,Princeton大學(xué)和EMC公司的Wei Dong等系統(tǒng)研究了高性能去重集群的數(shù)據(jù)路由方法,提出將平均長度為8KB的分塊序列按內(nèi)容特征劃分為IMB量級的超級塊(Super-chunk)序列,并以超級塊作為傳輸單元以提高整體路由效率。將超級塊路由到能夠獲得最大重刪率的節(jié)點,見 DongW, Douglis F,Li K, et al.Tradeoffs in Scalable DataRouting for Dedupl ication Clusters.1n:Proceedings of the9th USENIX Conferenceon File and Storage Technologies (FAST), San Jose, CA, USA, 2011,15-29。
[0008]Benjamin Zhu等 于2008年提出利用三種手段加速重復(fù)數(shù)據(jù)段的偵測和刪除過程。I)采用布隆過濾器作為記錄段指紋的摘要向量(Su_ary Vector) ;2)采用感知數(shù)據(jù)流的段布局(Stream-1nformed Segment Layout)方法,確保每個數(shù)據(jù)流的段序列最終被寫入其專屬的容器中,避免與其他數(shù)據(jù)流的段產(chǎn)生交疊;3)采用保持局部性的緩存機制(Locality Preserved Caching)挖掘數(shù)據(jù)流中的局部性。見Zhu B, LiK,Patterson H.Avoiding the Disk Bottleneck in the Data Domain DeduplicationFile System.1n:Proceedings of the6th USENIX Conference on File and StorageTechnologies (FAST),San Jose, CA, USA, 2008, 269-282。該方法使用單一布隆過濾器加速檢索,但無法實現(xiàn)高效擴容。
[0009]布隆過濾器(Bloom Filter)是一種高空間效率和高查詢性能的數(shù)據(jù)結(jié)構(gòu),由于其獨特的優(yōu)勢,使其得到廣泛的應(yīng)用,它能夠高效描述靜態(tài)數(shù)據(jù)集合,但無法反映動態(tài)數(shù)據(jù)集合特別是可擴展動態(tài)數(shù)據(jù)集合成員結(jié)構(gòu)不斷更新的特征。因此,人們對其進行了改進,先后提出了:
[0010](I)動態(tài)布隆過濾器(Dynamic Bloom Filter, DBF),見 Guo D, Wu J, ChenH, etal.The Dynamic Bloom Filters.1EEE Transactions on Knowledge and DataEngineering, 2010, 22(I):120-133 ;
[0011](2)可擴展型布隆過濾器(Scalable Bloom Filter, SBF)見 Xie K, Min Y, ZhangD, et al.A Scalable Bloom Filter for Membership Queries.1n:Proceedings ofthe50th IEEE Global Telecommunications Conference (GL0BEC0M), Washington, DC, USA,2007,543-547 ;
[0012](3)增量型布隆過濾器(Incremental Bloom Filter, IBF)見 Hao F, KodialamM,Lakshman TV.1ncremental Bloom Filters.1n:Proceedings of the27th IEEECommunications Society Conference on Computer Communications(INF0C0M), Phoenix,AZ, USA, 2008,1741-1749。
[0013]這些改進的布隆過濾器多面向網(wǎng)絡(luò)中數(shù)據(jù)的定位及檢索應(yīng)用,側(cè)重于增強可擴展性、控制誤判率或減少內(nèi)存開銷,但缺乏對索引存儲系統(tǒng)中大容量可變數(shù)據(jù)集時高查詢性能、支持元素定位需求的考慮。
[0014]為了清晰闡述本發(fā)明,對本申請文件中出現(xiàn)的術(shù)語加以解釋和說明:
[0015]布隆過濾器:如圖1所示,由一個長度為m個bit的位向量和k個獨立的哈希函數(shù)Iii(X) (I ^ i ^ k,k < m)構(gòu)成,是一種空間效率很高的隨機數(shù)據(jù)結(jié)構(gòu),它利用位向量表示一個集合,并能判斷一個元素是否屬于這個集合。為了表達集合S=U1, X2, X3,…,xn},首先位向量中所有的位被初始化為O ;然后對集合S中的元素\ (I ^ j ^ η)都分別使用這k個相互獨立的哈希函數(shù)Iii (X),得到k個哈希值Iii (Xj) (I ^ i ^ k, Xj e S),將位向量的第一位作為起始點,將這k個哈希值作為偏移量,可以將\映射到位向量{1,2,...,πι}中的k個位,這些位被置1,Xj被標記;當S中所有的元素都被標記后,即集合S被布隆過濾器所表達,如果一個位多次被置為1,那么只有第一次會起作用。
[0016]要確定某個數(shù)據(jù)元素y是否屬于集合S,首先對y分別使用這k個相互獨立的哈希函數(shù)h (x),得到k個哈希值Iii (y),將位向量的第一位作為起始點,將這k個哈希值作為偏移量,檢查布隆過濾器的位向量中對應(yīng)的位是否全為I,是則y可能屬于S ;否則確定y不是S中的元素。
[0017]由于哈希函數(shù)Iii (X) (I ^ i ^ k)對于任意的兩個不同元素存在哈希沖突的可能性,例如I映射在位向量中對應(yīng)的位可能已經(jīng)被S中的非y元素所映射,布隆過濾器在做出肯定性判決時存在出錯的可能性。布隆過濾器將非S集合中元素誤判為S中的元素的可能性稱為假陽性概率(False Positive Probability),也簡稱誤判率(Error Rate)。假陽性概率可以通過數(shù)學(xué)方法來控制。
[0018]給定集合S的基數(shù)η、布隆過濾器位向量的長度m及其哈希函數(shù)的數(shù)量k,則布隆過濾器的位向量被插入η個 元素后某一位仍為O的概率為(l-l/m)kxn。另一方面,當某個新元素y對應(yīng)的所有位都已被置I時,布隆過濾器將做出假陽性判斷,進而可推斷假陽性概率fBF為:
[0019]fBF=(l-(l-l/m)kXn)k ^ (l-e-kXn/m)k,
[0020]可推導(dǎo)當k=「ln2x(m/n)1時,布隆過濾器具有最小的假陽性概率,稱為理想誤判率,記為Fbf,此時,布隆過濾器的位向量中約有50%的位置為“I”;符號j ln2x(m / n)l表不大于ln2X (m/n)結(jié)果的最小整數(shù);
[0021]更進一步,若η為已知,期望設(shè)計一個布隆過濾器,其理想誤判率不大于給定的誤判率上限ε,則可推導(dǎo)出m須滿足:
[0022]m ^ log2eX 1g2 (I/ ε ) Xn,
[0023]若m=log2eXlog2(l/ ε ) Xn 且k=「ln2x(m/n) "] =「log2(l/e)l,當且僅當所有 n 個
元素都插入布隆過濾器時,其假陽性概率才增加到ε,因此n又稱為布隆過濾器設(shè)計容量。
[0024]由以上分析可知,根據(jù)設(shè)計容量η和誤判率上限ε,可計算出布隆過濾器的位向量長度m和哈希函數(shù)數(shù)量k ;設(shè)計容量η為布隆過濾器預(yù)計標記元素的數(shù)量,當一個布隆過濾器標記的元素少于η時,則該布隆過濾器為未滿的布隆過濾器,未滿的布隆過濾器既可以繼續(xù)標記新的元素,也可以供查詢是否某個元素已在其中標記,當一個布隆過濾器中已標記的元素數(shù)量為η時,則該布隆過濾器已滿,不能繼續(xù)標記新元素,但可以提供查詢,η < m。
[0025]指紋子集表:用于存儲指紋數(shù)據(jù)的列表,該列表配屬于布隆過濾器陣列,其中每個布隆過濾器對應(yīng)于一個指紋子集表,其容量為η個指紋空間,每個指紋空間占據(jù)若干字節(jié),依據(jù)指紋生成算法確定;η為單個布隆過濾器設(shè)計容量。
[0026]布隆過濾器陣列(BA):如圖所示,是由r個順序排列的布隆過濾器BF1~B匕及它們對應(yīng)的r個指紋子集表構(gòu)成(r ^ 1,為正整數(shù)),r個布隆過濾器共享k個獨立的哈希函數(shù),其中每g (I < g<r,為正整數(shù))個布隆過濾器為一組,最后不夠一組的歸為一組,共構(gòu)成「r/gl個布隆過濾器組,g的大小為機器字長大小,g=25~8。布隆過濾器組中的g個布隆過濾器具有相同的參數(shù)組(n,m,k),其中,η為設(shè)計容量、m為位向量長度、k為哈希函數(shù)個數(shù),參數(shù)值需根據(jù)具體系統(tǒng)要求參照本文后面具體實施細節(jié)確定個布隆過濾器至多具有兩種不同的參數(shù)組。
[0027]位組:一個布隆過濾器組的g個位向量排列成矩陣,各位向量中相同的位,即矩陣中的一列,稱為位組,如果一個布隆過濾器組中布隆過濾器的數(shù)量小于g個,則需要對位組中缺失的位補零到g的長度;
[0028]重構(gòu):對已有的布隆過濾器組按照新的設(shè)計參數(shù)重新構(gòu)建,構(gòu)建完成后替換掉先前的布隆過濾組。
【發(fā)明內(nèi)容】
[0029]本發(fā)明提供一種可擴展的重復(fù)數(shù)據(jù)檢測方法,解決現(xiàn)有重復(fù)數(shù)據(jù)檢測方法中存儲容量無法高效擴展的問題,以適應(yīng)存儲需求不斷擴大,重刪系統(tǒng)面臨不斷升級換代的現(xiàn)狀。
[0030]本發(fā)明所提供的一種可擴展的重復(fù)數(shù)據(jù)檢測方法,包括分塊處理步驟、指紋提取步驟、布隆過濾器檢索步驟、指紋子集表檢索步驟、未滿布隆過濾器判斷步驟、新指紋標記步驟、布隆過濾器數(shù)量判斷步驟和布隆過濾器陣列擴展步驟,其特征在于:
[0031](I)分塊處理步驟:將用戶需要備份或存儲的文件分成數(shù)據(jù)塊,對文件的所有數(shù)據(jù)塊統(tǒng)一編號,數(shù)據(jù)塊最大編號PO為正整數(shù);
[0032](2)指紋提取步驟:提取每個數(shù)據(jù)塊的指紋,將指紋按數(shù)據(jù)塊編號形成指紋列表;
[0033](3)布隆過濾器檢索步驟,包括下述子步驟:
[0034](3.1)設(shè)置布隆過濾器最大數(shù)量!≥I ;設(shè)置布隆過濾器陣列可容納元素數(shù)量11_,Hfflax大于外存儲系統(tǒng)最大存儲容量,根據(jù)系統(tǒng)的存儲需求確定;設(shè)置布隆過濾器陣列總體誤判上限ε' , 0.00000Κ ε / <0.01, ε '越小,系統(tǒng)開銷越大,反之則誤判率增大;設(shè)置布隆過濾器擴展系數(shù)t > 2 ;置布隆過濾器編號變量T=0,置數(shù)據(jù)塊編號變量P=I ;置新位向量長度m’ = O,置臨時位向量長度m” = O ;
[0035](3.2)從指紋列表中取出編號為P的指紋X ;
[0036](3.3)判斷外存儲器中是否已存在布隆過濾器,是則將外存儲器中的布隆過濾器及其對應(yīng)的指紋子集表讀入內(nèi)存,轉(zhuǎn)子步驟(3.5),否則進行子步驟(3.4);
[0037](3.4)置單個設(shè)計容量n=nmax/r,計算布隆過濾器的位向量長度m和哈希函數(shù)數(shù)量k:
[0038]m=log2e.1g2 (I/ ε ).n, k=「ln2x(m/n)];
[0039]式中,單個誤判率上限ε =1-(1- ε ' )1/r ;符號「!η 2x(m /n)_[表示大于ln2X (m/n)結(jié)果的最小整數(shù);
[0040]在內(nèi)存中,通過參數(shù)m、k創(chuàng)建一個布隆過濾器及其對應(yīng)的指紋子集表,并置該布隆過濾器的未滿標記為“未滿”;所述布隆過濾器,包括位向量和k個獨立的哈希函數(shù),所述位向量為長度m個bit的一維向量,所述指紋子集表的最大長度為η個指紋空間,每個指紋空間占據(jù)16或20字節(jié),k < m, η < m ;對該布隆過濾器賦予編號T+1,進行子步驟(3.5);[0041](3.5)在內(nèi)存中將每g個布隆過濾器歸為一個布隆過濾器組,如果布隆過濾器的數(shù)量不能被g整除,則將最后不滿g個的布隆過濾器歸為一個布隆過濾器組,對各布隆過濾器組順序賦予從I開始的組號,并將各布隆過濾器組的擴展標記均置為“無”,轉(zhuǎn)子步驟
(3.6);g=25~8;
[0042](3.6)創(chuàng)建標志位向量¥匕],¥匕]為長度為g個bit的一維向量,V[g]中的每個bit順序?qū)?yīng)一個布隆過濾器組中各布隆過濾器的編號;置布隆過濾器組號變量M = I ;
[0043](3.7MfV[g]中各個 bit 初始化為 ‘I’ ;
[0044](3.8)判斷第M組布隆過濾器組的擴展標記是否為“無”,是則置m” =m,進行子步驟(3.9),否則置m”=m’,再進行子步驟(3.9);
[0045](3.9)選取第M個布隆過濾器組,根據(jù)m”計算指紋X的k個哈希值Ii1 (X),h2 (X),…,hk⑴,其中,MX)的值域為{1,2,…,m”},l≤i≤k;將這k個哈希值作為偏移量提取第M個布隆過濾器組中對應(yīng)的k個位組,若第M個布隆過濾器組中布隆過濾器的個數(shù)少于g,則在提取該k個位組后,將k個位組中缺失的位均補為0,所述k個位組的各位組依次與標志位向量V[g]按位對應(yīng)進行“與”運算,最終結(jié)果寫回標志位向量V[g];
[0046](3.10)判斷V[g]的各位是否全為“零”,是則進行子步驟(3.11),否則進行子步驟(3.12);
[0047](3.11)判斷是否M = fr/gl,是則表明指紋X為新指紋,轉(zhuǎn)步驟(5),否則,置M =M + 1,轉(zhuǎn)子步驟(3.7);
[0048](3.12)判斷指紋X為可能重復(fù)指紋,查找V[g]中首個值為‘I’的bit在V[g]中的位置,轉(zhuǎn)步驟(4);
[0049](4)指紋子集表檢索步驟:包括下述子步驟:
[0050](4.1)以所述子步驟(3.12)查找的位置作為對應(yīng)的布隆過濾器編號,進一步查找該編號的布隆過濾器對應(yīng)的指紋子集表,判斷指紋子集表中是否存在指紋X,是則進行子步驟(4.2),否則轉(zhuǎn)子步驟(4.4);
[0051](4.2)指紋X為重復(fù)指紋,指紋X對應(yīng)的數(shù)據(jù)塊為重復(fù)數(shù)據(jù),將指紋X移動到指紋子集表的頭部,置P=P + 1,判斷是否Ρ>Ρ0,是則進行子步驟(4.3),否則轉(zhuǎn)子步驟(3.2);
[0052](4.3)將內(nèi)存中的所有布隆過濾器的數(shù)據(jù)及對應(yīng)指紋子集表的數(shù)據(jù)寫入外存儲器,整個處理過程結(jié)束;
[0053](4.4)表明該編號的布隆過濾器發(fā)生誤判,對誤判進行計數(shù),判斷是否M = [r/g]
*1 9
是則表明指紋X為新指紋,轉(zhuǎn)步驟(5),否則置M = M+ 1,轉(zhuǎn)子步驟(3.7);
[0054](5)未滿布隆過濾器判斷步驟,按照布隆過濾器的編號順序查找是否存在未滿的布隆過濾器BFt, 1≤ t≤ r,是則轉(zhuǎn)步驟(6),否則轉(zhuǎn)步驟(7);
[0055](6)新指紋標記步驟,包括下述子步驟:
[0056](6.1)判斷該布隆過濾器所屬布隆過濾器組的擴展標記是否為“無”,是則置m”=m,進行子步驟(6.。^否則置“’^^再進行子步驟”.2);
[0057](6.2)根據(jù)m”計算所述指紋X的k個哈希值、⑴,hJX), "^hk(X);
[0058](6.3)將所述布隆過濾器BFt位向量的第一位作為起始點,將所述k個哈希值Ill⑴,h2⑴,…,hk⑴作為偏移量,得到位向量中對應(yīng)的k個位,將這k個位置為‘ I’,完成對指紋X的標記;
[0059](6.4)查找布隆過濾器BFt對應(yīng)的指紋子集表,將指紋X插入到指紋子集表的頭部;
[0060](6.5)判斷布隆過濾器是否裝滿,是則置該布隆過濾器未滿標記為“已滿”;
[0061](6.6)置P=P+ 1,判斷是否Ρ>Ρ0,是則進行子步驟(4.3),否則轉(zhuǎn)子步驟(3.2);
[0062](7)布隆過濾器數(shù)量判斷步驟,包括下述子步驟:
[0063](7.1)判斷是否布隆過濾器編號T < r,是則進行子步驟(7.2),否則需對布隆過濾器陣列進行擴展,轉(zhuǎn)步驟(8);
[0064](7.2)創(chuàng)建新的布隆過濾器及新的指紋子集表;
[0065]在內(nèi)存中,通過參數(shù)m、k創(chuàng)建一個布隆過濾器及其對應(yīng)的指紋子集表,并置該布隆過濾器的未滿標記 為“未滿”;對該布隆過濾器賦予編號T+1,轉(zhuǎn)步驟(5);
[0066](8)布隆過濾器陣列擴展步驟,包括下述子步驟:
[0067](8.1)置布隆過濾器臨時組號變量M,=1 ;
[0068](8.2)選擇第M’個布隆過濾器組,判斷其擴展標記是否為“無”,是則轉(zhuǎn)子步驟(8.5),否則進行子步驟(8.3);
[0069](8.3)置M’=M’+1,判斷是否M’ ^「r/gl,是則轉(zhuǎn)子步驟(8.2),否則進行子步驟(8.4);
[0070](8.4)將各布隆過濾器組的擴展標記置為“無”,置n=tXn,置m’ =m,轉(zhuǎn)子步驟(8.1);
[0071](8.5)以新設(shè)計容量n’ =tXn,誤判率上限ε不變,哈希函數(shù)數(shù)量k不變,計算布隆過濾器的新位向量長度m’ =log2eXlog2(l/ ε ) Xn’,對組內(nèi)每個布隆過濾器進行重構(gòu),同時,以新設(shè)計容量η’擴大布隆過濾器對應(yīng)的指紋子集表的容量,將該布隆過濾器組中所有的布隆過濾器未滿標記置為“未滿”,將該布隆過濾器組的擴展標記置為“有”;轉(zhuǎn)步驟(5)。
[0072]所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于:
[0073]所述分塊處理步驟中:對用戶需要備份或存儲的文件分成數(shù)據(jù)塊時,采用固定分塊方法,固定分塊所分成的數(shù)據(jù)塊大小相等,每個數(shù)據(jù)塊大小為4Κ~8Κ字節(jié)。
[0074]所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于:
[0075]所述指紋提取步驟中:提取每個數(shù)據(jù)塊的指紋時,采用MD5消息摘要算法或者SHA-1消息摘要算法。
[0076]所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于:
[0077]所述布隆過濾器檢索步驟中,所述子步驟(3.9)及子步驟(6.2)根據(jù)m”計算指紋X的k個哈希值,包括下述過程:
[0078](a)首先利用隨機函數(shù)產(chǎn)生2Xk個32位2進制隨機數(shù),每兩個隨機數(shù)相乘得到k個乘積Si, 1≤i≤k ;k個乘積構(gòu)成集合(S1, S2, S3,...,Sj ;
[0079](b)根據(jù)下述迭代公式計算指紋X的原始哈希值h' (x):
[0080]
【權(quán)利要求】
1.一種可擴展的重復(fù)數(shù)據(jù)檢測方法,包括分塊處理步驟、指紋提取步驟、布隆過濾器檢索步驟、指紋子集表檢索步驟、未滿布隆過濾器判斷步驟、新指紋標記步驟、布隆過濾器數(shù)量判斷步驟和布隆過濾器陣列擴展步驟,其特征在于: (1)分塊處理步驟:將用戶需要備份或存儲的文件分成數(shù)據(jù)塊,對文件的所有數(shù)據(jù)塊統(tǒng)一編號,數(shù)據(jù)塊最大編號PO為正整數(shù); (2)指紋提取步驟:提取每個數(shù)據(jù)塊的指紋,將指紋按數(shù)據(jù)塊編號形成指紋列表; (3)布隆過濾器檢索步驟,包括下述子步驟: (3.1)設(shè)置布隆過濾器最大數(shù)量r≥I ;設(shè)置布隆過濾器陣列可容納元素數(shù)量11_,nfflax大于外存儲系統(tǒng)最大存儲容量,根據(jù)系統(tǒng)的存儲需求確定;設(shè)置布隆過濾器陣列總體誤判上限ε ' , 0.0OOOO1< ε ‘ <0.01, ε '越小,系統(tǒng)開銷越大,反之則誤判率增大;設(shè)置布隆過濾器擴展系數(shù)t ≥2 ;置布隆過濾器編號變量T=0,置數(shù)據(jù)塊編號變量P=I ;置新位向量長度m’ = O,置臨時位向量長度m” = O ; (3.2)從指紋列表中取出編號為P的指紋X ; (3.3)判斷外存儲器中是否已存在布隆過濾器,是則將外存儲器中的布隆過濾器及其對應(yīng)的指紋子集表讀入內(nèi)存,轉(zhuǎn)子步驟(3.5),否則進行子步驟(3.4); (3.4)置單個設(shè)計容量n=nmax/r,計算布隆過濾器的位向量長度m和哈希函數(shù)數(shù)量k:
m=log2e.1g2 (I/ ε ).n,k=「ln2x(m/n)~| ;
式中,單個誤判率上限ε=1-(1-ε' )1〃;符號「1|12\(01/#表示大于1112\(111/11)結(jié)果的最小整數(shù); 在內(nèi)存中,通過參數(shù)m、k創(chuàng)建一個布隆過濾器及其對應(yīng)的指紋子集表,并置該布隆過濾器的未滿標記為“未滿”;所述布隆過濾器,包括位向量和k個獨立的哈希函數(shù),所述位向量為長度m個bit的一維向量,所述指紋子集表的最大長度為η個指紋空間,每個指紋空間占據(jù)16或20字節(jié),k < m, η < m ;對該布隆過濾器賦予編號T+1,進行子步驟(3.5); (3.5)在內(nèi)存中將每g個布隆過濾器歸為一個布隆過濾器組,如果布隆過濾器的數(shù)量不能被g整除,則將最后不滿g個的布隆過濾器歸為一個布隆過濾器組,對各布隆過濾器組順序賦予從I開始的組號,并將各布隆過濾器組的擴展標記均置為“無”,轉(zhuǎn)子步驟(3.6);g=25~8; (3.6)創(chuàng)建標志位向量¥匕],¥匕]為長度為g個bit的一維向量,V[g]中的每個bit順序?qū)?yīng)一個布隆過濾器組中各布隆過濾器的編號;置布隆過濾器組號變量M = I ; (3.7)將V[g]中各個bit初始化為‘I’ ; (3.8)判斷第M組布隆過濾器組的擴展標記是否為“無”,是則置m”=m,進行子步驟?.…,否則置^~^再進行子步驟^川); (3.9)選取第M個布隆過濾器組,根據(jù)m”計算指紋X的k個哈希值Ii1⑴,h2⑴,…,hk⑴,其中,MX)的值域為{1,2,…,m”},l≤i≤k;將這k個哈希值作為偏移量提取第M個布隆過濾器組中對應(yīng)的k個位組,若第M個布隆過濾器組中布隆過濾器的個數(shù)少于g,則在提取該k個位組后,將k個位組中缺失的位均補為0,所述k個位組的各位組依次與標志位向量V[g]按位對應(yīng)進行“與”運算,最終結(jié)果寫回標志位向量V[g]; (3.10)判斷V[g]的各位是否全為“零”,是則進行子步驟(3.11),否則進行子步驟(3.12); (3.11)判斷是否M = fr/gl,是則表明指紋X為新指紋,轉(zhuǎn)步驟(5),否則,置M = M+1,轉(zhuǎn)子步驟(3.7); (3.12)判斷指紋X為可能重復(fù)指紋,查找V[g]中首個值為‘I’的bit在V[g]中的位置,轉(zhuǎn)步驟(4); (4)指紋子集表檢索步驟:包括下述子步驟: (4.1)以所述子步驟(3.12)查找的位置作為對應(yīng)的布隆過濾器編號,進一步查找該編號的布隆過濾器對應(yīng)的指紋子集表,判斷指紋子集表中是否存在指紋X,是則進行子步驟(4.2),否則轉(zhuǎn)子步驟(4.4); (4.2)指紋X為重復(fù)指紋,指紋X對應(yīng)的數(shù)據(jù)塊為重復(fù)數(shù)據(jù),將指紋X移動到指紋子集表的頭部,置P=P+ 1,判斷是否P>PO,是則進行子步驟(4.3),否則轉(zhuǎn)子步驟(3.2); (4.3)將內(nèi)存中的所有布隆過濾器的數(shù)據(jù)及對應(yīng)指紋子集表的數(shù)據(jù)寫入外存儲器,整個處理過程結(jié)束; (4.4)表明該編號的布隆過濾器發(fā)生誤判,對誤判進行計數(shù),判斷是否M =「r/gl,是則表明指紋X為新指紋,轉(zhuǎn)步驟(5),否則置M = M+ 1,轉(zhuǎn)子步驟(3.7); (5)未滿布隆過濾器判斷步驟,按照布隆過濾器的編號順序查找是否存在未滿的布隆過濾器BFt, 1≤ t ≤r,是則轉(zhuǎn)步驟(6),否則轉(zhuǎn)步驟(7); (6)新指紋標記步驟,包括下述子步驟: (6.1)判斷該布隆過濾器所屬布隆過濾器組的擴展標記是否為“無”,是則置m”=m,進行子步驟(6.2),否則置m”=m’,再進行子步驟(6.2); (6.2)根據(jù)m”計算所述指紋X的k個哈希值Ii1 (X),h2 (X),...,hk (X); (6.3)將所述布隆過濾器BFt位向量的第一位作為起始點,將所述k個哈希值Ill⑴,h2⑴,…,hk⑴作為偏移量,得到位向量中對應(yīng)的k個位,將這k個位置為‘ I’,完成對指紋X的標記; (6.4)查找布隆過濾器BFt對應(yīng)的指紋子集表,將指紋X插入到指紋子集表的頭部; (6.5)判斷布隆過濾器是否裝滿,是則置該布隆過濾器未滿標記為“已滿”; (6.6)置P=P + I,判斷是否P>PO,是則進行子步驟(4.3),否則轉(zhuǎn)子步驟(3.2); (7)布隆過濾器數(shù)量判斷步驟,包括下述子步驟: (7.1)判斷是否布隆過濾器編號T < r,是則進行子步驟(7.2),否則需對布隆過濾器陣列進行擴展,轉(zhuǎn)步驟(8); (7.2)創(chuàng)建新的布隆過濾器及新的指紋子集表; 在內(nèi)存中,通過參數(shù)m、k創(chuàng)建一個布隆過濾器及其對應(yīng)的指紋子集表,并置該布隆過濾器的未滿標記為“未滿”;對該布隆過濾器賦予編號T+1,轉(zhuǎn)步驟(5); (8)布隆過濾器陣列擴展步驟,包括下述子步驟: (8.1)置布隆過濾器臨時組號變量M’ =1 ; (8.2)選擇第M’個布隆過濾器組,判斷其擴展標記是否為“無”,是則轉(zhuǎn)子步驟(8.5),否則進行子步驟(8.3); (8.3)置Μ’=M’+1,判斷是否Μ,5Ξ:「r/gL是則轉(zhuǎn)子步驟(8.2),否則進行子步驟(8.4); (8.4)將各布隆過濾器組的擴展標記置為“無”,置n=tX n,置m’ =m,轉(zhuǎn)子步驟(8.1); (8.5)以新設(shè)計容量n’=tXn,誤判率上限ε不變,哈希函數(shù)數(shù)量k不變,計算布隆過濾器的新位向量長度m’ =log2eXlog2(l/ ε ) Xn’,對組內(nèi)每個布隆過濾器進行重構(gòu),同時,以新設(shè)計容量η’擴大布隆過濾器對應(yīng)的指紋子集表的容量,將該布隆過濾器組中所有的布隆過濾器未滿標記置為“未滿”,將該布隆過濾器組的擴展標記置為“有”;轉(zhuǎn)步驟(5)。
2.如權(quán)利要求1所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于: 所述分塊處理步驟中:對用戶需要備份或存儲的文件分成數(shù)據(jù)塊時,采用固定分塊方法,固定分塊所分成的數(shù)據(jù)塊大小相等,每個數(shù)據(jù)塊大小為4Κ~8Κ字節(jié)。
3.如權(quán)利要求1或2所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于: 所述指紋提取步驟 中:提取每個數(shù)據(jù)塊的指紋時,采用MD5消息摘要算法或者SHA-1消息摘要算法。
4.如權(quán)利要求3所述的可擴展的重復(fù)數(shù)據(jù)檢測方法,其特征在于: 所述布隆過濾器檢索步驟中,所述子步驟(3.9)及子步驟(6.2)根據(jù)m”計算指紋X的k個哈希值,包括下述過程: (a)1≤i≤k ;k個乘積構(gòu)成集合(S1, S2, S3,...,SJ ; (b)根據(jù)下述迭代公式計算指紋X的原始哈希值h'(x):
【文檔編號】G06F17/30GK103970744SQ201310028726
【公開日】2014年8月6日 申請日期:2013年1月25日 優(yōu)先權(quán)日:2013年1月25日
【發(fā)明者】王樺, 周可, 李春花, 張攀峰, 魏建生 申請人:華中科技大學(xué)