首页 / 专利库 / 资料储存系统 / 根哈希 / 一种基于Merkle Tree变形算法的去重方法及装置

一种基于Merkle Tree变形算法的去重方法及装置

阅读:428发布:2020-05-13

专利汇可以提供一种基于Merkle Tree变形算法的去重方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 实施例 提供一种基于Merkle Tree 变形 算法 的去重方法及装置,包括:对第一数据进行分 块 并计算每一个分块的哈希值,每一个分块设置引用计数;将第一分块的哈希值和第一哈希子树与预先建立好的第一哈希树进行对比:若第一分块的哈希值、内容和第一哈希树中的第一哈希值、内容相同,且第一哈希子树的根 节点 与第一哈希树中的第二哈希值相同时,则每一个分块的引用计数加1;若第一哈希子树的根节点与第一哈希树中的第二哈希值不同时,则将第一分块的引用计数加1,并将第一分块删除,得到第二数据,对第二数据执行上述操作,直到第二数据为最后一个分块时结束。本发明提供的实施例在保证去重率的前提下,可以提高去重效率,减少去重时间。,下面是一种基于Merkle Tree变形算法的去重方法及装置专利的具体信息内容。

1.一种基于Merkle Tree变形算法的去重方法,其特征在于,包括:
S1:对第一数据进行分并计算每一个分块的哈希值,每一个分块设置引用计数;
S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比,还包括:
若所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同,则所述第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括数据读取过程,所述数据读取过程具体为:
获取待读取数据的至少一逻辑地址;
通过预先建立的对象索引,依据获取到的所述至少一逻辑地址,确定所述至少一逻辑地址对应的待读取分块;
读取所述待读取分块中的数据内容。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括数据回收过程,具体为:当每个块的引用计数减少到0时,所述块占用的空间被释放。
5.一种基于Merkle Tree变形算法的去重装置,其特征在于,包括:
第一分块模块,用于对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
第一处理模块,用于取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
第一判断模块,用于将第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
循环模块,用于对所述第二数据重复所述第一处理模块和所述第一判断模块执行的步骤,直到所述第二数据为最后一个分块时结束。
6.根据权利要求5所述的装置,其特征在于,所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比,还包括:
若所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同,则所述第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。
7.根据权利要求5所述的装置,其特征在于,所述装置还包括数据读取单元,所述数据读取单元具体为:
获取模块,用于获取待读取数据的至少一逻辑地址;
查找模块,用于通过预先建立的对象索引,依据获取到的所述至少一逻辑地址,确定所述至少一逻辑地址对应的待读取分块;
读取模块,用于读取所述待读取分块中的数据内容。
8.根据权利要求5所述的装置,其特征在于,所述装置还包括数据回收单元,具体为:当每个块的引用计数减少到0时,所述块占用的空间被释放。
9.一种计算机设备,其特征在于,包括存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至4任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至4任一所述的方法。

说明书全文

一种基于Merkle Tree变形算法的去重方法及装置

技术领域

[0001] 本发明涉及数据处理技术领域,具体涉及一种基于Merkle Tree变形算法的去重方法及装置。

背景技术

