一种基于去重系统的分层编码方法、装置及去重系统与流程

文档序号:22676561发布日期:2020-10-28 12:32阅读:98来源:国知局
一种基于去重系统的分层编码方法、装置及去重系统与流程

本发明属于计算机存储领域,更具体地,涉及一种基于去重系统的分层编码方法、装置及去重系统。



背景技术:

伴随着vr(virtualreality,虚拟现实)技术、短视频、网络直播等新兴互联网行业的崛起,越来越多的图片、视频等大数据量的数据内容需要保存。这对于企业和用户来说,也将面临越来越大的存储压力。尤其是对于企业来说,考虑到数据安全性和可靠性,需要定期对数据进行备份,这虽然保证了数据安全性,但是大大增加了存储的成本。对各种存储系统和备份系统中相关数据的研究发现,在系统中存在着大约60%的重复数据。该数据表明,释放重复数据占用的存储空间,可以节省出大量存储资源。因此,催生出一种新技术——数据去重技术。在存储系统中,数据去重技术可以减少传输、存储和管理的数据量,提升系统的性能,减少存储成本和管理开销,因此,数据去重技术得到了学术界和工业界的广泛关注,并逐渐成为了数据密集型存储系统和产品中的重要组成。采用了数据去重技术的存储系统,即为去重系统。

纠删码因其良好的存储效率和高可靠性,常常被应用于去重系统,来提高去重系统可靠性。但纠删码有一个众所周知的修复问题,即在数据丢失后,系统进行降级读修复时会消耗大量的网络开销。当前有大量的研究针对纠删码的修复问题进行研究,但这些研究都没有考虑因数据块引用次数增加带来的修复开销问题。而由于纠删码的特性,当数据节点失效时,随着数据块的引用次数增加,被传回到客户端的数据量成倍增长,给网络资源带来了巨大压力。当前一些研究更多的是考虑使用副本方式来减少数据丢失时的网络开销,但是这样又会增加存储成本。因此,针对去重系统即追求存储性能又追求修复性能的情况,提出一种编码方案来对数据进行编码,保证去重系统中数据的可靠性是十分重要且有意义的。



技术实现要素:

针对现有技术的缺陷和改进需求,本发明提供了一种基于去重系统的分层编码方法、装置及去重系统,其目的在于,保证去重系统具有良好的存储效率,同时又保证在数据节点失效时,去重系统具有良好的修复速率。

为实现上述目的,按照本发明的一个方面,提供了一种基于去重系统的分层编码方法,包括:

预定义n-1个阈值,用于将数据块的被引用次数划分为n个层级,并预先在去重系统的内存中创建n个缓存区作为n个数据容器,用于对应存储n个层级的数据块;

在数据块编码时,当一个数据块经过去重之后,若该数据块是唯一块,则将其被引用次数记为1;若该数据块不是唯一块,则将其被引用次数加1;将更新之后的被引用次数记录到数据块的元数据中,并根据更新之后的被引用次数确定数据块所处的层级,将该数据块存储到对应层级的数据容器中;

当任意一个数据容器满时,按照其所处层级对应的编码方式,对其中的数据块进行编码,并将同一条带中的分块存储到不同的节点中;层级越高,对应的被引用次数范围越大,且对应的编码条带越短;

其中,n为大于1的正整数;条带中的分块为该条带内的数据块或校验块。

进一步地,本发明提供的基于去重系统的分层编码方法,还包括:

发生降级读时,从丢失数据块的元数据信息中提取被引用次数,以确定丢失数据块所处的层级,根据该层级对应的编码方式确定丢失数据块对应的解码方式;

获得丢失数据块所属的条带,遍历存储该条带中分块的节点,从其中k个未失效的节点中获取分块,并按照丢失数据块对应的解码方式对所获取的分块进行解码操作,以修复出丢失数据块;

其中,k为丢失数据块所属条带中数据块的数量。

