一种可扩展的重复数据检测方法

文档序号:6499358阅读:209来源:国知局
一种可扩展的重复数据检测方法
【专利摘要】一种可扩展的重复数据检测方法,属于计算机存储【技术领域】,解决现有重复数据检测方法中存储容量无法高效扩展的问题,以适应存储需求扩大,重删系统面临升级换代的现状。本发明包括分块处理、指纹提取、布隆过滤器检索、指纹子集表检索、未满布隆过滤器判断、新指纹标记、布隆过滤器数量判断以及布隆过滤器阵列扩展步骤。本发明采用布隆过滤器阵列来检索指纹数据,可快速定位检索范围,提高检索效率,实现重复数据的检测,具有高扩展性、高查询性能、支持元素定位、可控制误判率,有效减少内存开销。布隆过滤器阵列由同构的一系列布隆过滤器构成,只需提供误判率ε’及预估检索的指纹总数量nmax,就能计算出需要的布隆过滤器的数量及哈希函数的个数。
【专利说明】 一种可扩展的重复数据检测方法
【技术领域】
[0001]本发明属于计算机存储【技术领域】,具体涉及一种可扩展的重复数据检测方法。
【背景技术】
[0002]1998年,Jim Gray在获颁计算机图灵奖时的演讲中总结“信息产业在过去100年中呈指数增长态势”,并根据“摩尔定律”提出新经验定律“未来每18个月全球新增存储容量是有史以来全部存储容量的总和”。从2007年起,IDC公司与EMC公司连续五年合作发布信息存储市场调研报告,测算数据显示全球创造和复制的数字信息总量从2006年的161EB(exabytes)增加到2011年的1.8ZB (zettabytes),其中2007年全球数字信息总量首次超过可用存储容量,且两者之间的差异仍在逐年扩大。同时,IDC公司调研报告显示现存约75%的数据为副本信息,即仅有25%的数据具有唯一性。在此背景下,数据去重作为在较大空间范围内侦测和消除冗余信息的一种新型技术成为近几年学术界和工业界的研究热点,并正被愈加广泛地应用到各种信息存储系统。数据去重(Data Deduplication)是在数据集或数据流中发现和消除重复内容以提高数据的存储和/或传输效率的过程,又称重复数据删除(Duplicate Data Elimination),简称去重或重删。
[0003]重复数据元素的检测是实现数据去重的重要技术手段。随着数据规模的扩大,其索引信息量也会持续增长甚至超过可用内存容量。若索引信息被迫转储到硬盘,则查找和识别重复数据元素会遇到硬盘访问性能瓶颈,因此有必要研究支持重复元素快速检测的高效索引机制。
[0004]目前主要通过利用数据指纹、数据局部性、数据相似性和缓存技术等加速重复数据的检索。下面列举一些有代表性的可扩展重复数据检测方法。
[0005]2009年,NEC实验室的CezaryDubnicki等在HYDRAstor存储系统中提出按指纹前缀将数据块分布到负责不同指纹空间的虚拟超级节点(Supernode)中,并在各个超级节点中分别消除重复内容。通过细分指纹空间和迁移数据,HYDRAstor可以随时添加新的存储节点实现扩容,但扩容时面临大量的数据迁移。见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),共享相同的特征指纹的文件被聚合到一个去重域中,同时以文件的特征指纹作为该去重域的标识符。当需要扩展到多个节点时,Extreme Binning将去重域的特征指纹空间划分为多个区,并分别映射到各个节点。该方法易于扩展,但无法消除不同去重域之间的重复数据,因而是一种近似的去重解决方案,见 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大学和EMC公司的Wei Dong等系统研究了高性能去重集群的数据路由方法,提出将平均长度为8KB的分块序列按内容特征划分为IMB量级的超级块(Super-chunk)序列,并以超级块作为传输单元以提高整体路由效率。将超级块路由到能够获得最大重删率的节点,见 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年提出利用三种手段加速重复数据段的侦测和删除过程。I)采用布隆过滤器作为记录段指纹的摘要向量(Su_ary Vector) ;2)采用感知数据流的段布局(Stream-1nformed Segment Layout)方法,确保每个数据流的段序列最终被写入其专属的容器中,避免与其他数据流的段产生交叠;3)采用保持局部性的缓存机制(Locality Preserved Caching)挖掘数据流中的局部性。见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。该方法使用单一布隆过滤器加速检索,但无法实现高效扩容。
[0009]布隆过滤器(Bloom Filter)是一种高空间效率和高查询性能的数据结构,由于其独特的优势,使其得到广泛的应用,它能够高效描述静态数据集合,但无法反映动态数据集合特别是可扩展动态数据集合成员结构不断更新的特征。因此,人们对其进行了改进,先后提出了:
[0010](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]这些改进的布隆过滤器多面向网络中数据的定位及检索应用,侧重于增强可扩展性、控制误判率或减少内存开销,但缺乏对索引存储系统中大容量可变数据集时高查询性能、支持元素定位需求的考虑。
[0014]为了清晰阐述本发明,对本申请文件中出现的术语加以解释和说明:
[0015]布隆过滤器:如图1所示,由一个长度为m个bit的位向量和k个独立的哈希函数Iii(X) (I ^ i ^ k,k < m)构成,是一种空间效率很高的随机数据结构,它利用位向量表示一个集合,并能判断一个元素是否属于这个集合。为了表达集合S=U1, X2, X3,…,xn},首先位向量中所有的位被初始化为O ;然后对集合S中的元素\ (I ^ j ^ η)都分别使用这k个相互独立的哈希函数Iii (X),得到k个哈希值Iii (Xj) (I ^ i ^ k, Xj e S),将位向量的第一位作为起始点,将这k个哈希值作为偏移量,可以将\映射到位向量{1,2,...,πι}中的k个位,这些位被置1,Xj被标记;当S中所有的元素都被标记后,即集合S被布隆过滤器所表达,如果一个位多次被置为1,那么只有第一次会起作用。
[0016]要确定某个数据元素y是否属于集合S,首先对y分别使用这k个相互独立的哈希函数h (x),得到k个哈希值Iii (y),将位向量的第一位作为起始点,将这k个哈希值作为偏移量,检查布隆过滤器的位向量中对应的位是否全为I,是则y可能属于S ;否则确定y不是S中的元素。
[0017]由于哈希函数Iii (X) (I ^ i ^ k)对于任意的两个不同元素存在哈希冲突的可能性,例如I映射在位向量中对应的位可能已经被S中的非y元素所映射,布隆过滤器在做出肯定性判决时存在出错的可能性。布隆过滤器将非S集合中元素误判为S中的元素的可能性称为假阳性概率(False Positive Probability),也简称误判率(Error Rate)。假阳性概率可以通过数学方法来控制。
[0018]给定集合S的基数η、布隆过滤器位向量的长度m及其哈希函数的数量k,则布隆过滤器的位向量被插入η个 元素后某一位仍为O的概率为(l-l/m)kxn。另一方面,当某个新元素y对应的所有位都已被置I时,布隆过滤器将做出假阳性判断,进而可推断假阳性概率fBF为:
[0019]fBF=(l-(l-l/m)kXn)k ^ (l-e-kXn/m)k,
[0020]可推导当k=「ln2x(m/n)1时,布隆过滤器具有最小的假阳性概率,称为理想误判率,记为Fbf,此时,布隆过滤器的位向量中约有50%的位置为“I”;符号j ln2x(m / n)l表不大于ln2X (m/n)结果的最小整数;
[0021]更进一步,若η为已知,期望设计一个布隆过滤器,其理想误判率不大于给定的误判率上限ε,则可推导出m须满足:
[0022]m ^ log2eX 1g2 (I/ ε ) Xn,
[0023]若m=log2eXlog2(l/ ε ) Xn 且k=「ln2x(m/n) "] =「log2(l/e)l,当且仅当所有 n 个
元素都插入布隆过滤器时,其假阳性概率才增加到ε,因此n又称为布隆过滤器设计容量。
[0024]由以上分析可知,根据设计容量η和误判率上限ε,可计算出布隆过滤器的位向量长度m和哈希函数数量k ;设计容量η为布隆过滤器预计标记元素的数量,当一个布隆过滤器标记的元素少于η时,则该布隆过滤器为未满的布隆过滤器,未满的布隆过滤器既可以继续标记新的元素,也可以供查询是否某个元素已在其中标记,当一个布隆过滤器中已标记的元素数量为η时,则该布隆过滤器已满,不能继续标记新元素,但可以提供查询,η < m。
[0025]指纹子集表:用于存储指纹数据的列表,该列表配属于布隆过滤器阵列,其中每个布隆过滤器对应于一个指纹子集表,其容量为η个指纹空间,每个指纹空间占据若干字节,依据指纹生成算法确定;η为单个布隆过滤器设计容量。
[0026]布隆过滤器阵列(BA):如图所示,是由r个顺序排列的布隆过滤器BF1~B匕及它们对应的r个指纹子集表构成(r ^ 1,为正整数),r个布隆过滤器共享k个独立的哈希函数,其中每g (I < g<r,为正整数)个布隆过滤器为一组,最后不够一组的归为一组,共构成「r/gl个布隆过滤器组,g的大小为机器字长大小,g=25~8。布隆过滤器组中的g个布隆过滤器具有相同的参数组(n,m,k),其中,η为设计容量、m为位向量长度、k为哈希函数个数,参数值需根据具体系统要求参照本文后面具体实施细节确定个布隆过滤器至多具有两种不同的参数组。
[0027]位组:一个布隆过滤器组的g个位向量排列成矩阵,各位向量中相同的位,即矩阵中的一列,称为位组,如果一个布隆过滤器组中布隆过滤器的数量小于g个,则需要对位组中缺失的位补零到g的长度;
[0028]重构:对已有的布隆过滤器组按照新的设计参数重新构建,构建完成后替换掉先前的布隆过滤组。