[0002] 去重技术,也成为重复数据删除技术,极大地提高了基于磁盘数据保护的价值,也极大地改进了基于广域网的远程和分支办公室备份整合和灾难恢复策略。该技术标识出重复数据,消除冗余,从而减少了传输和存储的数据量。
[0003] 常见的分类方式为,文件级别重复数据删除,级别的重复数据删除。
[0004] 文件级的重复数据删除技术通过将文件的属性作为索引,对比将要备份或存档的文件与已经存在的文件。如果这个文件是唯一的,它将被存储起来并更新它的索引;如果已经存在,仅有一个指向已有文件的指针被存储。结果是,只有一个文件实例被保存,而随后的副本都由一个指向实际文件的标签所替代。
[0005] 块级别的重复数据删除,数据被拆分为片段——数据块或数据片,对这些文件块进行冗余检查,将其与已经存在的信息进行比对。确定冗余数据最常用的方式是使用哈希等算法为数据指定一个唯一标识,生成一个唯一ID或数据块的“指纹”。将这个唯一的标识与一个中央索引服务上的标识进行对比。如果ID已经存在,说明对应的数据块已经被处理过并已经存储。因此,只需要保存一个指向先前已存储数据的指针。如果这个ID没有重复,那么这个数据块是唯一的。将该ID加到中央索引中,并存储这唯一的数据块。
[0006] 传统文件级的方法的缺点在于写入效率和去重率都比较低。
[0007] 文件级的方法中,文件中的任何改变都将引起整个文件的重新保存。一个文件,可能会进行一些如标题页变换这样简单的修改,以反映新的报告人或数据,这将引起整个文件再一次保存。与之相比,块级别的重复数据检查可以只保存新版本相对于旧版本进行了修改的数据块。通常文件级的重复数据比例可能是5:1或者不到,而块级别的重复数据删除已被证实为20:1到50:1。
[0008] 传统的块级别的方法中,由于存在的索引表比较大,所以在查找连续的重复数据时,会相对耗时,例如一个1GB的文件,若拆分为4KB的块,则需要256K次计算和查找对应位置
[0009] 基于上述现有技术中存在的文件级的重复数据删除方法的去重率不高,块级别重复数据删除方法存在的耗时比较长的缺陷,如何可以减少消耗的时间还可以提高去重率成为亟待解决的问题。

发明内容

[0010] 针对现有技术中的缺陷,本发明实施例提供了一种基于Merkle Tree变形算法的去重方法及装置。
[0011] 第一方面,本发明实施例提供了一种基于Merkle Tree变形算法的去重方法,包括:
[0012] S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0013] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0014] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0015] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0016] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0017] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0018] 第二方面,本发明实施例提供一种基于Merkle Tree变形算法的去重装置,包括:
[0019] 第一分块模块,用于对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0020] 第一处理模块,用于取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0021] 第一判断模块,用于将第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0022] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0023] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0024] 循环模块,用于对所述第二数据重复上述的步骤,直到所述第二数据为最后一个分块时结束。
[0025] 第三方面,本发明实施例提供一种计算机设备,包括:存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:
[0026] S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0027] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0028] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0029] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0030] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0031] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0032] 第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时用于存储如前所述的计算机程序的方法。
[0033] 本发明实施例提供的基于Merkle Tree变形算法的去重方法及装置,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,根据判断的结果对待写入的数据进行去重。采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。附图说明
[0034] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0035] 图1为本发明实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图;
[0036] 图2为本发明又一实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图;
[0037] 图3为本发明实施例提供的预先在系统中已经写入的数据建立的第一哈希树;
[0038] 图4为本发明实施例提供的在分块的哈希值相同,分块中的内容不同情况下的第一哈希树;
[0039] 图5为本发明实施例提供的第一数据建立的第一哈希子树;
[0040] 图6为本发明又一实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图;
[0041] 图7为本发明再一实施例提供的基于Merkle Tree变形算法的去重技术的装置结构示意图;
[0042] 图8为本发明再一实施例提供的基于Merkle Tree变形算法的去重技术的装置结构示意图。

具体实施方式

