一种流式重复数据检测方法

文档序号:6426472阅读:1026来源:国知局
专利名称:一种流式重复数据检测方法
技术领域
本发明属于计算机数据传输及存储系统,具体涉及一种数据流中的重复数据删除方法。
背景技术
互联网的扩展使得数据信息呈几何级数爆炸性增长,图灵奖得主吉姆.格雷(Jim Gray)指出网络环境下每18个月新增的数据量等于有史以来数据量的总和。数字图书馆、电子商务、医学影像、生物工程、科学计算、虚拟现实、数字化地球、网站多媒体等应用的不断发展,对建立高性能、高可靠的海量信息存储系统提出了需求,未来的存储系统其规模将达到PB级甚至EB级。海量的数据的传输与存储对网络系统及存储设备及服务器系统提出了非常高的要求,另一方面虚拟技术及云存储及各种网络应用的发展,使得大数据的流动变成了经常的事情。大量数据的转移、上载、下载给网络造成了沉重的负担,降低了用户的网络体验。同时大数据量的流动也加剧了存储系统的开销。但在这些数据流中实际上存在大量的数据冗余,即数据流中存在许多重复的数据块,这些冗余及重复的数据占据着大量的网络带宽和存储空间。而这些重复数据完全可以通过重复数据删除技术进行清洗,以达到节约存储空间提高带宽利用率的目的。关于重复数据删除技术,近几年来,国际上对重复数据的检测与删除进行了大量的研究并提出了几种重复数据检测方法。主要有完全文件检测(whole file detection, 简称WFD)、固定块(fixed-sized chunking,简称FSC)检测技术、基于内容的块检测技术 (content-defined chunking,简称 CDC)、滑动块(sliding block)技术、shingle 检测技术、bloom filter检测技术、模式匹配的检测技术等。这些重复数据检测技术尽管方法不同,但目的都是为了检测出存储系统中不同文件或数据对象间存在的相同数据块。流式重复数据检测,目前已知的有三种方法,(分段窗口模型(Landmark window model)、跳跃窗口模型(Jumping window model)、滑动窗口模型(Sliding window model)。分段窗口模型是按照等时或等长条件将数据流分成多个段,在每次检查重复数据时,只需放置一段于内存中。该方法的主要缺点是无法同时检测各段之间的重复数据。跳跃窗口模型是先定义一个能容纳N个数据段的滑动窗口,然后将数据流分成很多小段;每次从窗口的一端跳入一个数据段进入窗口,同时从窗口的另一端淘汰一个数据段;窗口内的所有数据段之间可以进行重复数据检测。该方法的主要缺点,是数据流不够流畅,同时无法精确分析重复数据检测的结果。滑动窗口模型仅仅维持最近的N个元素,当一个新元素到达时,同时淘汰到期的旧元素。该方法的主要缺点是当N的取值过大时检测的开销不可接受。

发明内容
本发明的目的在于提出一种高效精准的流式重复数据检测方法,在减小内存开销的同时提高了查询效率和精准度。一种流式重复数据检测方法,涉及由多个布隆过滤器TBF在逻辑上构成的循环先入先出队列,将逻辑上从队首到队尾的TBF依次计为TBF1JBF2,…,TBFg,g为TBF的个数, 每个TBF包含一个位向量BV和k个哈希函数,每个位向量关联一组计时器TA,位向量用于插入数据元素,计时器数用于记录插入数据元素时的时间戳,该检测方法具体为(1)插入数据元素χ 采用所述k个哈希函数分别对数据元素χ进行计算得到k个哈希值 hi (χ),1 (χ),. . .,hk (χ),将处于队尾的 TBFg 中偏移量为 hi (χ), h2 (χ),. . . , hk (χ)的 k个位的值分别置1,同时启用这k个位关联的计时器记录置1时的时间戳;若TBFgft时已装满数据元素,则清空处于队头的TBF1并将其摘下置为队尾;(2)检测数据元素χ是否为重复数据Ql)在TBF1, TBF2,…,TBF^中查询是否存在一个TBF,其偏移量为Ii1 (χ), h2(x), hk(x)的k个位的值全为1,若存在,则说明该TBF插入过数据元素X,进入步骤 (22),否则,χ不为重复元素(22)判断插入过数据元素χ的TBF是否是TBF1,若不是TBF1,则表明χ为重复元素,若是TBF1,则进入步骤(23);(23)查询TBF1插入χ时的时间戳是否小于TBFg插入χ的时间戳,若小于,则表明 χ逻辑上已被TBF1删除,χ不为重复元素;否则,表明χ为重复元素。本发明的技术效果体现在本发明通过构建一个计时型布隆过滤器阵列(Timing Bloom Filter Array, TBFA),在滑动窗口模型内灵活高效地检测重复数据。一个TBFA由多个同构的计时型布隆过滤器(Timing Bloom Filter, TBF)构成。而每个TBF包含一个布隆过滤器和一个分离的用于保存时间戳的计时器组。整个TBFA以一种循环先入先出队列(First-In First-Out, FIFO)的方式工作,在记录新元素的同时,淘汰已经移出数据流监控窗口的旧元素。该发明在滑动窗口模型下工作,对元素的监测可以精确到一个元素,从而使基于该发明的统计结果具有稳定性。TBFA中的部分计时器组可以被卸载到磁盘中,从而减少内存开销。理论分析和实验数据表明,DCBA在加载10%以内数据内容到内存的情况下,能够保持95%以上的查询效率,从而使该发明在空间效率和可扩展性上优于已有解决方案。