进一步地,n=3,相应地,数据块根据其被引用次数被划分为高、中、低三个层级。

按照本发明的另一个方面,提供了一种基于去重系统的分层编码装置,包括:预处理模块、引用更新模块、分层存储模块以及分层编码模块;

预处理模块,用于预定义n-1个阈值,所定义的n-1个用于将数据块的被引用次数划分为n个层级;预处理模块,还用于预先在去重系统的内存中创建n个缓存区作为n个数据容器,所创建的n个数据容器用于对应存储n个层级的数据块;

引用更新模块,用于在数据块编码时,当一个数据块经过去重之后,若该数据块是唯一块,则将其被引用次数记为1;若该数据块不是唯一块,则将其被引用次数加1;

分层存储模块,用于将引用更新模块更新之后的被引用次数记录到数据块的元数据中,并根据更新之后的被引用次数确定数据块所处的层级,将该数据块存储到对应层级的数据容器中;

分层编码模块,用于在任意一个数据容器满时,按照其所处层级对应的编码方式,对其中的数据块进行编码,并将同一条带中的分块存储到不同的节点中;层级越高,对应的被引用次数范围越大,且对应的编码条带越短;

其中,n为大于1的正整数;条带中的分块为该条带内的数据块或校验块。

进一步地,本发明提供的基于去重系统的分层编码装置,还包括:元数据解析模块和降级读修复模块;

元数据解析模块,用于在发生降级读时,从丢失数据块的元数据信息中提取被引用次数,以确定丢失数据块所处的层级,根据该层级对应的编码方式确定丢失数据块对应的解码方式;

降级读修复模块,用于获得丢失数据块所属的条带,遍历存储该条带中分块的节点,从其中k个未失效的节点中获取分块,并按照丢失数据块对应的解码方式对所获取的分块进行解码操作,以修复出丢失数据块;

其中,k为丢失数据块所属条带中数据块的数量。

进一步地,n=3,相应地,数据块根据其被引用次数被划分为高、中、低三个层级。

按照本发明的又一个方面,提供了一种去重系统,该去重系统包括本发明所提供的上述基于去重系统的分层编码装置。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

本发明根据数据块的被引用次数进行数据块层级划分,对不同层级的数据块采用不同的编码条长度带进行编码操作,为高频引用的数据块分配短编码条带来保证其修复效率,为低频引用的数据块分配长编码条带来保证其存储效率,使得占据数据块数量最多的低层级数据块占用较少的存储空间,而在降级读时被访问更频繁的高层级数据块占用较少的降级读时间,由此能够结合高引用数据块总是被频繁访问,低引用数据块数量众多的特点,平衡去重系统存储效率和修复效率,既保证了去重系统具有良好的存储效率,又保证了在数据节点失效时,去重系统具有良好的修复速率。

附图说明

图1为现有的去重系统中数据去重的流程示意图;

图2为本发明实施例提供的基于去重系统的分层编码方法示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

在详细解释本发明的技术方案之前,先对去重系统中的数据去重流程做如下简要介绍:

如图1所示,在数据去重时,首先系统需要在内存中申请一处空间,用于存放当前系统中已经存在的数据块的指纹信息。这些信息以key-value键值对的形式存在于哈希表中,键是指数据块的指纹数据,值是指数据块的元数据信息。然后需要对输入的数据流进行分块处理,例如选择变长分块方式,当数据块a被切分出来后,对a进行哈希计算,得到a的指纹信息。得到指纹信息后,查找存放数据指纹的哈希表,如果匹配成功说明a是一个重复块,只需要更新数据块a的元数据信息,然后重新回到数据流分块流程中;如果没有匹配成功则说明a是一个新的唯一块,需要将当前数据块a的指纹和元数据信息,添加到指纹哈希表中,然后将a填入数据容器中,等待后续计算处理。

