首页> 中国专利> 一种面向备份任务的重复数据删除方法

一种面向备份任务的重复数据删除方法

摘要

本发明公开了一种面向备份任务的重复数据删除方法,首先,划分备份任务;将硬盘上完成了全部查重过程的指纹仓库放入集合B?bucket;然后,在内存中建立局部缓存和全局缓存;将B?bucket中的元素放入全局缓存;将当前备份任务的所有指纹依次放入指纹仓库C?bucket;当C?bucket处于满态后更新,遍历并记录更新后的最大指纹与最小指纹;然后,在B?bucket中寻找具有这两个指纹的指纹仓库,并加入局部缓存;对更新后的每一个指纹在局部缓存和全局缓存中进行查询并标记后,将未被标记的指纹保存到指纹仓库N?bucket中;标记的指纹进行删除;最后,当N?bucket满态后替换并加入局部缓存,并更新全局缓存。优点在于:解决了指纹查询瓶颈问题;缩小查重范围,提高重删效率;保持较高的吞吐率。

著录项

  • 公开/公告号CN105786651A

    专利类型发明专利

  • 公开/公告日2016-07-20

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201610110134.8

  • 发明设计人 吴文峻;

    申请日2016-02-29

  • 分类号G06F11/14(20060101);

  • 代理机构11121 北京永创新实专利事务所;

  • 代理人赵文利

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2023-06-19 00:06:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-04

    授权

    授权

  • 2016-08-17

    实质审查的生效 IPC(主分类):G06F11/14 申请日:20160229

    实质审查的生效

  • 2016-07-20

    公开

    公开

说明书

技术领域

本发明属于数据备份存储领域,描述了一种面向备份任务的重复数据删除方法。

背景技术

随着数据中心的能源消耗问题越来越受到IT产业的广泛关注,如何节约数据中心的能源 消耗逐渐成为了研究人员们重点讨论的一项议题。而数据备份是数据中心的存储系统的主要 应用之一;因此,应用合理的备份策略,降低存储系统能耗,是实现减少数据中心整体电能 消耗的重要途径。

据统计,数据中心消耗的能源占全世界能耗的1.5%,而其中40%的能源来自数据中心的 存储系统。研究人员和管理人员通常采用两种方式降低存储系统的能耗,一是从硬件开发上 入手,提高存储系统本身的能耗效率,以更少的能源开销承担更多的存储负载;二是从负载 均衡和节能调度出发,合理的安排存储系统的正常工作时间,使得更多设备获得更多的低功 耗运行机会,在完成同样任务的情况下,降低整体能耗。

从应用角度分析,由于企业数据量的迅猛增长和数据传输率要求的不断提高,数据中心 的海量存储空间和高带宽网络传输需求成为当前网络存储领域面临的严峻挑战。备份和归档 系统急需有效地措施,提升存储的效率和系统的可扩展性以满足备份对容量和性能需求的高 速增长。通过研究发现,在备份和归档存储系统中,高达80%~90%的数据是冗余的。利用这 些应用数据高度冗余的特性,研究者们在已有存储技术的基础上提出了重复数据删除技术。 它能够极大地降低网络存储系统的存储空间开销,同时节省网络带宽,并进一步降低数据中 心的能耗和管理成本。

重复数据删除是基于数据自身的冗余度来检测数据流中的相同数据对象,只传输和存储 唯一的数据对象副本,并使用指向唯一数据对象副本的指针替换其他重复副本。相比于传统 的数据压缩技术,重复数据删除技术不仅可以消除文件内的数据冗余,还能消除共享数据集 内文件之间的数据冗余。

近一段时间,重复数据删除已经成为一种引人注目的无损压缩技术,能够识别并消除存 储过程中的重复数据,被应用到多种存储系统用于节省空间和网络带宽。当备份任务的数据 经过重复数据删除时,需要的存储空间能够减少10到20倍,甚至更多。但是,重复数据删 除并非在任何情况下都能取得理想的效果。在重删数据过程中,当数据总量超过一定规模, 达到TB级甚至更高时,指纹查询瓶颈就会逐渐显现出来,因为这种重复数据删除技术需要 一个完整的数据块指纹索引,能够映射到每个存储在介质上的数据块。然而,对于一般的磁 盘之间备份任务的规模(10~100TB),将包含全部数据块指纹的索引放入内存是不切合实际 的,而对于磁盘上索引的每一次查询的时间开销由相对较高,限制重删的整体吞吐率。