图1为布隆过滤初始状态示意图;图2为布隆过滤插入Xl和x2后的状态示意图;图3为布隆过滤的检验示意图;图4为本发明单节点布隆过滤重删检测示意图;图5为本发明多节点布隆过滤重删检测示意图;图6为布隆过滤队列示意图。
具体实施例方式本发明是针对数据流利用布隆过滤检测技术检测重复数据。在描述发明方案前先简要介绍一下布隆过滤(bloom filter)的工作原理。Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。下面我们具体来看Bloom Filter是如何用位数组表示集合的。初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0。见图1。为了表达S= {Xl,&,...,xn}这样一个η个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,· · ·,m} 的范围中。对任意一个元素χ,第i个哈希函数映射的位置Iii (χ)就会被置为l(i = 1,2..., k)。如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在图2中,k = 3,且有两个哈希函数选中同一个位置(从左边数第8位)。在判断y是否属于这个集合时,我们对y应用k个哈希函数,如果所有Iii (y)的位置都是1 (i = 1,2. . .,k),那么我们就认为y是集合中的元素,否则就认为y不是集合中的元素。图3中yl就不是集合中的元素。y2或者属于这个集合,或者刚好是一个“假阳性 (false positive),,。前面提到,Bloom Filter在判断一个元素是否属于它表示的集合时会有一定的错误率(假阳性率,false positive rate),下面就来估下计错误率的大小。在估计之前为了简化模型,假设k,n<m且各个哈希函数是完全随机的。当集合S= {Xl,&,..., }的所有元素都被k个哈希函数映射到m位的位数组中时,这个位数组中某一位还是0的概率是, =〔1-丄〕ae-knlm本发明是针对数据流,利用bloom filte技术检测数据流中重复数据的技术,通过采用布隆过滤队列及与之关联的计数器数组,能有效地检测数据流中的重复数据,同时提高内存的使用率,具体的设计如下计时型布隆过滤器阵列的数据结构如图4所示。计时型布隆过滤器阵列(Timing Bloom Filter Array, TBFA)在滑动窗口模型下以循环先入先出队列方式工作。滑动窗口模型将大数据流抽象为无限长度的时序队列,并通过一个固定长度的窗口监控距离当前时间点最近的N个已知元素(N的大小与布隆过滤器队列的容量相关,它的值与TBFA的容量相等)随着数据的更新和流动,窗口以一个元素为单位向前滑动,在记录一个新元素的同时淘汰一个旧元素,保持尺寸不变。数据元素可以是数据块,或者是文件构成。如果是由数据块构成,则数据流需要事先通过一些分块算法进行分块,这可以由滑动指纹算法(Rabin) 或同步算法(Rsync)等来完成。一个计时型布隆过滤器阵列包含g(l < g < N)个计时型布隆过滤器(Timing Bloom Filter, TBF),在逻辑上构成一个循环先入先出队列,将逻辑上位于队首的TBF计为 TBFl,并依次标记每个TBF直到队尾的TBFg。每个TBF包含一个位向量(Bit Vector,BV), 一个计时器组(TimerArray,ΤΑ)和一组哈希函数(Hash Function),其中位向量和哈希函数组的工作原理与传统的布隆过滤器(Bloom Filter, BF)的工作原理相同,位向量用于记录插入的元素,而计时器数组用于记录元素插入时的时间戳。若滑动窗口尺寸为N,则每个 TBF的设计容量为N/(g-l),即可记录N/(g-l)个元素和其时间戳信息。规定新元素总是插入位于队尾的TBFg,每当插入一个新元素则相应地从队首的TBFl中淘汰一个最旧的元素, 当TBFg充满时TBFl则会被置空,然后队列循环移动一个单元,TBFl从队首转移到队尾用于记录新元素并被重新标记为TBFg。从而TBFl和TBFg所记录的有效元素总数保持为N/ (g-Ι),考虑中间g_2个充满的TBF,则整个TBFA记录的有效元素总数为N。在物理数据组织上,TBFA把g个TBF的位向量与他们所关联的计时器组分离存储。 具体来说,g个TBF具有同构性,即它们具有相同的位向量长度、计时器组长度且共享同一组哈希函数。g个位向量中具有相同偏移量的位单元被存放到连续的内存空间中,见图6所示,因此偏移量相同的位单元能够被同时访问,这种数据布局能够允许上层应用同时查询 g个位向量,以判断待查询的元素是否被其中某个位向量所记录,其查询效率远高于传统的顺序检测方法。另一方面,每个位向量被关联一个长度相等的计时器组,用于存储被记录元素的时间戳。TBFA允许TBF2,…,TBFg-I对应的g_2个计时器组被卸载到硬盘,从而很大程度上减少内存开销。TBFA的数据结构同时适用于单节点和分布式环境。见图5所示,在具有r个节点的分布式环境下,可将构成TBFA的g个TBF分为r组,每组s个TBF由一个节点存储和维护,其中rXs = g。在每个节点中,s个TBF仍然按照前段所述的方法优化内存数据布局以提高查询效率。此外,存储节点之间需要保持计时同步,当维护TBFg的节点插入一个新元素时,维护TBFl的节点将相应地删除一个旧元素,所有g个TBF仍然在逻辑上以循环先入先出队列的方式工作。计时型布隆过滤器阵列的重复数据检测原理。计时型布隆过滤器阵列(Timing Bloom Filter Array,TBFA)通过插入、删除和查询三种操作支持滑动窗口模型下的流式重复数据检测。具体说明如下元素的插入方法。如前所述,TBFA所包含的所有TBF是同构的,新元素总是被插入到逻辑上位于队尾的TBFg。TBFg包含一个长度为m的位向量(布隆过滤器)和一个由 m个计时器构成的计时器组(TimerArray,ΤΑ),同时与其它TBF共享一个基础时钟(Base Clock, BC)和一组哈希函数hl,h2,…,hk。基础时钟在W,l,…,N/(g-l)-l]的范围内循环计时并以0为一个计时周期的开始。初始阶段,基础时钟和布隆过滤器的各个位都被置0 ;当插入一个新元素χ时,TBFg的布隆过滤器中偏移量为hi (x),h2(x),…,hk(x)的k 个位被置1,用以记录χ ;另一方面,TBFg的计时器组中偏移量为hl(x), h2(x),…,hk(x) 的k个计时器被设置为基础时钟的当前值。完成上述操作后,基础时钟自增到下一个计时点ο 素被认为已经失效。理论上在TBFl与TBFg中元素的和为N/(g-Ι)个,随着TBFg满载, TBFl中的所有元素将会失效从而其数据结构会被重新初始化,同时基础时钟进入下一个循环计时周期,这时可以把TBFl摘下来,插入到TBFgW前面。这样形成一个循环队列。所有 TBF在逻辑上前移动了一个单元,形成新的先入先出队列。这种被动删除元素的方法可以有效减少删除元素的内存访问频度,提高整个TBFA的查询效率。元素的查询方法。查询元素χ的重复性时,首先通过哈希函数组计算χ的k个映射值hl(x),h2(x),…,hk(x)。对于一个具体的TBF,当且仅当其布隆过滤器中偏移量为hl(x), h2(x),…,hk (χ)的k个位单元全为1时,认为χ已经被该TBF所记录。由于g个 TBF的布隆过滤器具有优化的内存数据布局,TBFA可以同时查询χ在所有TBF中的存在性,从而判断χ是否是当前滑动窗口中的重复元素。具体做法见图6所示,取出偏移量分别
为 hi (χ),h2(x),…,hk(x)的 k 处向量,即{Bit Vectorhiw, Bit Vectorh2w, ......,Bit
VeCtorhk(x)},对这k个向量按位进行“与”运算,得到的结果,如果除最后一位外(最后位必为1,它代表刚插入的元素),其它的某位为“ 1,,则表示该位对应的布隆过滤中有个元素与刚插入的数据内容重复,即为查找到的重复元素;如果计算得到的结果所有位都为“O”则表示没有找到重复元素。 特别地,当χ出现在TBFl中时,需要进一步检测χ的时间戳以判断其是否已经失效,并根据检测结果对最终判断作必要修正。由于TBF2,…,TBFg-I的计时器组在查询期间不被访问,他们可以被卸载到硬盘中以减少内存开销,当各TBF构成的先入先出队列循环时,再重新加载必要的计时器组。
权利要求
1. 一种流式重复数据检测方法,涉及由多个布隆过滤器TBF在逻辑上构成的循环先入先出队列,将逻辑上从队首到队尾的TBF依次计为TBF1JBF2,…,TBFg,g为TBF的个数,每个TBF包含一个位向量BV和k个哈希函数,每个位向量关联一组计时器TA,位向量用于插入数据元素,计时器数用于记录插入数据元素时的时间戳,该检测方法具体为(1)插入数据元素χ采用所述k个哈希函数分别对数据元素χ进行计算得到k个哈希值 Ill (χ),1 (χ),. . .,hk (χ),将处于队尾的 TBFg 中偏移量为 Ii1 (χ), h2 (χ),. . . , hk (χ)的 k 个位的值分别置1,同时启用这k个位关联的计时器记录置1时的时间戳;若TBFg此时已装满数据元素,则清空处于队头的TBF1并将其摘下置为队尾;(2)检测数据元素χ是否为重复数据(21)在TBF1,TBF2,…,TBFp1中查询是否存在一个TBF,其偏移量为Ii1(X),Ii2(X),..., hk(x)的k个位的值全为1,若存在,则说明该TBF插入过数据元素X,进入步骤(22),否则, χ不为重复元素;(22)判断插入过数据元素χ的TBF是否是TBF1,若不是TBF1,则表明χ为重复元素,若是TBF1,则进入步骤(23);(23)查询TBF1插入χ时的时间戳是否小于TBFg插入χ的时间戳,若小于,则表明χ逻辑上已被TBF1删除,χ不为重复元素;否则,表明χ为重复元素。
全文摘要
本发明提供了一种流式重复数据检测方法,通过构建一个计时型布隆过滤器阵列TBFA,在滑动窗口模型内灵活高效地检测重复数据。TBFA由多个同构的计时型布隆过滤器TBF构成,每个TBF包含一个布隆过滤器和一个分离的用于保存时间戳的计时器组,整个TBFA以一种循环先入先出队列的方式工作,在记录新元素的同时,淘汰已经移出数据流监控窗口的旧元素。本发明在滑动窗口模型下工作,对元素的监测可以精确到一个元素,从而使基于本发明的统计结果具有稳定性,另外TBFA中的部分计时器组可以被卸载到磁盘中,从而减少内存开销。理论分析和实验数据表明,DCBA在加载10%以内数据内容到内存的情况下,能够保持95%以上的查询效率,从而使本发明在空间效率和可扩展性上优于现有技术方案。
文档编号G06F5/06GK102253820SQ201110162619
公开日2011年11月23日 申请日期2011年6月16日 优先权日2011年6月16日
发明者周可, 张攀峰, 李春花, 王桦, 魏建生 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1