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

文档序号:16151462发布日期:2018-12-05 17:44阅读:161来源:国知局
本发明属于数据备份存储领域,描述了一种面向备份任务的重复数据删除方法。
背景技术
::随着数据中心的能源消耗问题越来越受到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,返回步骤六。步骤十七、选择下一个备份任务作为当前备份任务,返回步骤五,直至所有备份任务都完成重复数据删除。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1