研究表明,重复数据删除的重删效果与进行重删的数据类型和数据内容有密切关系。而 在关于重删技术的各项研究之中,缺少在能耗方向上的研究。块级别甚至更细粒度的重复数 据删除过程的执行,对服务器的系统资源要求很高,时间开销也很大。这两项开销在重删效 果较差时尤为明显,并直接导致能耗增加。所以,合理的安排重删过程的执行对存储系统的 节能有重要的意义。

发明内容

本发明为了降低备份过程的总体能耗,通过控制重复数据删除过程的执行,针对不同备 份任务进行重删,设计了基于双缓存机制的指纹查询算法;具体是一种面向备份任务的重复 数据删除方法。

具体步骤如下:

步骤一、对硬盘的备份任务进行划分,每个备份任务均有N个指纹仓库bucket组成;

指纹是经过哈希算法计算后得到的固定长度的字符串;指纹组成指纹仓库bucket;每个 指纹仓库bucket的大小为:1≤bucket≤106;N为整数。

依次选取每个备份任务作为当前备份任务;初始值为第一个备份任务;令当前备份任务 的N个指纹仓库bucket设为:bucket1,bucket2,...,bucketj,...,bucketN;每个指纹仓库bucketj中的 指纹集合设为Fj={fj1,fj2,fj3,...,fjn},n为整数。

步骤二、对硬盘上完成了全部查重过程的指纹仓库,依次进行标记,并放入集合 B-bucket;

B-bucket={B-bucket1,B-bucket2,...B-bucketi,...B-bucketk};k为硬盘上完成了全部查 重过程的指纹仓库的总数,i,k均为整数。集合B-bucket中每个元素B-bucketi中包含n条指 纹。

步骤三、在内存中建立局部缓存L-cache和全局缓存G-cache,初始设置两个缓存为空。

两个缓存的容量均设为M个bucket;M取决于内存的大小,为整数。

步骤四、判断集合B-bucket中的总数k是否小于全局缓存G-cache的容量M,如果是, 则将B-bucket中的元素依次放入全局缓存G-cache;否则,比较B-bucket中各元素的引用次 数,按引用次数从大到小排列,取前M个元素将加入G-cache。

步骤五、检验内存中是否存在指纹仓库C-bucket,如果不存在,则创建一个空的指纹仓 库C-bucket;否则,将当前备份任务每个指纹仓库中的指纹按顺序依照散列表插入算法插入 C-bucket;

步骤六、判断当前存储指纹仓库C-bucket的指纹数量是否达到106个,如果是,将C-bucket 更新为指纹仓库S-bucket,并进入步骤七,否则,返回步骤五。

当前备份任务的每个指纹仓库中的指纹被送入指纹仓库C-bucket中,达到106个后; C-bucket达到满态,更新为指纹仓库S-bucket;该指纹仓库中的剩余指纹再次等待下一个循 环;如果当前指纹仓库的剩余指纹数量不够106个时,直接更新为指纹仓库S-bucket;

步骤七、遍历当前指纹仓库S-bucket中所有指纹,按字母和数字序找出并记录最大指纹 fmax与最小指纹fmin

每次指纹仓库C--bucket中的指纹与指纹仓库S-bucket中的指纹相同,均设为 f1,f2,...,fp,...fq;q为106

步骤八、依次遍历集合B-bucket中每个元素B-bucketi的所有指纹,寻找当前元素中的 最大指纹fimax或最小指纹fimin,并与fmax和fmin进行比较;当fimax=fmax或fimin=fmin,则将 指纹fimax或fimin所在的元素B-bucketi加入L-cache。

