一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据重删方法、装置、设备及存储介质与流程

2022-11-14 01:40:01 来源:中国专利 TAG:


1.本发明涉及数据重删技术领域,特别涉及一种数据重删方法、装置、设备及存储介质。


背景技术:

2.当前,分布式存储系统可按需扩展容量,其横向扩展存储的特点被用于各种计算领域,为了更有效地存储海量数据,重复数据删除等数据缩减技术成为了研究重点方向。减少数据量是节省分布式存储系统总成本的重要方法,然而,存储和管理指数型增长的海量数据是一项挑战,减少数据存储量的解决方案之一是重复数据删除,重删可以删除存储系统中集群节点上的冗余数据。尽管如此,现有技术中,由于以下根本原因,将传统的重复数据删除设计应用于分布式存储系统并非易事。
3.由于分布式存储系统自身的元数据管理和重删的元数据处理过程,在现有软件堆栈上应用重复数据删除复杂度非常高。在典型的重删除技术中,通常情况下,将数据流或者文件根据某种方式进行切片存储,每个分片数据块具有相同的大小,然后,以数据块id(标识)为单位进行hash(哈希)计算,其hash值称之为fingerprint(fp)指纹信息,通过指纹比对,以此找到相同的数据块进行删除。在分布式存储系统设计重复数据删除面临如下问题:
4.首先,基于分布式存储系统的横向扩展性,需要考虑并管理指纹索引表的可扩展性;在分布式存储系统中,需要采用副本或纠删码等冗余方案来实现高可用性,以应对底层存储设备的故障,使用传统的数据重删方法,在分布式存储系统中会影响冗余副本数据的完整性。
5.其次,确保重删的指纹信息与现有存储的元数据之间的兼容性问题;重删数据的指纹信息存储将面临挑战,如果不结合分布式存储元数据服务进行保存,对指纹表的索引性能将会很慢并且难以管理。
6.最后,数据重删过程带来的处理对cpu(central processing unit,中央处理器)、内存资源的占用和额外的i/o(input/output)流量会降低存储系统性能。
7.综上,如何提高重删数据效率,解决指纹表无法横向扩展的限制,减少对系统资源的占用和i/o流量放大并兼容分布式存储系统现有功能是目前有待解决的问题。


技术实现要素:

