SFAD布谷鸟过滤器及基于SFAD布谷鸟过滤器重复数据删除
方法
技术领域
本发明属于数据处理技术改进领域,尤其涉及一种SFAD布谷鸟过滤器及基于SFAD布谷鸟过滤器重复数据删除方法。
背景技术
随着互联网的快速发展以及各种物联网以及移动终端设备的流行,现在的人们正在经历一个信息和数据大爆炸的时代。各类各样的摄像头、传感器等物联网设备以及智能手机、智能手表、智能手环等移动终端设备无时无刻不在产生和接受着海量的数据,各行各业对于数据的利用率也远超历史上的所有时期,人类正在进入大数据时代。随之而来的就是数据规模的快速增长,现有数据中心的存储规模已经普遍到达PB级规模并朝着EB级别快速迈进。管理和维护海量数据的存储对于各类数据中心和存储服务提供商来说是一笔巨大的开销。
然而根据调研,数据显示在各类大大小小的数据中心和存储系统中,重复数据大量的存在,消耗了宝贵的资源。根据IDC的一份研究显示,现有数据约75%的比例都为冗余重复数据,只有25%的数据是唯一非重复数据。为了解决重复冗余数据所带来的资源浪费问题,重复数据删除技术应运而生,其能够提高存储空间所能容纳的数据量,提高存储效率。其次能够减少网络中冗余数据的传输,降低网络负载,提高网络的利用率。最后能够降低数据的维护和管理成本以及能源开销。
重复数据删除技术是二十一世纪出现的数据冗余消除技术,其相较于传统的字节级编码技术,其可以在更为粗糙的粒度上进行重复数据删除,例如文件级和数据块级。此外其重复数据删除的范围更大,工作效率也更高。其技术思想是通过计算文件或者数据块的哈希指纹和比对来在存储系统中保留唯一的副本。同时,块级重复数据删除克服了文件级重复数据删除的对文件内容增删敏感的缺点,达到了重删率和重复数据删除效率的有效平衡,成为了目前业界重复数据删除技术的主流选择。
块级重复数据删除技术由四个功能模块组成,分别为:文件分块、指纹计算、重复指纹检测和存储管理。其中文件分块通过定长分块算法或者不定长分块算法将文件切割成粒度更细的数据块。指纹计算则是通过SHA1或者SHA256等哈希算法对数据块进行哈希计算,获取其的指纹。重复指纹检测模块负责指纹的索引、存储以及指纹的比对。存储管理模块用于存储数据块本身,以及数据块的指纹和对应的数据块的地址信息。
然而随着数据规模的快速扩张,重复数据删除技术也遭遇了性能瓶颈,在重复数据删除的流程中,重复数据的指纹由于需要的存储空间太大,无法存放于重复数据删除系统的主存中,只能存放于磁盘数据库中,而这就带来了严重的性能下降问题。为了解决这个问题,学界和业界涌现了各类各样的解决方案。
概要数据结构只保存数据的概要信息,放弃保存数据的原始信息,从而能够有效降低存储空间的消耗,同时其能够在线性时间内完成集合判定。得益于此,概要数据结构可以常驻内存,从而大幅提升了重复数据删除技术的速度,有效的缓解了性能下降的问题。
Yoshihiro等学者提出了DBLK系统,一种针对数据块的重复数据删除系统。为了缓解磁盘瓶颈问题,DBLK使用布隆过滤器来完成部分数据块是否存在的判定,从而节省了磁盘开销。DBLK没有使用原始的布隆过滤器,而是将多个布隆过滤器组合起来形成多层布隆过滤器,以此来提升整个过滤器的性能。
多层布隆过滤器是一种层级结构,每一层都是一个布隆过滤器数组。从上到下,每个上层的布隆过滤器对应两个下层布隆过滤器,也就是下层的布隆过滤器数组的过滤器数量是上层的两倍。并且对于最下层的布隆过滤器,DBLK将其和磁盘中的散列日志块建立了映射,可以通过最下层的布隆过滤器直接到达对应的磁盘日志块。当有数据块需要进行重复数据删除处理时,DBLK首先通过安全散列函数(例如SHA1)来计算其指纹,然后多层布隆过滤器的第一层进行查询,如果第一层布隆过滤器回报一个阳性的结果,那么其会进入此布隆过滤器对应的两个下层布隆过滤器继续进行查询,依次迭代直至最下层。如果在此期间,有布隆过滤器回报一个阴性的结果,那么就中止整个迭代过程,判定此数据块没有被存储过,进行后续数据块存储操作。如果直至最下层布隆过滤器都回报阳性的结果,那么DBLK就会通过最下层布隆过滤器和磁盘散列日志块的映射进行磁盘日志块的访问,来确定此数据块是否存在于存储系统中。
通过将多个布隆过滤器按照层级的结构进行组合,能够有效的提升布隆过滤器的准确性,从而降低假阳性错误。并且通过多层布隆过滤器结构能够快速的完成部分数据块是否存在的判断,节省了部分磁盘访问,从而有效的缓解了磁盘瓶颈,提升了整个重复数据删除系统的性能。如图1所示。
多层布隆过滤器没有克服布隆过滤器不能够动态调整容量的缺陷,其的容量在数据结构初始化的时候就已经固定,对于数据经常发生增删的存储系统来说,此缺陷成为了其广泛应用的一个限制。
Reddy等人针对半可信的云存储环境中提出了使用布谷鸟过滤器来加速整个重复数据删除过程。在半可信的环境中,数据重复数据删除导致不可避免的一个步骤就是数据所有权验证,这同样也是判定一个元素是否属于某个集合的场景。作者使用布谷鸟过滤器来加速整个数据所有权验证的过程,当某个数据项变为流行并且要进行重复数据删除操作的时候,此时重复数据删除算法会初始化一个布谷鸟过滤器,并把当前数据项的所有用户信息放入此布谷鸟过滤器,随后当有用户进行此数据块的访问时,系统会要求其先提交数据项的散列值进行比对,随后再让用户提交自己的令牌,并通过布谷鸟过滤器来判定此令牌是否存在,完成用户所有权的判定。
作者通过使用布谷鸟过滤器提升了整个重复数据删除过程中用户所有权检验步骤的效率,并且通过实验证明,相较于标准布隆过滤器和D-left布隆过滤器,布谷鸟过滤器的性能更为出色,具有更低的假阳性错误。
技术二使用的布谷鸟过滤器同样不具备动态调整容量的能力,因此也具有着在数据数目经常发生变动的场景下不能很好适应的缺陷。同时,布谷鸟过滤器的错误率有着进一步优化的空间。
SFA布谷鸟过滤器通过自己的数据结构设计达到区分不同哈希函数插入指纹的效果,有效的降低了数据结构的假阳性率,同时不会耗费额外的存储空间。对于一个d-arySFACF,本文提出将d个单独的Cuckoo Filter绑定在一起形成一个组,每个CF被称为unit-CF,然后使用每个unit-CF在组中的顺序来标识指纹信息,称为分离指纹感知。如果现在有一个由两个unit-CF组成的组,那么这两个unit-CF的位序信息可以用于区分指纹。例如,第一个unit-CF只存储由第一个哈希函数插入的指纹,第二个unit-CF只存储由第二个哈希函数插入的指纹。
一个SFA布谷鸟过滤器包含d个单独的标准布谷鸟过滤器,称为单元布谷鸟过滤器,每个布谷鸟过滤器由一系列bucket组成,每个bucket又有一些列的cell组成,每个cell是一个比特数组,用以存放一个数据指纹。其的结构如图2所示。同时,SFA布谷鸟过滤器通过多个指针指向这d个单独的布谷鸟过滤器。
SFA布谷鸟过滤器插入算法:当进行元素t的插入时,(1)首先SFA布谷鸟过滤器会通过指纹函数计算元素t的指纹,随后通过d个哈希函数来计算d个候选bucket的位置(p_1…p_d)。(2)SFA布谷鸟过滤器尝试将元素t的指纹插入到第1个单元布谷鸟过滤器的第p_1个候选bucket中,如果此候选bucket中含有空的cell,那么将指纹插入到此cell中,返回成功,插入操作结束。(3)如果此候选bucket中没有空的cell,那么SFA布谷鸟过滤器会访问第2个bucket中的第p_2个bucket,查询是否有空的cell,如果有则返回成功,插入操作结束。(4)如果依然没有空的cell,那么迭代进行插入,尝试在剩下的第i个的p_i个候选bucket中进行插入,如果其中发现空的cell,则返回成功,插入操作结束。(5)如果所有的d个候选bucket中都没有插入成功,接下来要进行relocate操作。(6)SFA布谷鸟过滤器会在d个候选bucket中随机选择一个,并且随机踢出其中的一个指纹,然后将元素t的指纹插入此cell中。(7)随后将被踢出的元素指纹设置为待插入指纹,返回步骤1。
SFA布谷鸟过滤器查询算法:当进行元素t的查询时,(1)首先SFA布谷鸟过滤器会通过指纹函数计算元素t的指纹,随后通过d个哈希函数来计算d个候选bucket的位置(p_1…p_d)。(2)随后SFA布谷鸟过滤器会访问第1个单元布谷鸟过滤器中的第p_1个bucket,然后比对所有cell中的指纹,如果发现有相同的指纹,返回元素t存在,并且结束查询操作,否则进入步骤3。(3)访问第2个单元布谷鸟过滤器中的第p_2个bucket,然后比对所有cell中的指纹,如果发现有相同的指纹,返回元素t存在,并且结束查询操作,否则进入步骤4。(4)迭代访问第i个单元布谷鸟过滤器中的p_i个bucket,然后进行逐cell的指纹对比,如果发现相同的指纹,那么返回元素t存在,结束查询操作。(5)如果在这个过程中都没有发现相同的指纹,那么返回元素t不存在,结束查询操作。
SFA布谷鸟过滤器删除算法:当进行元素t的删除时,(1)首先SFA布谷鸟过滤器会通过指纹函数计算元素t的指纹,随后通过d个哈希函数来计算d个候选bucket的位置(p_1…p_d)。(2)随后SFA布谷鸟过滤器会访问第1个单元布谷鸟过滤器中的第p_1个bucket,然后比对所有cell中的指纹,如果发现有相同的指纹,移除此指纹,返回删除成功,结束删除操作,否则进入步骤3。(3)访问第2个单元布谷鸟过滤器中的第p_2个bucket,然后比对所有cell中的指纹,如果发现有相同的指纹,移除此指纹,返回删除成功,结束删除操作,否则进入步骤4。(4)迭代访问第i个单元布谷鸟过滤器中的p_i个bucket,然后进行逐cell的指纹对比,如果发现相同的指纹,那么移除此指纹,返回删除成功,结束删除操作。(5)如果在这个过程中都没有发现相同的指纹,那么返回删除失败。
SFA布谷鸟过滤器虽然能够有效地降低数据结构的假阳性率,但是其不具备动态调整容量的特性。而在日常的应用中,数据元素的增加和删除非常普遍,因此SFA布谷鸟过滤器具有一定的局限性。
发明内容
本发明的目的在于提供一种SFAD布谷鸟过滤器及基于SFAD布谷鸟过滤器重复数据删除方法,旨在解决上述的技术问题。
本发明是这样实现的,一种SFAD布谷鸟过滤器,所述SFAD布谷鸟过滤器将SFA布谷鸟过滤器通过双向链表连接起来形成,所述SFAD布谷鸟过滤器包括多个单元SFACF1,所述单元SFACF1包括平行设置的第一个单元CF指针及第二个单元CF指针。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器维护一个头指针及一个尾指针,所述头指针指向SFAD布谷鸟过滤器中的第一个SFA布谷鸟过滤器,所述尾指针一直指向SFAD布谷鸟过滤器中的最后一个SFA布谷鸟过滤器。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器的插入算法包括以下步骤:
S11、SFAD布谷鸟过滤器计算元素的指针及其所有候选bucket位置;
S12、获取尾指针指向的SFA布谷鸟过滤器,如此SFA布谷鸟过滤器的容量大于预先设定的阈值,则插入算法将在双向链表上插入一个参数与所述SFA布谷鸟过滤器完全相同的SFA布谷鸟过滤器,并且将尾指针移至插入的新SFA布谷鸟过滤器的位置;
S13、在尾SFA布谷鸟过滤器中进行元素插入,如插入成功,则反馈插入操作完成,如插入不成功,则执行下一步骤;
S14、在双向链表上插入一个参数与所述SFA布谷鸟过滤器完全相同的SFA布谷鸟过滤器,并且将尾指针移至新插入SFA布谷鸟过滤器的位置,并且返回步骤S13。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器的查询算法包括以下步骤:
S21、SFAD布谷鸟过滤器计算元素的指针及其所有候选bucket位置;
S22、获取头指针指向的SFA布谷鸟过滤器将其称为当前SFA布谷鸟过滤器;
S23、在当前所述SFA布谷鸟过滤器中查询备选桶并进行指纹对比,如有相同指纹,则反馈元素存在,并结束此次查询操作,如没有相同指纹,则执行下一步骤;
S24、通过链表获取下一个SFA布谷鸟过滤器,如链上没有下一个SFA布谷鸟过滤器,则反馈元素不存在,并结束此次查询操作,如链上有一个SFA布谷鸟过滤器,则返回步骤S23。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器的删除算法包括以下步骤:
S31、SFAD布谷鸟过滤器计算元素的指纹及其所有候选bucket位置;
S32、将其获取头指针指向的SFA布谷鸟过滤器称为当前SFA布谷鸟过滤器;
S33、在当前所述SFA布谷鸟过滤器中查询备选桶并进行指纹对比,如有相同指纹,则移除该指纹,并结束此次删除操作,如无相同指纹,则执行下一步骤;
S34、通过链表获取下一个SFA布谷鸟过滤器,如果链上没有下一个SFA布谷鸟过滤器,则反馈删除失败,并结束此次删除操作,如链上有下一个SFA布谷鸟过滤器,则返回步骤S33。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器长时间运行后,双向链表上很多SFA布谷鸟过滤器负载较低,数据结构空间利用率降低,需进行收缩来释放空闲的空间。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器在收缩释放空闲的空间时会维护一个负载表,所述负载表中记录链表上所有SFA布谷鸟过滤器的负载率,并按照从小到大从头到尾排序,当表头的SFA布谷鸟过滤器的负载率小于规定的阈值时,则触发收缩算法。
本发明的进一步技术方案是:所述SFAD布谷鸟过滤器的收缩算法包括以下步骤:
S41、SFAD布谷鸟过滤器取出表尾的SFA布谷鸟过滤器当作待插入过滤器;
S42、判断SFA布谷鸟过滤器的表头是否为空,如表头的SFA布谷鸟过滤器不为空,则在表头的SFA布谷鸟过滤器中取出一个指纹,并将其插入待插入过滤器中,如插入成功,则返回步骤S42,如插入不成功,则执行下一步骤,如表头的SFA布谷鸟过滤器已经为空,则删除此SFA布谷鸟过滤器,并反馈收缩操作完成;
S43、判断负载表中除表头外是否还有其他的SFA布谷鸟过滤器,如有,则将其设置为待插入布谷鸟过滤器,并返回步骤S42,如没有,则执行下一步骤;
S44、添加一个新的SFA布谷鸟过滤器在链表尾,并将新添加的SFA布谷鸟过滤器当作待插入SFA布谷鸟过滤器,并返回步骤S42。
本发明的另一目的在于提供一种基于SFAD布谷鸟过滤器的重复数据删除方法,所述基于SFAD布谷鸟过滤器的重复数据删除方法包括以下步骤:
S1、判断文件流是否有内容,如没有,则重复数据删除流程结束,如有,则对文件流进行滚动Rabin指纹法分块获取一个数据块,并通过安全哈希函数SHA1计算器指纹;
S2、将获取的数据库指纹和数据库放置在缓存中;
S3、通过SFAD布谷鸟过滤器查询缓存中是否存在该数据块指纹,如存在,则执行下一步骤,如不存在,则执行步骤S6;
S4、进入磁盘数据块指纹数据库进行缓存指纹的查询,如发现存在,则执行步骤S5,如发现不存在,则执行步骤S6;
S5、发现此数据块已被存储过,则放弃存储,将数据块的SHA1指纹存入文件列表存储区,并反馈步骤S1;
S6、发现此数据块没有被存储过,则将缓存中的数据块存入容器存储区,将数据块的SHA1指纹存入磁盘指纹数据库,并将指纹索引区和文件列表存储区,并反馈步骤S1。
本发明的进一步技术方案是:所述步骤S1中使用滚动Rabin指纹分块法获取数据分块。
本发明的有益效果是:SFAD布谷鸟过滤器高效的概要数据结构,有效的降低了布谷鸟过滤器的假阳性率,从而增加了重复数据删除的效率和吞吐量。
附图说明
图1是本发明实施例提供的现有SFA布谷鸟过滤器重复数据删除示意图。
图2是本发明实施例提供的现有SFA布谷鸟过滤器示意图。
图3是本发明实施例提供的现有标准布谷鸟过滤器导致假阳性的错误示意图。
图4是本发明实施例提供的SFAD布谷鸟过滤器的数据结构图。
图5是本发明实施例提供的基于SFAD布谷鸟过滤器的重复数据删除方法的流程图。
图6是本发明实施例提供的存储系统的架构图。
具体实施方式
Cuckoo Filter(CF) 布谷鸟过滤器
本方案着眼于解决重复数据删除方法中使用SFA布谷鸟过滤器无法动态扩展的问题,本方案在SFA布谷鸟过滤器的基础上设计了数据结构——SFAD布谷鸟过滤器,其通过自身的结构以及算法设计,实现了区分不同数据指纹的功能,并且能够自主扩展容量。
随着人类步入大数据时代,整个因特网上的数据爆发式增长,给数据中心和各类企业带来了巨大的挑战。重复数据删除技术能够有效的消除存储系统中的冗余数据,降低空间开销、带宽开销以及能源消耗,成为了学界和业界的研究热点。块级重复数据删除技术凭借着其在重删率和计算开销中得到了较好平衡,被广泛的应用于各类文件系统中。
块级重复数据删除技术遵循着、文件分块、指纹计算、重复指纹检测和存储管理的步骤。其中重复指纹检测步骤是其中最为关键的步骤,因为通过指纹的比对就可以判定数据块的重复,避免了字节级的比对,大幅缩减了计算开销,简化了重复数据删除的流程。由于庞大的数据规模,导致数据块指纹的存储开销也随之快速膨胀,无法被内存完整存储,如何有效地存储指纹成为了重要议题。Venti等重复数据删除系统直接将指纹存储在磁盘数据库中,但是由于磁盘本身的结构限制所带来的随机访问速度缺陷,导致Venti的整体重复数据删除速度被限制在6.5MB/s。后续的学者针对此问题提出了多种解决方案。其中概要数据结构能够在一定容忍错误率的情况下,能够有效的缩减存储开销,并在线性时间内完成集合判定,被应用于重复数据删除算法中来提升重复数据删除算法的速度,降低磁盘的性能限制对于重复数据删除算法的影响。
布谷鸟过滤器作为一种新颖的数据结构,被部分重复数据删除系统采用,但是其不具备区分指纹的能力,导致一种因为哈希碰撞所导致的假阳性错误,从而降低了重复数据删除算法的速度。
标准的布谷鸟过滤器,其不区分所有数据指纹,如果有两个不同的元素E1和E2,它们因为哈希碰撞,计算得出相同的数据指纹,此时如果E1的第一个候选bucket和E2的第二个候选bucket正好相同,那么就会导致问题出现,如果E1的指纹被存放到了其第一个候选bucket中,那么进行元素E2的查询时,标准布谷鸟过滤器就会认为E2的指纹存在,从而返回一个元素存在的结果,导致假阳性的错误。
此外,标准布谷鸟过滤器的容量在初始化的时候就已经固定,无法在后续的使用中发生更改,因此无法很好的适用于元素数据经常发生变化的场景中,成为了一个广泛应用的限制。
本申请提出一种高效存储系统重复数据删除方法,其提出了一种新型概要数据结构——SFAD布谷鸟过滤器,其通过特别设计的结构和对应的插入、查询、删除算法成功区分不同哈希函数插入的指纹,并且能够根据元素数目的多少调整自己的容量。并基于此数据结构提出了一种高效存储系统重复数据删除方法。
首先,我们将会介绍本发明提出的高效重复数据删除技术中的核心——SFAD布谷鸟过滤器以及其的基本组成单元SFA布谷鸟过滤器。
SFAD布谷鸟过滤器,本发明在SFA布谷鸟过滤器的基础上,为了使其具备动态调整容量的功能,将SFA布谷鸟过滤器通过双向链表连接起来形成了SFAD布谷鸟过滤器,其能够动态的增删链表上的SFA布谷鸟过滤器,从而能够增减自己的容量。SFAD布谷鸟过滤器数据结构如图4所示。
同时SFAD布谷鸟过滤器会维护一个头指针和一个尾指针,头指针指向SFAD布谷鸟过滤器中的第一个SFA布谷鸟过滤器,尾指针一直指向SFAD布谷鸟过滤器中的最后一个SFA布谷鸟过滤器。
SFAD布谷鸟过滤器插入算法,当插入元素t时,(1)SFAD布谷鸟过滤器首先计算元素t的指纹以及其的所有候选bucket位置。(2)SFAD布谷鸟过滤器获取尾指针指向的SFA布谷鸟过滤器,如果此SFA布谷鸟过滤器的容量已经大于预先设定的阈值,那么插入算法将在双向链表上插入一个参数与之前SFA布谷鸟过滤器完全相同的SFA布谷鸟过滤器,并且将尾指针移到这个位置。(3)在尾SFA布谷鸟过滤器中进行元素t的插入,如果插入成功,则返回插入操作完成,否则跳至步骤4。(4)在双向链表上插入一个参数与之前SFA布谷鸟过滤器完全相同的SFA布谷鸟过滤器,并且将尾指针移到这个位置,并且跳至步骤3。
SFAD布谷鸟过滤器查询算法
当查询元素t时,(1)SFAD布谷鸟过滤器首先计算元素t的指纹以及其的所有候选bucket位置。(2)获取头指针指向的SFA布谷鸟过滤器称为当前SFA布谷鸟过滤器。(3)在当前SFA布谷鸟过滤器中查询备选桶,对比指纹,如果有相同的指纹,则返回元素t存在,并结束查询操作,否则跳至步骤4。(4)通过链表获取下一个SFA布谷鸟过滤器,如果链上没有下一个SFA布谷鸟过滤器,返回元素t不存在,并结束查询操作,否则跳至步骤3。
SFAD布谷鸟过滤器删除算法,当删除元素t时,(1)SFAD布谷鸟过滤器首先计算元素t的指纹以及其的所有候选bucket位置。(2)获取头指针指向的SFA布谷鸟过滤器称为当前SFA布谷鸟过滤器。(3)在当前SFA布谷鸟过滤器中查询备选桶,对比指纹,如果有相同的指纹,移除该指纹,并结束删除操作,否则跳至步骤4。(4)通过链表获取下一个SFA布谷鸟过滤器,如果链上没有下一个SFA布谷鸟过滤器,返回删除失败,并结束删除操作,否则跳至步骤3。
SFAD布谷鸟过滤器收缩算法,文件或数据块的删除操作在存储系统中非常普遍,因此重复数据删除系统中的SFAD布谷鸟过滤器经过长时间的运行之后,双向链表上的很多SFA布谷鸟过滤器的负载可能非常低,导致整个数据结构的空间利用率降低,因此需要进行收缩来释放空闲的空间。
SFAD布谷鸟过滤器会维护一个负载表,其中记录链表上所有SFA布谷鸟过滤器的负载率,并且按照从小到大从表头到表尾排序。当表头的SFA布谷鸟过滤器的负载率小于规定的阈值时,则触发收缩操作。
收缩算法的详细步骤如下:(1)SFAD布谷鸟过滤器首先会取出表尾的SFA布谷鸟过滤器当作待插入过滤器。(2)如果表头的SFA布谷鸟过滤器不为空,在表头的SFA布谷鸟过滤器中取出一个指纹,并将其插入待插入过滤器中,如果插入成功,跳回步骤2,否则跳至步骤3。如果表头的SFA布谷鸟过滤器已经为空,那么删除此SFA布谷鸟过滤器,并且返回收缩操作完成。(3)如果负载表中除表头外还有其他的SFA布谷鸟过滤器,那么将其设置为待插入布谷鸟过滤器,跳至步骤2。否则跳至步骤4。(4)添加一个新的SFA布谷鸟过滤器在链表尾,并将新的SFA布谷鸟过滤器当作待插入SFA布谷鸟过滤器,跳至步骤2。
基于SFAD布谷鸟过滤器的重复数据删除方法,SFAD布谷鸟过滤器在整个重复数据删除方法中承担着一个初步集合判定的作用,用于初步判定数据块是否已经存在于存储系统中。本文提出的高效重复数据删除方法步骤如下。(1)如果文件流已经没有内容,重复数据删除流程结束。否则,首先对文件流进不定长分块获取一个数据块,此处使用滚动Rabin指纹分块方法,在获取了数据分块之后,通过安全哈希函数SHA1计算其指纹。(2)将此数据块指纹和数据块放置在缓存中。(3)通过SFAD布谷鸟过滤器查询缓存中的数据块指纹,如果数据块指纹存在,跳至步骤4。如果不存在,跳至步骤6。(4)进入磁盘数据块指纹数据库进行缓存指纹的查询,如果发现存在,跳至步骤5。如果发现不存在,跳至步骤6。(5)此数据块已经被存储过,因此放弃存储,将数据块的SHA1指纹存入文件列表存储区,返回步骤1。(6)此数据块没有被存储过。将缓存中的数据块存入容器存储区,SHA1指纹存入磁盘指纹数据库,指纹索引区和文件列表存储区,返回步骤1;其流程图如图5、6所示。伪代码如下:
本方案提出了一种高效的概要数据结构,SFAD布谷鸟过滤器,同时,实验评估表明,本方案有效的降低了布谷鸟过滤器的假阳性率,从而增加了重复数据删除系统的效率和吞吐量。
本发明针对之前重复数据删除方案所使用的SFA布谷鸟过滤器无法动态扩展的缺陷,提出了SFAD布谷鸟过滤器,其能够根据元素数目的多少来调整自己的容量,并且能够区分指纹从而降低了假阳性率,进而加速整个重复数据删除流程,能更好地适用于重复数据删除系统。
基于SFAD布谷鸟过滤器提出了一个块级重复数据删除方案,其凭借着SFAD布谷鸟过滤器的准确率优势,相较使用原始布谷鸟过滤器的方案有效地提升了吞吐量。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。