为了保证去重系统具有良好的存储效率,同时又保证在数据节点失效时,去重系统具有良好的修复速率,本发明提供了一种基于去重系统的分层编码方法、装置及去重系统,其整体思路在于:利用去重步骤来获取数据块的引用次数,根据引用次数来构建层级,并对不同层级数据块采用不同的纠删码方案;这样根据数据块的引用次数高低来对数据块进行分层编码,利用不同长度编码条带的存储效率和修复速率不同的特性,结合高引用数据块总是被频繁访问,低引用数据块数量众多的特点,为高引用数据块分配短编码条带来保证其修复效率,为低引用数据块分配长编码条带来保证其存储效率,从而平衡去重系统存储效率和修复效率,即保证了去重系统具有良好的存储效率,又保证了在数据节点失效时,去重体统的修复速率。

在本发明的一个实施例中,提供了一种基于去重系统的分层编码方法,包括:

预定义n-1个阈值,用于将数据块的被引用次数划分为n个层级,并预先在去重系统的内存中创建n个缓存区作为n个数据容器,用于对应存储n个层级的数据块;n为大于1的正整数,其具体取值,即数据块划分的层级数,可根据数据的实际访问特性设定,以保证能够最大程度上平衡去重系统存储效率和修复效率;在本实施例中,n=3,相应地,数据块根据其被引用次数被划分为高、中、低三个层级;各个阈值同样可根据数据的实际访问特性设定;

在数据块编码时,当一个数据块经过去重之后,若该数据块是唯一块,则将其被引用次数记为1;若该数据块不是唯一块,则将其被引用次数加1;将更新之后的被引用次数记录到数据块的元数据中,并根据更新之后的被引用次数确定数据块所处的层级,将该数据块存储到对应层级的数据容器中;

当任意一个数据容器满时,按照其所处层级对应的编码方式,对其中的数据块进行编码,并将同一条带中的分块存储到不同的节点中;层级越高,对应的被引用次数范围越大,且对应的编码条带越短;其中,条带中的分块为该条带内的数据块或校验块;

本实施例提供的基于去重系统的分层编码方法,还包括:

发生降级读时,从丢失数据块的元数据信息中提取被引用次数,以确定丢失数据块所处的层级,根据该层级对应的编码方式确定丢失数据块对应的解码方式;

获得丢失数据块所属的条带,遍历存储该条带中分块的节点,从其中k个未失效的节点中获取分块,并按照丢失数据块对应的解码方式对所获取的分块进行解码操作,以修复出丢失数据块;

其中,k为丢失数据块所属条带中数据块的数量。

在本发明的另一个方面,提供了一种基于去重系统的分层编码装置,包括:预处理模块、引用更新模块、分层存储模块以及分层编码模块;

预处理模块,用于预定义n-1个阈值,所定义的n-1个用于将数据块的被引用次数划分为n个层级;预处理模块,还用于预先在去重系统的内存中创建n个缓存区作为n个数据容器,所创建的n个数据容器用于对应存储n个层级的数据块;

引用更新模块,用于在数据块编码时,当一个数据块经过去重之后,若该数据块是唯一块,则将其被引用次数记为1;若该数据块不是唯一块,则将其被引用次数加1;

分层存储模块,用于将引用更新模块更新之后的被引用次数记录到数据块的元数据中,并根据更新之后的被引用次数确定数据块所处的层级,将该数据块存储到对应层级的数据容器中;

分层编码模块,用于在任意一个数据容器满时,按照其所处层级对应的编码方式,对其中的数据块进行编码,并将同一条带中的分块存储到不同的节点中;层级越高,对应的被引用次数范围越大,且对应的编码条带越短;

其中,n为大于1的正整数;条带中的分块为该条带内的数据块或校验块;

本实施例提供的基于去重系统的分层编码装置,还包括:元数据解析模块和降级读修复模块;

元数据解析模块,用于在发生降级读时,从丢失数据块的元数据信息中提取被引用次数,以确定丢失数据块所处的层级,根据该层级对应的编码方式确定丢失数据块对应的解码方式;