步骤九、判断局部缓存L-cache的元素个数是否达到M,如果是,按照LRU算法在缓存 L-cache中选择出要被替换的指纹仓库加入G-cache,将当前指纹仓库B-bucketi加入L-cache, 进入步骤十五;否则,将B-bucketi直接加入L-cache;

步骤十、遍历当前指纹仓库S-bucket中所有指纹,对每一个指纹fp在局部缓存L-cache 和全局缓存G-cache中进行查询并标记。

步骤1001、依次选取指纹仓库S-bucket中的单个指纹fp

步骤1002、遍历L-cache中所有的指纹仓库,判断是否存fp,如果存在,则中止查询, 并标记当前S-bucket中指纹fp为重复指纹;进入步骤1006;否则,继续查询L-cache所有的 指纹仓库。

步骤1003、如果L-cache所有的指纹仓库中均不存在指纹fp,则遍历全局缓存G-cache 中所有的指纹仓库;

步骤1004、判断全局缓存G-cache的某个指纹仓库是否存在指纹fp,如果是则中止查询, 并标记当前指纹fp为重复指纹;进入步骤1006;否则,继续查询G-cache中所有的指纹仓库。

步骤1005、如果G-cache中所有的指纹仓库均不存在指纹fp,查询结束。

步骤1006、选取指纹仓库S-bucket中的下一个指纹,重复步骤1002,直至将指纹仓库 S-bucket中的指纹全部比较完。

步骤十一、将当前指纹仓库S-bucket中没有被标记为重复指纹的指纹保存到指纹仓库 N-bucket中;

指纹仓库N-bucket位于内存,并初始为空。

步骤十二、输出当前S-bucket中的指纹查询结果并删除。

当前S-bucket中的指纹均为标记了重复的指纹。

步骤十三、判断当前指纹仓库N-bucket是否达到满态,如果是,进入步骤十四,否则返 回步骤五;

步骤十四、判断局部缓存L-cache是否达到满态,如果是,按照LRU算法在缓存L-cache 中选择出要被替换的指纹仓库放入G-cache中,将当前指纹仓库N-bucket加入L-cache,进入 步骤十五;否则,将N-bucket直接加入L-cache;进入步骤十六。

步骤十五、判断G-cache是否满足M个bucket,如果是按照LRU算法,在G-cache中选 出一个引用次数最少的指纹仓库放入硬盘中,并将L-cache中替换出的指纹仓库加入G-cache; 否则,直接将L-cache中替换出的指纹仓库加入G-cache;

步骤十六、检测当前备份任务每个指纹仓库中的所有指纹是否均已完成重删过程,如果 是,进入步骤十七,否则,将当前备份任务每个指纹仓库中的剩余指纹插入C-bucket,返回 步骤六。

步骤十七、选择下一个备份任务作为当前备份任务,返回步骤五,直至所有备份任务都 完成重复数据删除。

本发明的优点在于:

1、一种面向备份任务的重复数据删除方法,解决了指纹查询瓶颈问题。

2、一种面向备份任务的重复数据删除方法,在能够充分利用备份过程中的数据局部性, 缩小查重范围,提高重删效率。

3、一种面向备份任务的重复数据删除方法,会在获得较高重删比的同时,保持较高的吞 吐率。

附图说明

图1为本发明一种面向备份任务的重复数据删除方法流程图;

图2为对当前指纹仓库S-bucket中每一个指纹查重方法流程图。

具体实施方式

下面将结合附图对本发明作进一步的详细说明。

本发明针对数据中心负载任务的尺寸和变化程度,提出了一种面向备份任务的重复数据 删除方法。

算法涉及的重要概念和定义:

指纹的引用次数指在算法运行过程与运行历史中,该指纹重复的次数减一。指纹仓库的 引用次数指该指纹仓库中每个指纹的引用次数之和。

根据bucket在算法中起到的不同作用,bucket可以分为C-bucket,S-bucket,N-bucket 和B-bucket。C-bucket是用于存储新产生指纹的仓库,同一时间只存在一个C-bucket,C-bucket 中的指纹是尚未经过查重过程的指纹;S-bucket是用于进行指纹查重的仓库,同一时间只存 在一个S-bucket,S-bucket中的指纹需要经过查重过程;N-bucket是准备加入于缓存 (L-cache/G-cache)中的指纹仓库,已经完成查重过程,尚未写入外存,同一时间只存在一个 N-bucket。