【发明内容】

[0029]本发明提供一种可扩展的重复数据检测方法,解决现有重复数据检测方法中存储容量无法高效扩展的问题,以适应存储需求不断扩大,重删系统面临不断升级换代的现状。
[0030]本发明所提供的一种可扩展的重复数据检测方法,包括分块处理步骤、指纹提取步骤、布隆过滤器检索步骤、指纹子集表检索步骤、未满布隆过滤器判断步骤、新指纹标记步骤、布隆过滤器数量判断步骤和布隆过滤器阵列扩展步骤,其特征在于:
[0031](I)分块处理步骤:将用户需要备份或存储的文件分成数据块,对文件的所有数据块统一编号,数据块最大编号PO为正整数;
[0032](2)指纹提取步骤:提取每个数据块的指纹,将指纹按数据块编号形成指纹列表;
[0033](3)布隆过滤器检索步骤,包括下述子步骤:
[0034](3.1)设置布隆过滤器最大数量!≥I ;设置布隆过滤器阵列可容纳元素数量11_,Hfflax大于外存储系统最大存储容量,根据系统的存储需求确定;设置布隆过滤器阵列总体误判上限ε' , 0.00000Κ ε / <0.01, ε '越小,系统开销越大,反之则误判率增大;设置布隆过滤器扩展系数t > 2 ;置布隆过滤器编号变量T=0,置数据块编号变量P=I ;置新位向量长度m’ = O,置临时位向量长度m” = O ;
[0035](3.2)从指纹列表中取出编号为P的指纹X ;
[0036](3.3)判断外存储器中是否已存在布隆过滤器,是则将外存储器中的布隆过滤器及其对应的指纹子集表读入内存,转子步骤(3.5),否则进行子步骤(3.4);
[0037](3.4)置单个设计容量n=nmax/r,计算布隆过滤器的位向量长度m和哈希函数数量k:
[0038]m=log2e.1g2 (I/ ε ).n, k=「ln2x(m/n)];
[0039]式中,单个误判率上限ε =1-(1- ε ' )1/r ;符号「!η 2x(m /n)_[表示大于ln2X (m/n)结果的最小整数;
[0040]在内存中,通过参数m、k创建一个布隆过滤器及其对应的指纹子集表,并置该布隆过滤器的未满标记为“未满”;所述布隆过滤器,包括位向量和k个独立的哈希函数,所述位向量为长度m个bit的一维向量,所述指纹子集表的最大长度为η个指纹空间,每个指纹空间占据16或20字节,k < m, η < m ;对该布隆过滤器赋予编号T+1,进行子步骤(3.5);[0041](3.5)在内存中将每g个布隆过滤器归为一个布隆过滤器组,如果布隆过滤器的数量不能被g整除,则将最后不满g个的布隆过滤器归为一个布隆过滤器组,对各布隆过滤器组顺序赋予从I开始的组号,并将各布隆过滤器组的扩展标记均置为“无”,转子步骤
(3.6);g=25~8;
[0042](3.6)创建标志位向量¥匕],¥匕]为长度为g个bit的一维向量,V[g]中的每个bit顺序对应一个布隆过滤器组中各布隆过滤器的编号;置布隆过滤器组号变量M = I ;
[0043](3.7MfV[g]中各个 bit 初始化为 ‘I’ ;
[0044](3.8)判断第M组布隆过滤器组的扩展标记是否为“无”,是则置m” =m,进行子步骤(3.9),否则置m”=m’,再进行子步骤(3.9);
[0045](3.9)选取第M个布隆过滤器组,根据m”计算指纹X的k个哈希值Ii1 (X),h2 (X),…,hk⑴,其中,MX)的值域为{1,2,…,m”},l≤i≤k;将这k个哈希值作为偏移量提取第M个布隆过滤器组中对应的k个位组,若第M个布隆过滤器组中布隆过滤器的个数少于g,则在提取该k个位组后,将k个位组中缺失的位均补为0,所述k个位组的各位组依次与标志位向量V[g]按位对应进行“与”运算,最终结果写回标志位向量V[g];
[0046](3.10)判断V[g]的各位是否全为“零”,是则进行子步骤(3.11),否则进行子步骤(3.12);
[0047](3.11)判断是否M = fr/gl,是则表明指纹X为新指纹,转步骤(5),否则,置M =M + 1,转子步骤(3.7);
[0048](3.12)判断指纹X为可能重复指纹,查找V[g]中首个值为‘I’的bit在V[g]中的位置,转步骤(4);
[0049](4)指纹子集表检索步骤:包括下述子步骤:
[0050](4.1)以所述子步骤(3.12)查找的位置作为对应的布隆过滤器编号,进一步查找该编号的布隆过滤器对应的指纹子集表,判断指纹子集表中是否存在指纹X,是则进行子步骤(4.2),否则转子步骤(4.4);
[0051](4.2)指纹X为重复指纹,指纹X对应的数据块为重复数据,将指纹X移动到指纹子集表的头部,置P=P + 1,判断是否Ρ>Ρ0,是则进行子步骤(4.3),否则转子步骤(3.2);
[0052](4.3)将内存中的所有布隆过滤器的数据及对应指纹子集表的数据写入外存储器,整个处理过程结束;
[0053](4.4)表明该编号的布隆过滤器发生误判,对误判进行计数,判断是否M = [r/g]
*1 9
是则表明指纹X为新指纹,转步骤(5),否则置M = M+ 1,转子步骤(3.7);
[0054](5)未满布隆过滤器判断步骤,按照布隆过滤器的编号顺序查找是否存在未满的布隆过滤器BFt, 1≤ t≤ r,是则转步骤(6),否则转步骤(7);
[0055](6)新指纹标记步骤,包括下述子步骤:
[0056](6.1)判断该布隆过滤器所属布隆过滤器组的扩展标记是否为“无”,是则置m”=m,进行子步骤(6.。^否则置“’^^再进行子步骤”.2);
[0057](6.2)根据m”计算所述指纹X的k个哈希值、⑴,hJX), "^hk(X);
[0058](6.3)将所述布隆过滤器BFt位向量的第一位作为起始点,将所述k个哈希值Ill⑴,h2⑴,…,hk⑴作为偏移量,得到位向量中对应的k个位,将这k个位置为‘ I’,完成对指纹X的标记;
[0059](6.4)查找布隆过滤器BFt对应的指纹子集表,将指纹X插入到指纹子集表的头部;
[0060](6.5)判断布隆过滤器是否装满,是则置该布隆过滤器未满标记为“已满”;
[0061](6.6)置P=P+ 1,判断是否Ρ>Ρ0,是则进行子步骤(4.3),否则转子步骤(3.2);
[0062](7)布隆过滤器数量判断步骤,包括下述子步骤:
[0063](7.1)判断是否布隆过滤器编号T < r,是则进行子步骤(7.2),否则需对布隆过滤器阵列进行扩展,转步骤(8);
[0064](7.2)创建新的布隆过滤器及新的指纹子集表;
[0065]在内存中,通过参数m、k创建一个布隆过滤器及其对应的指纹子集表,并置该布隆过滤器的未满标记 为“未满”;对该布隆过滤器赋予编号T+1,转步骤(5);
[0066](8)布隆过滤器阵列扩展步骤,包括下述子步骤:
[0067](8.1)置布隆过滤器临时组号变量M,=1 ;
[0068](8.2)选择第M’个布隆过滤器组,判断其扩展标记是否为“无”,是则转子步骤(8.5),否则进行子步骤(8.3);
[0069](8.3)置M’=M’+1,判断是否M’ ^「r/gl,是则转子步骤(8.2),否则进行子步骤(8.4);
[0070](8.4)将各布隆过滤器组的扩展标记置为“无”,置n=tXn,置m’ =m,转子步骤(8.1);
[0071](8.5)以新设计容量n’ =tXn,误判率上限ε不变,哈希函数数量k不变,计算布隆过滤器的新位向量长度m’ =log2eXlog2(l/ ε ) Xn’,对组内每个布隆过滤器进行重构,同时,以新设计容量η’扩大布隆过滤器对应的指纹子集表的容量,将该布隆过滤器组中所有的布隆过滤器未满标记置为“未满”,将该布隆过滤器组的扩展标记置为“有”;转步骤(5)。
[0072]所述的可扩展的重复数据检测方法,其特征在于:
[0073]所述分块处理步骤中:对用户需要备份或存储的文件分成数据块时,采用固定分块方法,固定分块所分成的数据块大小相等,每个数据块大小为4Κ~8Κ字节。
[0074]所述的可扩展的重复数据检测方法,其特征在于:
[0075]所述指纹提取步骤中:提取每个数据块的指纹时,采用MD5消息摘要算法或者SHA-1消息摘要算法。
[0076]所述的可扩展的重复数据检测方法,其特征在于:
[0077]所述布隆过滤器检索步骤中,所述子步骤(3.9)及子步骤(6.2)根据m”计算指纹X的k个哈希值,包括下述过程:
[0078](a)首先利用随机函数产生2Xk个32位2进制随机数,每两个随机数相乘得到k个乘积Si, 1≤i≤k ;k个乘积构成集合(S1, S2, S3,...,Sj ;
[0079](b)根据下述迭代公式计算指纹X的原始哈希值h' (x):
[0080]
【权利要求】
1.一种可扩展的重复数据检测方法,包括分块处理步骤、指纹提取步骤、布隆过滤器检索步骤、指纹子集表检索步骤、未满布隆过滤器判断步骤、新指纹标记步骤、布隆过滤器数量判断步骤和布隆过滤器阵列扩展步骤,其特征在于: (1)分块处理步骤:将用户需要备份或存储的文件分成数据块,对文件的所有数据块统一编号,数据块最大编号PO为正整数; (2)指纹提取步骤:提取每个数据块的指纹,将指纹按数据块编号形成指纹列表; (3)布隆过滤器检索步骤,包括下述子步骤: (3.1)设置布隆过滤器最大数量r≥I ;设置布隆过滤器阵列可容纳元素数量11_,nfflax大于外存储系统最大存储容量,根据系统的存储需求确定;设置布隆过滤器阵列总体误判上限ε ' , 0.0OOOO1< ε ‘ <0.01, ε '越小,系统开销越大,反之则误判率增大;设置布隆过滤器扩展系数t ≥2 ;置布隆过滤器编号变量T=0,置数据块编号变量P=I ;置新位向量长度m’ = O,置临时位向量长度m” = O ; (3.2)从指纹列表中取出编号为P的指纹X ; (3.3)判断外存储器中是否已存在布隆过滤器,是则将外存储器中的布隆过滤器及其对应的指纹子集表读入内存,转子步骤(3.5),否则进行子步骤(3.4); (3.4)置单个设计容量n=nmax/r,计算布隆过滤器的位向量长度m和哈希函数数量k:
m=log2e.1g2 (I/ ε ).n,k=「ln2x(m/n)~| ;
式中,单个误判率上限ε=1-(1-ε' )1〃;符号「1|12\(01/#表示大于1112\(111/11)结果的最小整数; 在内存中,通过参数m、k创建一个布隆过滤器及其对应的指纹子集表,并置该布隆过滤器的未满标记为“未满”;所述布隆过滤器,包括位向量和k个独立的哈希函数,所述位向量为长度m个bit的一维向量,所述指纹子集表的最大长度为η个指纹空间,每个指纹空间占据16或20字节,k < m, η < m ;对该布隆过滤器赋予编号T+1,进行子步骤(3.5); (3.5)在内存中将每g个布隆过滤器归为一个布隆过滤器组,如果布隆过滤器的数量不能被g整除,则将最后不满g个的布隆过滤器归为一个布隆过滤器组,对各布隆过滤器组顺序赋予从I开始的组号,并将各布隆过滤器组的扩展标记均置为“无”,转子步骤(3.6);g=25~8; (3.6)创建标志位向量¥匕],¥匕]为长度为g个bit的一维向量,V[g]中的每个bit顺序对应一个布隆过滤器组中各布隆过滤器的编号;置布隆过滤器组号变量M = I ; (3.7)将V[g]中各个bit初始化为‘I’ ; (3.8)判断第M组布隆过滤器组的扩展标记是否为“无”,是则置m”=m,进行子步骤?.…,否则置^~^再进行子步骤^川); (3.9)选取第M个布隆过滤器组,根据m”计算指纹X的k个哈希值Ii1⑴,h2⑴,…,hk⑴,其中,MX)的值域为{1,2,…,m”},l≤i≤k;将这k个哈希值作为偏移量提取第M个布隆过滤器组中对应的k个位组,若第M个布隆过滤器组中布隆过滤器的个数少于g,则在提取该k个位组后,将k个位组中缺失的位均补为0,所述k个位组的各位组依次与标志位向量V[g]按位对应进行“与”运算,最终结果写回标志位向量V[g]; (3.10)判断V[g]的各位是否全为“零”,是则进行子步骤(3.11),否则进行子步骤(3.12); (3.11)判断是否M = fr/gl,是则表明指纹X为新指纹,转步骤(5),否则,置M = M+1,转子步骤(3.7); (3.12)判断指纹X为可能重复指纹,查找V[g]中首个值为‘I’的bit在V[g]中的位置,转步骤(4); (4)指纹子集表检索步骤:包括下述子步骤: (4.1)以所述子步骤(3.12)查找的位置作为对应的布隆过滤器编号,进一步查找该编号的布隆过滤器对应的指纹子集表,判断指纹子集表中是否存在指纹X,是则进行子步骤(4.2),否则转子步骤(4.4); (4.2)指纹X为重复指纹,指纹X对应的数据块为重复数据,将指纹X移动到指纹子集表的头部,置P=P+ 1,判断是否P>PO,是则进行子步骤(4.3),否则转子步骤(3.2); (4.3)将内存中的所有布隆过滤器的数据及对应指纹子集表的数据写入外存储器,整个处理过程结束; (4.4)表明该编号的布隆过滤器发生误判,对误判进行计数,判断是否M =「r/gl,是则表明指纹X为新指纹,转步骤(5),否则置M = M+ 1,转子步骤(3.7); (5)未满布隆过滤器判断步骤,按照布隆过滤器的编号顺序查找是否存在未满的布隆过滤器BFt, 1≤ t ≤r,是则转步骤(6),否则转步骤(7); (6)新指纹标记步骤,包括下述子步骤: (6.1)判断该布隆过滤器所属布隆过滤器组的扩展标记是否为“无”,是则置m”=m,进行子步骤(6.2),否则置m”=m’,再进行子步骤(6.2); (6.2)根据m”计算所述指纹X的k个哈希值Ii1 (X),h2 (X),...,hk (X); (6.3)将所述布隆过滤器BFt位向量的第一位作为起始点,将所述k个哈希值Ill⑴,h2⑴,…,hk⑴作为偏移量,得到位向量中对应的k个位,将这k个位置为‘ I’,完成对指纹X的标记; (6.4)查找布隆过滤器BFt对应的指纹子集表,将指纹X插入到指纹子集表的头部; (6.5)判断布隆过滤器是否装满,是则置该布隆过滤器未满标记为“已满”; (6.6)置P=P + I,判断是否P>PO,是则进行子步骤(4.3),否则转子步骤(3.2); (7)布隆过滤器数量判断步骤,包括下述子步骤: (7.1)判断是否布隆过滤器编号T < r,是则进行子步骤(7.2),否则需对布隆过滤器阵列进行扩展,转步骤(8); (7.2)创建新的布隆过滤器及新的指纹子集表; 在内存中,通过参数m、k创建一个布隆过滤器及其对应的指纹子集表,并置该布隆过滤器的未满标记为“未满”;对该布隆过滤器赋予编号T+1,转步骤(5); (8)布隆过滤器阵列扩展步骤,包括下述子步骤: (8.1)置布隆过滤器临时组号变量M’ =1 ; (8.2)选择第M’个布隆过滤器组,判断其扩展标记是否为“无”,是则转子步骤(8.5),否则进行子步骤(8.3); (8.3)置Μ’=M’+1,判断是否Μ,5Ξ:「r/gL是则转子步骤(8.2),否则进行子步骤(8.4); (8.4)将各布隆过滤器组的扩展标记置为“无”,置n=tX n,置m’ =m,转子步骤(8.1); (8.5)以新设计容量n’=tXn,误判率上限ε不变,哈希函数数量k不变,计算布隆过滤器的新位向量长度m’ =log2eXlog2(l/ ε ) Xn’,对组内每个布隆过滤器进行重构,同时,以新设计容量η’扩大布隆过滤器对应的指纹子集表的容量,将该布隆过滤器组中所有的布隆过滤器未满标记置为“未满”,将该布隆过滤器组的扩展标记置为“有”;转步骤(5)。
2.如权利要求1所述的可扩展的重复数据检测方法,其特征在于: 所述分块处理步骤中:对用户需要备份或存储的文件分成数据块时,采用固定分块方法,固定分块所分成的数据块大小相等,每个数据块大小为4Κ~8Κ字节。
3.如权利要求1或2所述的可扩展的重复数据检测方法,其特征在于: 所述指纹提取步骤 中:提取每个数据块的指纹时,采用MD5消息摘要算法或者SHA-1消息摘要算法。
4.如权利要求3所述的可扩展的重复数据检测方法,其特征在于: 所述布隆过滤器检索步骤中,所述子步骤(3.9)及子步骤(6.2)根据m”计算指纹X的k个哈希值,包括下述过程: (a)1≤i≤k ;k个乘积构成集合(S1, S2, S3,...,SJ ; (b)根据下述迭代公式计算指纹X的原始哈希值h'(x):
【文档编号】G06F17/30GK103970744SQ201310028726
【公开日】2014年8月6日 申请日期:2013年1月25日 优先权日:2013年1月25日
【发明者】王桦, 周可, 李春花, 张攀峰, 魏建生 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1