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