降级读修复模块,用于获得丢失数据块所属的条带,遍历存储该条带中分块的节点,从其中k个未失效的节点中获取分块,并按照丢失数据块对应的解码方式对所获取的分块进行解码操作,以修复出丢失数据块;

其中,k为丢失数据块所属条带中数据块的数量;

本实施例中,各模块的具体实施方式可参考上述方法实施例中的描述,在此将不作复述。

在本发明的又一个实施例中,提供了一种去重系统,该去重系统包括上述实施例所提供的基于去重系统的分层编码装置。

以下结合一个具体的应用场景对本发明的技术方案做进一步的解释:

如图2所示,在一个去重系统中,包括节点0~节点8共9个节点,用于存储条带中的分块(数据块或校验块);在该存储系统中,数据块被划分为3个层级,相应的两个阈值分别为2和5,即引用次数为1的数据块为低(l)层级,引用次数为2~4的数据块为中(m)层级,引用次数大于等于5的数据块为高(h)层级。其中低层级采用rs(6,3)编码方案,中层级采用rs(5,3)编码方案,高层级采用rs(3,3)编码方案;相应地,预先在内存中申请三个缓存区,分别作为低层级容器(l)、中层级容器(m)和高层级容器(h);

rs(k,r)编码方案中,将k个数据块使用rs码进行编码,生成r个校验块,由k个数据块及编码得到的r个校验块共n=k+r个分块组成一个条带,且这n个分块的任意k个分块可以修复出原始数据;

如图2所示,假设4个文件file1、file2、file3和file4需要访问数据块a~g,如图2中“数据去重”和“统计引用次数”的步骤所示,经过去重之后,获取到当前数据流中的数据块的个数及各数据块的被访问次数;

如图2中“数据块分发”步骤所示,根据各数据块的被访问次数和预设的阈值,可确定各数据块所对应的层级,其中数据块c、e、f、g进入低层级数据容器中,数据块a、d进入中层级数据容器中,数据块b进入高层级数据容器中;

当任意一个数据容器满后,采用相应层级的编码方式对其中的数据块进行编码;如图1中“数据容器编码及存储”步骤所示,其中低层级数据容器按照rs(6,3)编码方案进行编码生成数据块l0~l5,以及校验块lp0~lp2;中层级数据容器按照rs(5,3)编码方案进行编码生成数据块m0~m4,以及校验块mp0~mp2;高层级数据容器按照rs(3,3)编码方案进行编码生成数据块h0~h2,以及校验块hp0~hp2;这些数据块/校验块分布在节点0到节点8之间。

假设在某一时刻,数据块b丢失时,可以根据数据块b的元数据确定其所属的条带编号,并从数据块b的元数据中提取被引用次数,进而确定其所属的层级,获得其所采用的编码方式;通过解析元数据可知,数据块b所属层级为高层级,其所采用的编码方式为rs(3,3)编码方案,并且,数据块b所属的条带存储与节点0~节点5;

遍历节点0~节点5,获取了未丢失的h1、h2、hp0,并采用与rs(3,3)编码方案相应的解码方式进行解码操作,修复出丢失的数据块b。

可以看到,由于采用了分层编码方法,对于高层级的数据块b,只需要回传两个数据块和一个校验块即可恢复出该数据块b;恢复速度相较中低层级数据块,回传数据量小,恢复速度块。

总体而言,本发明所提供的基于去重系统的分层编码方法,可以平衡系统存储效率和修复速度相矛盾的情况下,最大限度平衡两者之间的矛盾,提升了修复性能,增加了系统可靠性。实验表明,相对于当前最优的基于纠删码的去重系统来说,当前最优的基于纠删码的去重系统采用(6,3)编码方案,在丢失1-3个节点的情形中,本发明在仅增加增加5.1%的存储开销情况下,修复性能分别提高了63.9%、70.4%、76.4%。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1