缓存(L-cache/G-cache)是内存中一定数量指纹仓库的集合。

算法的输入是由多个指纹组成的指纹序列,输出是输入指纹的查询结果是否重复。

如图1所示,具体步骤如下:

步骤一、对硬盘的备份任务进行划分,每个备份任务均有N个指纹仓库bucket组成;

指纹仓库bucket是数据块指纹的组织单位,指纹(fingerprint)是经过哈希(Hash)算法 计算之后得到的固定长度的字符串。每个bucket的数据结构均是一个散列表(Hashtable), 具有指纹的插入与查询功能。创建指纹仓库的过程就是创建散列表的过程。每个创建的bucket 根据插入指纹的数量,分为两种状态,满态和非满态。满态表示bucket中已经插入了106个 指纹,非满态则表示bucket中的指纹数量少于106

指纹是经过哈希算法计算后得到的固定长度的字符串;指纹组成指纹仓库bucket;每个 指纹仓库bucket的大小为:1≤bucket≤106;N为整数。

依次选取每个备份任务作为当前备份任务;初始值为第一个备份任务;令当前备份任务 的N个指纹仓库bucket设为:bucket1,bucket2,...,bucketj,...,bucketN;每个指纹仓库bucketj中 的所有指纹集合设为Fj={fj1,fj2,fj3,...,fjn},n为整数。

步骤二、对硬盘上完成了全部查重过程的指纹仓库,依次进行标记,并放入集合 B-bucket;

B-bucket={B-bucket1,B-bucket2,...B-bucketi,...B-bucketk};k为硬盘上完成了全部查 重过程的指纹仓库的总数,i,k均为整数。集合B-bucket中每个元素B-bucketi中包含n条指 纹;n的数量为106个。B-bucket是该备份任务本次执行或历史执行中已经完成了全部查重 过程,并写入外存的指纹仓库。

步骤三、在内存中建立局部缓存L-cache和全局缓存G-cache,初始设置两个缓存为空。

两个缓存的容量均为20个bucket。

步骤四、判断集合B-bucket中的总数k是否小于全局缓存G-cache的容量M,如果是, 则将B-bucket中的元素依次放入全局缓存G-cache;否则,比较B-bucket中元素的引用次数, 按引用次数从大到小排列,取前M个元素将加入G-cache。

如果硬盘所有的B-bucket总数k小于20,则将其依次放入全局缓存G-cache。否则, 按照所有B-bucket的引用次数,取最大20个值的B-bucket按照缓存更新算法加入G-cache。

步骤五、检验内存中是否存在指纹仓库C-bucket,如果不存在,则创建一个空的指纹仓 库C-bucket;否则,将当前备份任务的指纹按顺序依照散列表插入算法插入C-bucket;

对于每个备份任务中的指纹,算法将检测是否存在指纹仓库C-bucket。如果不存在,则 创建一个新的C-bucket。

步骤六、判断当前存储指纹仓库C-bucket是否处于满态,如果是,更新为指纹仓库 S-bucket,进入步骤七,否则,将指纹按照散列表插入算法继续插入C-bucket。

当前备份任务的每个指纹仓库中的指纹被送入指纹仓库C-bucket中,达到106个后; C-bucket达到满态,更新为指纹仓库S-bucket;指纹仓库C--bucket中指纹与指纹仓库S-bucket 中指纹相同,均设为f1,f2,...,fp,...fq;q为106。该指纹仓库中的剩余指纹再次等待下一个循 环;如果当前指纹仓库中的剩余指纹数量不够106个时,直接更新为指纹仓库S-bucket;

步骤七、遍历当前指纹仓库S-bucket中所有指纹,按字母和数字序找出并记录最大指纹 fmax与最小指纹fmin