[0043] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0044] 图1为本发明实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图,如图1所示,所述方法包括:
[0045] S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0046] 本发明实施例提供的基于Merkle Tree变形算法的去重技术方法可应用于分布式存储的软件的存储过程中,并向外提供全局一致的去重服务,例如,可应用于对硬盘的写入操作、读取操作和数据回收操作。
[0047] 在计算机的系统硬盘中已经存储了一个文件,当用户要将一个文件写入到硬盘中,系统接收到这个需求时,系统要判断待写入的文件是否和已经存储的文件相同,就会把这个待写入硬盘的文件转化成一段待写入的数据IO,也就是数据交互的接口,其中,所述数据IO携带着物理地址(偏移地址)、数据长度、操作类型、要写入的内容或者是要读取的内存空间、哈希值等,其中,在系统将待写入的文件转化成待写入的数据IO的时候,系统就会给待写入的数据IO的分配物理地址。
[0048] 举例来说:在硬盘里已经存储了一个文件,而这个文件中划分的每一个块都有自己的物理地址,对于一段待写入的数据IO,系统就自动给这段数据IO提供物理地址。
[0049] 系统会将这一段数据IO以一定的空间大小划分成相同大小的块,例如4K、8K或4K/8K的整数倍都可以,本发明实施例以4K为例做详细介绍。
[0050] 当系统将待写入的数据IO以4K大小进行分块后,就会计算出每一个分块的哈希值,同时系统会给每一个分块设定一个引用计数,在写入硬盘之前设定每一个分块的引用计数为0,每一分块被引用一次,引用计数加1,也就是说,引用计数用来表示这一分块被引用的次数。例如,对于一个块数据123,存储在硬盘第100个扇区,初始设定引用计数为0,而这个块数据在C盘中被引用一次时,这个块的引用计数就加1,又被D盘引用时,这个块的引用计数就再加1,变成了2。
[0051] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0052] 从上述步骤中,对第一数据进行分块,并计算每个分块的哈希值,提取出第一个分块的哈希值,利用Merkle Tree变形算法对所述第一数据的每个分块的哈希值,建立所述第一数据的每个分块的哈希值的第一哈希子树。
[0053] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0054] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0055] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0056] 在前面的实施例中,在硬盘中预先存储了一些文件,首先要利用MerkleTree变形算法建立已存储的文件的哈希树,即为预先建立的第一哈希树,然后用第一分块的哈希值和建立好的第一哈希子树与预先建立好的第一哈希树进行对比。
[0057] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0058] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0059] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0060] 在若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据的情况下,得到了第二数据,重新去执行S2的步骤,从第二数据中取出第一分块的哈希值,并建立所述第二数据的每个分块的哈希值的第二哈希子树;再执行S3的步骤,将第二数据中所述第一分块的哈希值和所述第二哈希子树与预先建立好的第一哈希树进行对比:
[0061] 若第二数据中的所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第二哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则第二数据中的每一个分块的所述引用计数加1;
[0062] 若所述第二数据中的第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第二哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第二数据中的第一分块的引用计数加1,并将所述第二数据中的第一分块删除,得到第三数据,按照上述步骤循环执行,直到最后的块数据为所述第一数据的最后一个分块时结束。
[0063] 本发明实施例提供的基于Merkle Tree变形算法的去重方法,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据,直到所述第二数据为最后一个分块时结束。采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0064] 可选地,所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比,还包括:
[0065] 若所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同,则所述第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。
[0066] 在上述实施例的基础上,在所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比时,还有一种情况是,当所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同时,将第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。在这种情况下,不需要对第一哈希子树的根节点与预先建立好的第一哈希树中的哈希值进行比较。
[0067] 还有一种可能的情况,如果第一分块的哈希值在第一哈希树中没有找到相同的哈希值,则从系统中重新申请一个内存空间,第一分块的引用计数加1,并将第一分块的内容写入到新申请的内存空间中。
[0068] 本发明实施例提供的基于Merkle Tree变形算法的去重方法,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,根据不同的情况执行不同操作,可以适用于多种情况,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0069] 对于本发明的实施例,下面采用一个写入过程的具体实施例来详细介绍。
[0070] 图2为本发明又一实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图;
[0071] 第一步:对需要写入的数据分成若干个块;
[0072] 系统会将这一段数据IO以一定的空间大小划分成相同大小的块,例如4K、8K或4K/8K的整数倍都可以,本发明实施例以4K为例做详细介绍。
[0073] 第二步:获取每一个分块的哈希值和引用计数,具体地,计算出每一个分块的哈希值,同时为每一个分块设定一引用计数;
[0074] 当系统将待写入的数据IO以4K大小进行分块后,就会计算出每一个分块的哈希值,同时系统会给每一个分块设定一个引用计数,在写入硬盘之前设定每一个分块的引用计数为0,每一分块被引用一次,引用计数加1,也就是说,引用计数用来表示这一分块被引用的次数。例如,对于一个块数据123,存储在硬盘第100个扇区,初始设定引用计数为0,而这个块数据在C盘中被引用一次时,这个块的引用计数就加1,又被D盘引用时,这个块的引用计数就再加1,变成了2。
[0075] 第三步:取第一个分块的哈希值,在预先建立的第一哈希树中寻找第一个分块的哈希值,如果找到相同的哈希值,则对比第一分块中的内容和第一哈希树中相同哈希值对应的叶节点中的内容,若两者的内容相同,则第一分块的引用计数加1,并执行第四步的操作;若两者的内容不同,则系统将第一分块中的内容增加到第一哈希树中相同哈希值对应的叶节点的内容的后面的存储空间中,并且两个分块共同构成了一个对象列表,共同指向同一个哈希值。
[0076] 如果在第一哈希树中没有找到相同的哈希值,则从系统中重新申请一个内存空间,第一分块的引用计数加1,并将第一分块的内容写入到新申请的内存空间中。
[0077] 第四步:将第一分块及剩余的所有分块的哈希值建立第一哈希子树,在预先建立的全局哈希树中查找第一哈希子树的根节点的哈希值,若找到相同的哈希值,则剩余的每个分块的引用计数都加1;
[0078] 若没有找到相同的哈希值,则系统会将第一个分块删除,取第二个分块的哈希值重复上述第三步的操作。
[0079] 图3为本发明实施例提供的预先在系统中已经写入的数据建立的第一哈希树;
[0080] 图4为本发明实施例提供的在分块的哈希值相同,分块中的内容不同情况下的第一哈希树;
[0081] 图5为本发明实施例提供的第一数据建立的第一哈希子树;
[0082] 结合图3-图5,举一个具体的例子来具体详细介绍本发明实施例的方案。
[0083] 首先在系统中,对一个文件进行分块,如L1、L2、L3、L4,计算每一个块的哈希值,采用Merkle Tree变形算法,将每个块的哈希值建立成一个MerkleTree的哈希树,在本发明实施例中称为预先建立的第一哈希树,例如图3中所示的即为预先建立的第一哈希树。
[0084] 如图5所示,当用户需要写入一段新的数据时,对这一段数据以4K的大小进行分块,例如L30、L40,并计算每一个块的哈希值hash(L30)和hash(L40),同时设定每一个分块的引用计数为0。
[0085] 取第一个分块的哈希值hash(L30)与第一哈希树中的各个哈希值进行比较,如果在第一哈希树中找到hash(L3)的值与第一个分块的哈希值hash(L30)相同,则就比较L3中的内容和L30中的内容是否相同,如果L3中的内容和L30中的内容相同,则将待写入数据IO的第一分块L30的引用计数加1,则利用第一分块L30的哈希值hash(L30)和第二分块L40的哈希值hash(L40)建立第一哈希子树,比较第一哈希子树的根节点的哈希值Hash60和预先建立的全局哈希树中的哈希值,如果在预先建立的第一哈希树中有和第一哈希子树的根节点的哈希值Hash60相同的哈希值Hash6,则将待写入数据中剩余的分块L40的引用计数加1;
[0086] 如果在预先建立的全局哈希树中没有和第一哈希子树的根节点的哈希值Hash60相同的哈希值,则将待写入数据的第一分块L30删除,取第二分块L40的哈希值与建立的第二哈希子树与预先建立的哈希树进行比较,重复上述的步骤,直到剩余的分块被取完结束。
[0087] 如果L3中的内容和L30中的内容不同,则待写入数据IO的第一分块L30的引用计数加1,并且将L30的内容增加第一哈希树的L3内容的后面,两个分块构成一个对象列表,指向同一个哈希值,如图4所示。
[0088] 如果在第一哈希树中没有找到与第一个分块的哈希值hash(L30)相同的哈希值,则系统就会申请一个新的存储空间,将第一分块L30的引用计数加1,并将第一分块L30的内容写入到新的存储空间中。
[0089] 本发明实施例提供的基于Merkle Tree变形算法的去重方法,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,根据不同的情况执行不同操作,可以适用于多种情况,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0090] 图6为本发明又一实施例提供的基于Merkle Tree变形算法的去重技术的方法流程示意图,如图6所示,所述方法还包括数据读取过程,所述数据读取过程具体为:
[0091] S21:获取待读取数据的至少一逻辑地址;
[0092] S22:通过预先建立的对象索引,依据获取到的所述至少一逻辑地址,确定所述至少一逻辑地址对应的待读取分块;
[0093] S23:读取所述待读取分块中的数据内容。
[0094] 在上述实施例的基础上,基于Merkle Tree变形算法的去重技术的方法还可以适用于数据读取过程中,具体的实现步骤如下:
[0095] 在系统实现读操作的时候,在此之前是有数据写入到硬盘里,对于写入硬盘的每一个块,在第一个块被写入到硬盘的时候就已经将每一个块的逻辑地址和这个块的对应关系构成了index,并保存到系统中,对于同一个块,可能被多个逻辑地址引用,也就是说,index中逻辑地址和块的关系可以是多对一的。
[0096] 用户需要读一个文件,就点击某一个文件,系统就获取到了读文件的指令,然后分析出读指令中包含的多个逻辑地址,对于每一个逻辑地址,系统会根据预先存储的index及逻辑地址,找到与该逻辑地址相对应的块,而每一个块都包含有各自的物理地址和内容,系统在硬盘中找到了块,也就是块的物理地址,从而可以从物理地址中读取出内容,然后在将这些内容返回给系统。例如,对于多个逻辑地址,需要从第一个逻辑地址来说,系统就根据第一个逻辑地址和index中逻辑地址和块的对应关系查询到与第一个逻辑地址相对应的第一个块,而每一个块中包含有所记载的内容,在系统查询到第一个块时,就可以对第一个块中包含的内容进行读取。然后再对剩余的每一个逻辑地址都执行上述的操作,将所读取的内容综合到一起返回到系统。
[0097] 举例说明:首先预设一个文件,并且将该文件划分成3个块,第一个块的内容为a,第一个块所在硬盘的逻辑地址为0010,第二个块的内容为b,第二个块在硬盘的逻辑地址为0011,第三个块的内容为c,第三个块在磁盘的逻辑地址为0012,每一个块与每一块的逻辑地址的对应关系构成了index,并存储在系统中。
[0098] 用户要读磁盘的某一个文件,就点击这个文件,系统就会获取到这个读文件的指令,解析出至少一个逻辑地址,例如0010、0011、0012,系统会根据每一个逻辑地址进行查询,对于第一个逻辑地址0010,系统先获取了第一个逻辑地址0011,就会通过系统中存储的index中来查找,找到与0011相对应的第一个块,然后在硬盘的中找到第一个快,也就是第一个块所在的物理地址,然后从物理地址中读取出第一个块中包含的内容a,对第二个逻辑地址和第三个逻辑地址也采用上述的方法进行读取,并且将读取出来的的内容a、b和c一并返回给系统。
[0099] 本发明实施例提供的基于Merkle Tree变形算法的去重方法,在数据写入和数据读取过程中,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0100] 可选地,所述方法还包括数据回收过程,具体为:当每个块的引用计数减少到0时,所述块占用的空间被释放。
[0101] 在上述各个实施例的基础上,本发明实施例还包括数据回收机构,主要是在去重的过程中,随着去重次数的增多,硬盘中的存储空间被有数据内容的块占用,再有新的数据内容想要写入的时候,硬盘也没有空间可以写入,所以要将硬盘中用户不在需要的内存空间进行释放。
[0102] 当用户删除某一个数据卷时,数据卷相当于一个盘,例如,用户想要清空C盘的空间,系统就需要将C盘中的所有的块在其他盘的引用都要解除,当每一个块的引用计数都减小到0的时候,所有的块就被系统回收了,这时,C盘也就清空,如果有新的数据可以重新写入。
[0103] 当用户删除某一个文件时,例如一个文件存在C盘、D盘和E盘中,那么这个文件中每一个块的引用计数就是3,当用户要进行删除时,先将E盘中存储的删除,那么这个文件中的每一个块的引用计数减1,变成2,再将D盘中存储的删除,那么这个文件中的每一个块的引用计数减1,变成1,再将C盘中存储的删除,那么这个文件中的每一个块的引用计数减1,变成0,而这个时候所要删除的这个文件的每个块的引用计数变成0,所有的块都被系统回收了,而这个文件在硬盘的占用的内存空间也被系统释放,用户有新的内容可以再次写入。
[0104] 本发明实施例提供的基于Merkle Tree变形算法的去重方法,在数据写入、数据读取和数据回收的过程中,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0105] 图7为本发明再一实施例提供的基于Merkle Tree变形算法的去重技术的装置结构示意图,如图7所示,所述装置包括第一分块模块10、第一处理模块20、第一判断模块30和循环模块40,其中:
[0106] 第一分块模块10用于对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0107] 第一处理模块20用于取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0108] 第一判断模块30用于将第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0109] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0110] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0111] 循环模块40用于对所述第二数据重复上述的步骤,直到所述第二数据为最后一个分块时结束。
[0112] 具体地,第一分块模块10对待写入的数据即第一数据进行分块,并计算每一个分块的哈希值,每一个分块设置引用计数;
[0113] 通过第一处理模块20取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0114] 第一判断模块30将第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0115] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0116] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0117] 循环模块40对所述第二数据重复上述的步骤,直到所述第二数据为最后一个分块时结束。
[0118] 本发明实施例提供的装置,适用于上述所述的方法,其功能具体可参照上述方法实施例,此处不再赘述。
[0119] 本发明实施例提供的基于Merkle Tree变形算法的去重装置,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据,直到所述第二数据为最后一个分块时结束。采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0120] 可选地,所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比,还包括:
[0121] 若所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同,则所述第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。
[0122] 在上述实施例的基础上,在所述将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比时,还有一种情况是,当所述第一分块的哈希值与所述预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容不同时,将第一分块的所述引用计数加1,并且将所述第一分块的内容加在所述第一哈希值相同的块的内容的后面。在这种情况下,不需要在比较第一哈希子树的根节点与预先建立好的第一哈希树中的哈希值进行比较。
[0123] 还有一种可能的情况,如果第一分块的哈希值在第一哈希树中没有找到相同的哈希值,则从系统中重新申请一个内存空间,第一分块的引用计数加1,并将第一分块的内容写入到新申请的内存空间中。
[0124] 本发明实施例提供的基于Merkle Tree变形算法的去重装置,通过去待写入的数据进行分块,计算哈希值,基于Merkle Tree变形算法建立哈希树,与已存储在系统中的哈希树进行对比,根据不同的情况执行不同操作,可以适用于多种情况,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0125] 可选地,所述装置还包括数据读取单元,所述数据读取单元具体为:
[0126] 获取模块,用于获取待读取数据的至少一逻辑地址;
[0127] 查找模块,用于通过预先建立的对象索引,依据获取到的所述至少一逻辑地址,确定所述至少一逻辑地址对应的待读取分块;
[0128] 读取模块,用于读取所述待读取分块中的数据内容。
[0129] 在上述实施例的基础上,基于Merkle Tree变形算法的去重技术的装置还可以适用于数据读取过程中,具体的实现步骤如下:
[0130] 在系统实现读操作的时候,在此之前是有数据写入到硬盘里,对于写入硬盘的每一个块,在第一个块被写入到硬盘的时候就已经将每一个块的逻辑地址和这个块的对应关系构成了index,并保存到系统中,对于同一个块,可能被多个逻辑地址引用,也就是说,index中逻辑地址和块的关系可以是多对一的。
[0131] 用户需要读一个文件,就点击某一个文件,获取模块就获取到了读文件的指令,然后分析出读指令中包含的多个逻辑地址,对于每一个逻辑地址,查找模块会根据预先存储的index及逻辑地址,找到与该逻辑地址相对应的块,而每一个块都包含有各自的物理地址和内容,查找模块在硬盘中找到了块,也就是块的物理地址,从而读取模块从物理地址中读取出内容,然后在将这些内容返回给系统。例如,对于多个逻辑地址,需要从第一个逻辑地址来说,查找模块就根据第一个逻辑地址和index中逻辑地址和块的对应关系查询到与第一个逻辑地址相对应的第一个块,而每一个块中包含有所记载的内容,在查找模块查询到第一个块时,读取模块就可以对第一个块中包含的内容进行读取。然后再对剩余的每一个逻辑地址都执行上述的操作,将所读取的内容综合到一起返回到系统。
[0132] 本发明实施例提供的基于Merkle Tree变形算法的去重装置,在数据写入和数据读取过程中,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除方法及装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0133] 可选地,所述装置还包括数据回收单元,具体为:当每个块的引用计数减少到0时,所述块占用的空间被释放。
[0134] 在上述各个实施例的基础上,本发明实施例还包括数据回收机构,主要是在去重的过程中,随着去重次数的增多,硬盘中的存储空间被有数据内容的块占用,再有新的数据内容想要写入的时候,硬盘也没有空间可以写入,所以要将硬盘中用户不在需要的内存空间进行释放。
[0135] 本发明实施例提供的基于Merkle Tree变形算法的去重装置,在数据写入数据读取和数据回收的过程中,采用本发明实施例利用Merkle Tree的特性可以实现多个连续数据块的快速检测,本发明实施例提供的重复数据的删除装置在保证去重率的前提下,可以提高去重效率,减少去重时间,使得去重率达到块级别的同时,去重效率接近于文件级。
[0136] 图8为本发明实施例提供的计算机设备的结构框图。参照图8,所述计算机设备,包括:处理器(processor)801、存储器(memory)802和总线803;
[0137] 其中,所述处理器801和所述存储器802通过所述总线803完成相互间的通信;
[0138] 所述处理器801用于调用所述存储器802中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0139] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0140] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0141] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0142] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0143] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0144] 本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0145] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0146] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0147] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0148] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0149] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0150] 本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:S1:对第一数据进行分块并计算每一个分块的哈希值,每一个分块设置引用计数;
[0151] S2:取出第一分块的哈希值,并建立所述第一数据的每个分块的哈希值的第一哈希子树;
[0152] S3:将所述第一分块的哈希值和所述第一哈希子树与预先建立好的第一哈希树进行对比:
[0153] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值相同,则所述每一个分块的所述引用计数加1;
[0154] 若所述第一分块的哈希值与预先建立好的第一哈希树中的第一哈希值相同,且所述第一分块的内容和所述第一哈希值相同的块的内容相同,且所述第一哈希子树的根节点与所述第一哈希树中的第二哈希值不同,则将所述第一分块的引用计数加1,并将所述第一分块删除,得到第二数据;
[0155] S4:对所述第二数据重复S2-S3的步骤,直到所述第二数据为最后一个分块时结束。
[0156] 本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0157] 以上所描述的显示装置的测试设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0158] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0159] 以上所描述的装置以及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