8.有鉴于此,本发明的目的在于提供一种数据重删方法、装置、设备及存储介质,能够提高重删数据效率,解决指纹表无法横向扩展的限制,减少对系统资源的占用和i/o流量放大并兼容分布式存储系统现有功能。其具体方案如下:
9.第一方面,本技术公开了一种数据重删方法,应用于分布式存储系统,包括:
10.当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;
11.根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标
识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;
12.基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。
13.可选的,所述块映射包括所述数据块的偏移范围、所述数据标识、缓存位和脏位。
14.可选的,所述基于所述元数据池与所述块池之间的块映射,包括:
15.判断所述缓存位的状态信息;
16.若所述缓存位的状态信息为true,则所述数据块缓存在所述元数据对象;
17.若所述缓存位的状态信息为false,则所述数据块缓存在所述块对象。
18.可选的,所述基于所述元数据池与所述块池之间的块映射,包括:
19.判断所述脏位的状态信息;
20.若所述脏位的状态信息为true,则判定所述数据块为去重目标;
21.若所述脏位的状态信息为false,则判定所述数据块不是所述去重目标。
22.可选的,所述根据所述目标数据标识确定相应的数据块位置进行数据重删的过程,包括:
23.根据所述元数据信息获取所述元数据对象中的脏元数据对象,并根据所述块映射确定与所述脏元数据对象对应的脏块对象;
24.当所述脏块对象为所述去重目标时,判断所述脏块对象对应的块条目是否已经存在所述块标识;
25.若所述脏块对象对应的块条目已经存在所述块标识,则取消所述块对象的引用,并在所述块对象取消引用完成后,将生成的新块对象发送至所述块池,以便根据所述新块对象生成新块标识;
26.若所述脏块对象对应的块条目不存在所述块标识,则直接将生成的与所述脏块对象对应的新块对象发送至所述块池,以便根据所述新块对象生成新块标识。
27.可选的,所述根据所述目标数据标识确定相应的数据块位置进行数据重删的过程,包括:
28.对所述新块标识进行crush映射计算,以确定出所述新块对象的块位置;
29.判断所述块位置是否存在所述块对象,若所述块位置不存在所述块对象,则将所述块对象的所述引用计数信息中的引用计数为一次的对象进行存储,若所述块位置存在所述块对象,则向当前的所述块对象中添加所述引用计数信息。
30.可选的,所述的数据重删方法,还包括:
31.扩展底层存储的元数据扩展属性字段xattr,并将所述数据标识记录至所述虚拟指纹表中。
32.第二方面,本技术公开了一种数据重删装置,应用于分布式存储系统,包括:
33.数据分块模块,用于当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;
34.对象划分模块,用于根据存储信息将所述数据块分为元数据对象和块对象,并将
所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;
35.数据重删模块,用于基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。
36.第三方面,本技术公开了一种电子设备,所述电子设备包括处理器和存储器;其中,所述存储器用于存储计算机程序,所述计算机程序由所述处理器加载并执行以实现如前所述的数据重删方法。
37.第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中所述计算机程序被处理器执行时实现如前所述的数据重删方法。
38.本技术中,应用于分布式存储系统,当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。可见,基于分布式存储系统将数据块根据存储信息的不同分为元数据对象和块对象,并将元数据对象存储至元数据池,块对象存储至块池进行分层存储管理。由于两个池是根据用途划分的,因此每个池可以根据其不同的特性进行更有效的管理。其次,使用改进的哈希算法,将普通的基于数据块的块标识重新映射到新的基于数据内容的数据标识,去除了传统的指纹索引表不可兼容底层存储系统的限制。此外,通过分层思想将数据指纹先保存在虚拟指纹表中,虚拟指纹表对重复写入的数据块的引用计数进行统计,当引用计数达到预设阈值时才会把虚拟指纹表提交到实际指纹表中进行重删操作,因此,实际指纹表占用内存少,该方法减少了海量数据写入时,指纹表过大对内存资源的占用。
附图说明
39.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
40.图1为本技术公开的一种数据重删方法流程图;
41.图2为本技术公开的一种块标识与数据内容的对应关系示意图;
42.图3为本技术公开的一种基于块标识的分布式哈希映射方法示意图;
43.图4为本技术公开的一种基于数据标识的分布式哈希映射方法示意图;
44.图5为本技术公开的一种元数据池和块池设计示意图;
45.图6为本技术公开的一种虚拟指纹表流程示意图;
46.图7为本技术公开的一种数据重删装置结构示意图;
47.图8为本技术公开的一种电子设备结构图。
具体实施方式
48.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
49.当前,在分布式存储系统设计重复数据删除面临如下问题:首先,使用传统的数据重删方法,在分布式存储系统中会影响冗余副本数据的完整性;其次,基于分布式存储系统中的数据块标识管理指纹索引表时存在无法横向扩展的限制;最后,数据重删过程带来的处理对cpu,内存资源的占用和额外的i/o流量会降低存储系统性能。
50.为此,本技术提供了一种数据重删方案,能够提高重删数据效率,解决指纹表无法横向扩展的限制,减少对系统资源的占用和i/o流量放大并兼容分布式存储系统现有功能。
51.本发明实施例公开了一种数据重删方法,参见图1所示,应用于分布式存储系统,实施例一包括:
52.步骤s11:当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块。
53.本技术实施例中,当监测到存在数据写入请求时,写入的数据会被分成若干个数据块以更有效地检测冗余。当在进行数据重删时,如果判定数据块为去重目标,那么它们当前在存储系统中的位置是相同的,会自动的删除重复数据。
54.步骤s12:根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识。
55.分布式存储系统的高可用性、数据恢复和各种数据管理操作等特性是基于每个对象的。因此,本技术实施例中将所有涉及到的重复数据删除信息定义到一个对象中,则底层分布式存储系统无需额外修改即可处理复杂的存储功能。
56.本技术实施例中,由于对写入数据判断是否重删,写入数据被分为若干数量的数据块,所以若干数量的数据块即为包括元数据对象(metadata)和块对象(chunk)的对象。进一步的,本技术实施例根据存储的对象定义两个池,元数据池存储元数据对象,块池存储块对象。由于这两个池是根据用途划分的,因此每个池可以根据其不同的特性进行更有效的管理。元数据池和块池可以根据其使用情况在复制和纠删码之间分别选择冗余方案,并且每个池可以根据所需的性能放置到不同的存储位置。
57.可以理解的是,数据块的哈希值和块的位置被映射到指纹表中,因此,通过指纹索
引查询新块的哈希值时可以检索数据位置信息。分布式存储系统也是基于哈希算法确定对象(object)的存储位置,其区别在于哈希算法的输入值不同,写入数据进行切片存储后的块(chunk)值是重删方法的输入,即input=hash(chunk),数据块标识(id)是分布式存储系统的输入值,即input=hash(object id)。因此,在传统的重删技术中,存在指纹表索引横向扩展受限问题,重删方法难以与分布存储系统功能兼容,因为分布式存储系统功能无法识别传统技术中重删方法的数据结构。
58.本技术实施例中,元数据对象包含用于重删的元数据,具体的,用于记录所述数据块的块标识以及所述写入数据的元数据信息。数据块的块标识是用户可见的普通对象id,由底层分布式存储系统提供。块对象包含块数据及其引用计数信息,具体的,用于记录所述数据块的数据标识以及所述数据标识的引用计数信息。数据块的数据标识由块的数据内容决定,是利用哈希算法对当前块标识的内容进行计算确定出的标识。例如,块标识为1(object1),hash(1’s data)=k,因此数据标识为k(object k)。
59.由于对象的数据内容和块标识之间没有直接关系,相同的数据内容可能存在于多个存储节点中。在这种情况下,要找到相同的数据内容进行去重,就需要遍历所有的存储节点或者维护同比例的指纹索引表。本技术实施例通过使用改进的哈希算法,将普通的基于块标识重新映射到新的基于数据内容的数据标识,如此一来,结合两种不同的input输入值,根据数据的块标识与其数据内容之间的关系,通过采用这种改进的hash算法机制,可以解决指纹表索引横向扩展受限问题,更快地检索冗余重复数据块。
60.步骤s13:基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。
61.本技术实施例中,将元数据对象映射到chunk是基于其偏移量进行存储的,块映射可以反应元数据对象与块对象之间的关系。其中,块映射包括所述数据块的偏移范围(offset)、所述数据标识(chunk id)、缓存位(cache)和脏位(dirty)。偏移范围和数据标识表示元数据对象和块对象之间的映射信息,缓存位和脏位描述块的状态。如果缓存位的状态信息为true,则该块存储在元数据对象中,否则,存储在块池的块对象中。如果所有块映射条目的缓存位为false,则元数据对象中写入数据的元数据信息的数据部分中没有缓存数据。其次,如果脏位为true,则需要对块进行重删,判定所述数据块为去重目标。
62.本技术实施例中,可以在不引入任何外部组件的情况下进行数据重删,如此一来,可以兼容分布式存储系统功能,为此,本技术实施例通过扩展了底层存储的元数据扩展属性字段(xattr)用以包含重删数据的元数据信息。在进行数据重删时,由后台线程运行进行数据重删。具体的,根据所述元数据信息获取所述元数据对象中的脏元数据对象,并根据所述块映射确定与所述脏元数据对象对应的脏块对象;当所述脏块对象为所述去重目标时,判断所述脏块对象对应的块条目是否已经存在所述块标识;若所述脏块对象对应的块条目已经存在所述块标识,则取消所述块对象的引用,并在所述块对象取消引用完成后,将生成的新块对象发送至所述块池,以便根据所述新块对象生成新块标识;若所述脏块对象对应的块条目不存在所述块标识,则直接将生成的与所述脏块对象对应的新块对象发送至所述块池,以便根据所述新块对象生成新块标识。
63.可以理解的是,在元数据对象中写入数据的元数据信息包括脏元数据对象,相应的,块对象中也包括与脏元数据对应的脏块数据标识。对元数据对象的所有修改或新写入请求都会记录到脏元数据对象中,从脏元数据对象的块映射中找到脏块的数据标识,脏块缓存在脏对象内部,也即脏元数据对象和块对象中与脏数据标识对应的脏块对象。当通过脏位判定出当前的数据块为去重目标时,会检查脏块对象对应的块条目是否已经有块标识。如果它有一个块标识,它会被一些块对象更早地引用。因此,向当前的旧块对象发送取消引用消息并等待其完成,然后,生成一个新块对象并将其发送到块池,同时,根据其内容重新评估新块标识。如果脏块对象没有块标识,则根据脏块对象直接生成新块对象并将其发送到块池。
64.进一步的,生成的新块对象会通过哈希算法放置在底层分布式存储系统中。其中,对所述新块标识进行crush映射计算,以确定出所述新块对象的块位置。crush(controlled replication under scalable hashing)是一种基于哈希的数据分布算法,以数据唯一标识符、当前存储集群的拓扑结构以及数据备份策略作为crush输入,可以随时随地通过计算获取数据所在的底层存储设备位置并直接与其通信,从而避免查表操作,实现去中心化和高度并发。为块标识找到其数据。使用crush算法,客户端可以知道对象在存储底层(即磁盘持久化存储设备介质)中的位置,通过在存储底层散列对象的内容,生成一个新的数据标识。
65.本技术实施例中,如果对块标识的数据内容进行哈希算法后,对得到的数据标识进行crush映射计算后确定的块位置没有对象,则将引用计数=1的对象存储起来;如果该位置已经存储了对象,则向该对象添加引用计数信息。其中,引用计数信息可以包括在哪一个块池(pool id)、块标识(源对象id)、偏移量。进一步的,当块池的信息写结束时,会更新元数据对象的块映射。
66.本技术实施例中,通过分层思想将数据指纹先保存在虚拟指纹表(virtual fingerprint,vfp),vfp表对重复写入的数据块的引用计数进行统计,当引用计数达到预设值时才会把vfp表提交到实际指纹表(fp)中进行重删操作。如此一来,实际的指纹表fp占用内存少,减少了海量数据写入时指纹表fp过大对内存资源的占用。
67.本技术中,应用于分布式存储系统,当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。可见,基于分布式存储系统将数据块根据存储信息的不同分为元数据对象和块对象,并将元数据对象存储至元数据池,块对象存储至块池进行分层存储管理。由于两个池是根据用途划分的,因此每个池可以根据其不同的特性进行更有效的管理。其次,使用改进的哈希算法,将普通的基于数据块的块标识重新映射到新的基于数据内容的数据标识,去除了传统的指纹索引表不可兼容底层存储系统的限制。此外,
通过分层思想将数据指纹先保存在虚拟指纹表中,虚拟指纹表对重复写入的数据块的引用计数进行统计,当引用计数达到预设阈值时才会把虚拟指纹表提交到实际指纹表中进行重删操作,因此,实际指纹表占用内存少,该方法减少了海量数据写入时,指纹表过大对内存资源的占用。
68.下面开始详细介绍本技术提供的一种数据重删方法实施例二,实施例二在实施例一的基础上,以实际应用为例对数据重删系统进行详尽说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
69.参见图2至图6,实施例二具体包括三个方面:分布式存储系统中的哈希算法和改进的哈希算法对比、数据重删系统中元数据池和块池系统设计、分布式存储系统虚拟指纹表流程,下面分别对各个方面进行展开说明。
70.(1)基于分布式存储系统,为了解决目前指纹索引横向扩展性受限问题,本技术实施例可以对指纹表fp进行管理,能够进行快速查找,指纹表扩展后在分布式存储集群系统中均匀分布。因此,提出一种基于分布式存储对象内容的改进的哈希算法。由于指纹表索引的关键机制是更快地检索冗余重复数据块,在传统的重删技术中都是基于哈希算法进行计算,其区别在于hash算法的输入值不同,进行数据重删时,写入数据进行切片存储后的chunk值是重删方法的输入,即input=hash(chunk),而对象id是分布式存储系统的输入值,即input=hash(object id)。可见,分布式存储系统功能无法识别传统技术中重删方法的数据结构,因此难以与分布存储系统功能兼容。
71.本技术实施例中对哈希算法进行改进,结合两种不同的input输入值,如图2所示显示了数据的块标识与其数据内容(data)之间的关系。可以看出,在此示例中,块标识1、2、3具有相同的内容。图3显示了一个由块标识寻址分布式存储系统传统hash映射方法,每个客户端都可以使用预定义的hash算法找到块标识对应的对象数据,由于对象的数据内容和块标识之间没有关系,相同的数据内容可能存在于多个存储节点中,在这种情况下,要找到相同的数据内容进行去重,就需要遍历所有的存储节点或者维护同比例的的指纹索引表。因此,本实施例通过使用改进的hash算法将普通的基于块标识重新映射到新的基于数据内容的数据标识。如图4所示,以客户端1为例进行说明,客户端client1对应的块标识为1,client 1-》oid=1;对oid=1的对象的数据内容进行hash处理,hash(1’s data)=k;进一步的,对k值在分布式存储系统进行crush映射计算,每个客户端都可以使用分布式存储系统的crush算法为块标识找到其对应的数据内容crush(k),最后得出需要进行重删数据的chunk位置。因此,通过采用这种改进的hash算法机制,客户端可以知道对象在存储底层(即磁盘持久化存储设备介质)中的位置,通过在存储底层散列对象的内容生成数据标识,可以去除传统的指纹索引表,并兼容底层存储系统的可扩展性,减少了现有哈希机制中重复块检测的复杂性。。
72.(2)分布式存储系统的高可用性、数据恢复和各种数据管理操作等特性是基于每个对象的。因此,本技术实施例将分布式存储系统和需要进行重删的数据保存到一个对象中,对象根据存储的信息分为两类:元数据metadata对象和块chunk对象,形成全局元数据结构,则底层分布式存储系统无需额外修改即可处理复杂的存储功能。并且,通过扩展了底层存储的元数据扩展属性字段(xattr)用以包含重删数据的元数据信息,在不引入任何外
部组件的情况下可以兼容分布式存储系统功能。
73.如图5所示为数据重删系统中元数据池和块池的设计。元数据metadata对象存储在分布式存储在元数据池中,其中包含用于重删的元数据。在重复数据删除系统中,数据根据其分块算法分为多个块以更有效地检测冗余。元数据对象的id是用户可见的普通对象id,也即块标识,由底层分布式存储系统提供。将元数据对象映射到chunk是基于其偏移量进行存储的,一个chunk块映射由偏移范围offset、数据标识(chunk id)、缓存cache位和脏位dirty组成。
74.偏移范围和数据标识表示元数据对象和块对象之间的映射信息,缓存位和脏位描述块的状态。如果缓存位为true,则该块存储在元数据对象中,否则,将其存储在块池的块对象中。如果脏位为true,则需要对块进行重删。如果所有块映射条目的缓存位为false,则对象的数据部分中没有缓存数据。在图5中,块标识为2的类型是元数据,它的块映射中表示构成该对象的所有块,也即,数据标识为b和c的都没有被缓存,因此,对象2不包含数据,而仅包含元数据。相反,如果缓存位为true,则块存储在对象内部,图5中的对象1和3就是这种情况。
75.本实施例中,块对象存储在块池,块对象包含块数据及其引用计数信息。在图5中,b、c和d表示数据标识,属于块对象,其中的数据存储在对象的数据部分,引用计数信息(pool id、源对象id、偏移量)存储在对象的元数据部分,数据标识由块的数据内容决定。
76.由此可见,本实施例中根据存储的对象定义两个池,元数据池存储元数据对象、块池存储块对象。由于这两个池是根据用途划分的,因此每个池可以根据其不同的特性进行更有效的管理。元数据池和块池可以根据其使用情况在复制和纠删码之间分别选择冗余方案,并且每个池可以根据所需的性能放置到不同的存储位置。
77.(3)如图6所示为本实施例中的待重删数据的指纹引用计数方法,显示了分布式存储系统虚拟指纹表流程。首先分布式存储客户端写入数据,进行固定分块切片为多个chunk1~chunkn;根据上述改进的hash计算方法记录指纹到设计的可扩展元数据属性xattr中;其次,设计虚拟指纹表virtual fingerprint(vfp),通过分层思想将数据指纹先保存在虚拟指纹表,vfp表对重复写入的数据块的引用计数进行统计筛选,当引用计数达到预设值时,如预设阈值重复次数为3(可配置),才会把vfp表提交到实际指纹表fp中进行重删操作。基于以上步骤,实际的指纹表fp占用内存少,减少了海量数据写入时指纹表fp过大对内存资源的占用。
78.此外,由于将分布式存储系统和需要进行重删的数据保存到一个对象中,因此在进行数据重删的过程中,缓存模块管理(cache)评估是否需要缓存块。如果一个块被缓存,它被存储在元数据对象的数据部分,如图5中对于块标识为1的对象,其缓存块为数据标识为a的对象。通过缓存数据可以消除数据重删的开销。然而,在实践中,将一个对象从块池缓存到元数据池需要一个策略,因为存储一个对象会导致额外的i/o请求和存储容量,元数据池中的对象可以有重复的块,通过缓存淘汰算法lru进行管理缓存的更新或淘汰。
79.因为块是用于检测给定数据的冗余的基本单元,当数据写入请求到达重复数据删除系统时,数据被分成几个块,将数据标识作为底层分布式存储系统(即chunk pool)的hash算法的输入key,如果两个块的内容相同,它们在存储系统中的位置是相同的,自然会删除重复的数据。数据重删模块的设计由后台线程运行,后台重复数据删除模块在重删操
作的过程中,首先从脏对象id列表中查找包含脏块的脏元数据对象,对元数据对象的所有修改或新写入请求都会记录到脏对象id列表中;其次,从脏元数据对象的块映射中找到脏块的数据表示。如果缓存管理模块判断脏块是去重目标,数据重删模块检查脏块对应的块条目是否已经有块对象id。如果它有一个块对象id,它会被一些块对象更早地引用,因此,数据重删模块向旧块对象发送取消引用消息并等待其完成,然后,生成一个新块对象并将其发送到块存储池,同时,根据其内容重新评估新块的数据标识;如果脏块没有块对象id,则直接生成与脏块对应的新块并将其发送到块池,并通过hash算法放置在底层分布式存储系统中。如果哈希算法确定的位置没有对象,则将引用计数=1的对象存储起来。如果该位置已经存储了对象,则向该对象添加引用计数信息。当chunk pool的chunk write结束时,更新元数据对象的块映射。如此一来,虚拟指纹表基于块映射中的引用计数信息进行筛选统计。
80.可见,本实施例提供的一种数据重删方法可以提高重删数据效率,减少对系统资源的占用和i/o流量放大问题,并兼容分布式存储系统现有功能,同时也降低分布式存储系统实际存储的数据量,节省存储设施建设的运营成本。解决了现有技术中指纹表fp无法横向扩展的限制;此外,分布式存储系统和重删数据的元数据信息保存到一个对象中形成全局元数据结构,对重删数据效率进行优化控制,使本发明兼容现有的分布式存储存储功能、数据故障恢复、快照、横向扩展等特性,并且不影响分布式存储冗余数据的完整性。
81.综上所述,本实施例至少具备以下优点:
82.1、性能。基于本发明可以提高重删数据效率,减少对系统资源的占用和i/o流量放大问题,有一定的性能提升。
83.2、稳定性。重删过程对上层业务应用完全透明,重删hash算法与数据扩展属性兼容分布式存储系统服务功能,使分布式存储系统具有稳定性。
84.3、安全性。本发明采用基于内容的hash算法,数据碰撞率低,保障了分布式存储系统数据一致性。
85.4、低成本。本发明的主旨是降低分布式存储系统实际存储的数据量,节省存储设施建设的运营成本。
86.5、兼容性。本发明兼容现有的分布式存储功能、数据故障恢复、快照、横向扩展等特性,并且不影响分布式存储冗余数据的完整性。
87.相应的,本技术实施例还公开了一种数据重删装置,应用于分布式存储系统,参见图7所示,该装置包括:
88.数据分块模块11,用于当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;
89.对象划分模块12,用于根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;
90.数据重删模块13,用于基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以
便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。
91.其中,关于上述各个模块更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
92.由此可见,通过本实施例的上述方案,应用于分布式存储系统,当监测到数据写入请求时,对写入数据进行分块以得到若干数量的数据块;根据存储信息将所述数据块分为元数据对象和块对象,并将所述元数据对象存储至元数据池、将所述块对象存储至块池;其中,所述元数据对象用于记录所述数据块的块标识以及所述写入数据的元数据信息;所述块对象用于记录所述数据块的数据标识以及所述数据标识的引用计数信息;所述数据标识为基于所述块标识利用哈希算法确定出与所述块标识对应的数据内容的标识;基于所述元数据池与所述块池之间的块映射,从预先构建的虚拟指纹表中筛选出所述引用计数信息中的引用计数达到预设阈值的目标数据标识,以便将所述目标数据标识提交到实际指纹表中,并根据所述目标数据标识确定相应的数据块位置进行数据重删。可见,基于分布式存储系统将数据块根据存储信息的不同分为元数据对象和块对象,并将元数据对象存储至元数据池,块对象存储至块池进行分层存储管理。由于两个池是根据用途划分的,因此每个池可以根据其不同的特性进行更有效的管理。其次,使用改进的哈希算法,将普通的基于数据块的块标识重新映射到新的基于数据内容的数据标识,去除了传统的指纹索引表不可兼容底层存储系统的限制。此外,通过分层思想将数据指纹先保存在虚拟指纹表中,虚拟指纹表对重复写入的数据块的引用计数进行统计,当引用计数达到预设阈值时才会把虚拟指纹表提交到实际指纹表中进行重删操作,因此,实际指纹表占用内存少,该方法减少了海量数据写入时,指纹表过大对内存资源的占用。
93.进一步的,本技术实施例还公开了一种电子设备,图8是根据一示例性实施例示出的电子设备20结构图,图中内容不能认为是对本技术的使用范围的任何限制。
94.图8为本技术实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的数据重删方法中的相关步骤。
95.本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本技术技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
96.另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222及数据223等,数据223可以包括各种各样的数据。存储方式可以是短暂存储或者永久存储。
97.其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是windows server、netware、unix、linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的数据重删方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。
98.进一步的,本技术实施例还公开了一种计算机可读存储介质,这里所说的计算机可读存储介质包括随机存取存储器(random access memory,ram)、内存、只读存储器(read-only memory,rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、磁碟或者光盘或技术领域内所公知的任意其他形式的存储介质。其中,所述计算机程序被处理器执行时实现前述数据重删方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
99.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
100.结合本文中所公开的实施例描述的数据重删或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
101.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
102.以上对本发明所提供的一种数据重删方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献