步骤八、依次遍历集合B-bucket中每个元素B-bucketi的n条指纹,寻找当前元素中的最 大指纹fimax与fmax进行比较;寻找当前元素中的最小指纹fimin与fmin进行比较;当fimax=fmax或fimin=fmin,则将指纹fimax所在的元素B-bucketm加入L-cache;或将指纹fimin所在的元素 B-bucketn加入L-cache。

B-bucketm∈B-bucket;B-bucketn∈B-bucket;

如果fimax=fmax和fimin=fmin同时相等,则B-bucketm与B-bucketn相同;否则不同; L-cache的元素为0个、1个、2个……或者k个。

步骤九、判断局部缓存L-cache的元素个数是否达到M,如果是,按照LRU算法在缓存 L-cache中选择出要被替换的指纹仓库加入G-cache,将当前指纹仓库B-bucketi加入L-cache, 进入步骤十五;否则,将B-bucketi直接加入L-cache;

步骤十、遍历当前指纹仓库S-bucket中所有指纹,对每一个指纹fp在局部缓存L-cache 和全局缓存G-cache中进行查询并标记。

遍历L-cache中所有的指纹仓库,判断指纹仓库中是否存在fp,如果存在,则中止查询, 并标记当前S-bucket中指纹fp为重复指纹;否则,继续查询直到L-cache中所有的指纹仓库 均查询结束为止;

如果L-cache所有的指纹仓库中均不存在指纹fp,则遍历全局缓存G-cache中所有的指 纹仓库;如果全局缓存G-cache的某个指纹仓库存在指纹fp,则中止查询,并标记当前指纹fp为重复指纹;否则,继续查询直到G-cache中所有的指纹仓库均查询结束为止。

如图2所示,具体步骤为:

步骤1001、依次选取指纹仓库S-bucket中的单个指纹fp

步骤1002、遍历L-cache中所有的指纹仓库,判断是否存fp,如果存在,则中止查询, 并标记当前S-bucket中指纹fp为重复指纹;进入步骤1006;否则,继续查询L-cache所有的 指纹仓库。

步骤1003、如果L-cache所有的指纹仓库中均不存在指纹fp,则遍历全局缓存G-cache 中所有的指纹仓库;

步骤1004、判断全局缓存G-cache的某个指纹仓库是否存在指纹fp,如果是则中止查询, 并标记当前指纹fp为重复指纹;进入步骤1006;否则,继续查询G-cache中所有的指纹仓库。

步骤1005、如果G-cache中所有的指纹仓库均不存在指纹fp,则查询结束。

步骤1006、选取指纹仓库S-bucket中的下一个指纹,重复步骤1002,直至将指纹仓库 S-bucket中的指纹全部比较完。

步骤十一、将当前指纹仓库S-bucket中没有被标记为重复指纹的指纹保存到指纹仓库 N-bucket中;

指纹仓库N-bucket位于内存,并初始为空。

步骤十二、输出当前S-bucket中的指纹查询结果并删除。

当前S-bucket中的指纹均为标记了重复的指纹。

步骤十三、判断当前指纹仓库N-bucket是否达到满态,如果是,进入步骤十四,否则返 回步骤五;

步骤十四、判断局部缓存L-cache是否满足M个bucket,如果是,按照LRU算法在缓存 L-cache中选择出要被替换的指纹仓库放入G-cache中,将当前指纹仓库N-bucket加入 L-cache。进入步骤十五;否则,将N-bucket直接加入L-cache;进入步骤十六。

步骤十五、判断G-cache是否满足M个bucket,如果是按照LRU算法,在G-cache中选 出一个引用次数最少的指纹仓库放入硬盘中,并将L-cache中替换出的指纹仓库加入G-cache; 否则,直接将L-cache中替换出的指纹仓库加入G-cache;

步骤十六、检测当前备份任务每个指纹仓库中的所有指纹是否均已完成重删过程,如果 是,进入步骤十七,否则,将当前备份任务每个指纹仓库中的剩余指纹插入C-bucket,返回 步骤六。

步骤十七、选择下一个备份任务作为当前备份任务,返回步骤五,直至所有备份任务都 完成重复数据删除。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号