法律状态公告日
法律状态信息
法律状态
2019-07-23
授权
授权
2016-05-18
实质审查的生效 IPC(主分类):H03M13/15 申请日:20141216
实质审查的生效
2016-04-20
公开
公开
【技术领域】
本发明涉及分布式存储系统领域,尤其涉及一种基于二进制域里德所罗门码的数据编解码方法。
【背景技术】
随着计算机网络应用的迅速发展,网络信息数据量变得越来越大,海量信息存储变得尤为重要,持续增长的数据存储压力带动着整个存储市场的快速发展;分布式存储以其高性价比、低初期投资、按需付费等优越的特点日益成为当今大数据存储的主流技术。分布式存储系统的存储结点失效已经成为一种常态,当系统所部署的存储结点变得不可靠时,必须引入冗余来提高结点失效时的可靠性,引入冗余最简单的方法就是对原始数据直接备份,直接备份虽然简单但是其存储效率和系统可靠性不高,而通过编码引入冗余的方法可以提高其存储效率;因此分布式存储的高概率可用性、可靠性以及安全性等均是分布式存储系统的关键技术问题。在目前的存储系统中,编码方法一般采用MDS码,MDS码可以达到存储空间效率的最佳,一个(n,k)MDS纠删码需要将一个原始文件分成k个大小相等的模块,并通过线性编码生成n个互不相关的编码模块,由n个结点存储不同的模块,并满足MDS属性(n个编码模块中任意k个就可重构原始文件)。
当存储系统中的存储结点失效时,为了保持存储系统的冗余量,需要恢复该失效结点存储的数据并将该数据存储在新结点中,该过程称为修复过程。在修复过程中,里德所罗门码首先需要下载k个存储结点的数据并恢复出原始数据,之后为新结点编码出失效结点的存储数据。而当原始数据出现改动时,为了维持数据的一致,需要对冗余的校验数据块进行更改,这个过程称为更新过程。
RDP码,全称RowDiagonalParityCode,是一种简单的纠删码(引自论文ReferencesP.Corbettetal.“Rowdiagonalparityfordoublediskfailurecorrection,”4thUsenixConf.onFileandStorageTech.,SanFrancisco,2004)。它不需要使用有限域或者生成矩阵,只是按行和按泛对角线进行异或计算,生成两个校验数据块,构成了一种带有2个校验数据块的纠删码;但是RDP码更新复杂度偏高和不可拓展。
论文[JamesS.Plank,"OptimizingCauchyReed-SolomonCodesforFault-TolerantNetworkStorageApplications"NetworkComputingandApplications,2006.]提出的柯西里德所罗门码(CauchyReed-SolomonCode,简称CRS码)是当前最常用的里德所罗门编码之一,已经被广泛用于分布式存储系统中,例如在HDFS中就提供了一套基于CRS编码的分布式存储系统。但是CRS依然存在着一些缺陷,首先,使用0-1生成矩阵,虽然能大大降低编解码复杂度,但实际上,它的解码复杂度却不是最优的,还存在许多纠删码,比如DRP编码,它们的解码复杂度要优于CRS。其次,它用于编解码的有限域二进制矩阵还是比较复杂,散乱无章的0和1使得编解码难以更进一步优化。然后,也是因为编码复杂度目前还比较高,使得数据更新时,需要分析各种不同的情况,也使得编码复杂度比较高。
【发明内容】
为了解决现有技术中的问题,本发明提供了一种基于二进制域里德所罗门码的数据构造、重构及更新方法,解决现有技术中主要针对传统的存储装置系统结构比较复杂,采用的编码方式结点数据存储量大,在编码解码更新过程中所需要计算复杂性高的问题,达到保证系统的冗余度,有效地减少了数据更新时的计算量,降低了编解码过程中的计算复杂度,并提高结点失效后修复过程的有效性(包括计算开销和修复时间)的目的。
本发明提供了一种基于二进制域里德所罗门码的数据编解码方法,包括以下步骤:包括以下步骤:(A)原始数据构建二进制域里德所罗门码;(B)更新二进制域里德所罗门码;(C)重构二进制域里德所罗门码;所述步骤(A)、步骤(B)以及步骤(C)中的运算均采用异或运算。
作为本发明的进一步改进,所述原始数据包括k个长度为Lbit原始的数据块,记为si=si,1si,2...si,L,i=0,1,2,...,k-1;校验数据块ma通过如下方式给出:
作为本发明的进一步改进,所述步骤(A)中进一步包括:(A1)原始数据分块,将原始数据B平均分割成k个数据块,每个数据块有Lbit数据,记为S=(s0,s1,...,sk-1);(A2)构建校验数据块M=(m0,m1,...,mn-k-1),
作为本发明的进一步改进,所述步骤(B)中进一步包括:(B1)新的原始数据块分块,将更新后的文件进行分块,分成新的k个原始数据块;(B2)将新的原始数据块和对应的旧的原始数据块进行比较,算出每个块的变化量;(B3)判断每个块是不是发生改变,若发生改变,每个校验数据块根据冗余符号,在对应的位置上加上变化量,完成编码的更新;若没有发生改变则不进行任何操作。
作为本发明的进一步改进,所述步骤(C)中进一步包括:收集任意k个结点上的原始数据块和/或校验数据块,通过循环迭代进行异或计算完成解码。
本发明的有益效果是:通过该方法大大提高了数据上传和下载的速率,很大程度上减少了系统操作复杂度(如元数据更新、更新后的数据广播等);在实际的分布式存储系统中具有很高的应用价值和发展潜力;二进制域里德所罗门码(即BRS码)不仅拥有最优的编解码速度,同时也拥有最快的更新速度。面对庞大的数据量更新,BRS能以最快的速度完成更新,在最短的时间内完成任务,节省时间和资源,既能减少成本的消耗又能达到一种良好的用户体验。
【附图说明】
图1是本发明基于二进制域里德所罗门码的框架图。
图2是本发明构造二进制域里德所罗门码的流程示意图。
图3是本发明更新二进制域里德所罗门码的流程示意图。
【具体实施方式】
下面结合附图说明及具体实施方式对本发明进一步说明。
传统的里德所罗门码构造都是基于有限域GF(q),为了减小里德所罗门的复杂性,我们提出了一种基于二进制域的里德所罗门码(BinaryReed-SolomonCode,简为BRS码);我们知道,对于k个原始数据块(长度为Lbit),不妨令si,j表示数据块si中第j个bit的值,则可记为si=si,1si,2...si,L,i=0,1,2,...,k-1。难点在于成功找到n-k个独立的校验数据块,使得n个数据块(包括原始数据块和校验数据块)中的任意k个数据块是线性独立的。一般情况下,我们把满足以上条件的数据块称为(n,k)独立。
如取一个文件S={s0,s1},包含两个原始数据块s0、s1。明显可以看出,运用异或编码,存在三个线性独立的数据块
如之前所述,k个原始的数据块(长度为Lbit),记为si=si,1si,2...si,L,i=0,1,2,...,k-1。校验数据块ma通过如下方式给出:
标识符ID构造:
对于任意整数k的编码,校验数据块ma唯一的标识可以通过如下方式得到:
>
则通过上述编码方式编码出的n个数据块{s0,s1,...,sk-1,m0,m1...,mn-k-1}是线性独立的。例如,当k=4,n=9时,编码标识相应地为ID0=(0,0,0,0),ID1=(0,1,2,3),ID2=(0,2,4,6),ID3=(0,3,6,9),ID4=(0,4,8,12).整个编码框架如图1所示。
BRS码构造过程:
通常,参数为(n,k)的里德所罗门码包含n个结点,记为{N0,N1,...,Nn-1}。BRS码应用于包含n个结点的系统中,每个结点各存储1个原始数据块或校验数据块。一个文件被平均分成的k个原始数据块,被存储在其中k个结点中,这k个结点被称为系统结点。另外,编码而成的n-k个校验数据块,被存放在其余的n-k个结点上,这些结点被称为校验结点。
BRS码的构造步骤如图2所示:
1)将原始数据B平均分割成k个数据块,每个数据块有Lbit数据,记为
S=(s0,s1,...,sk-1)。
2)构建校验数据块:
>
其中,
块mi。
>
3)每个结点存储数据,结点Ni(i=0,1,...,n-1)存储的数据为s0,s1,s2,...,sk-1,m0,m1,m2,...,mn-k-1。
举个简单的例子,假如现在n=6,k=3,则有ID0=(0,0,0),ID1=(0,1,2),ID2=(0,2,4)。每个原始数据块为si=si,1si,2...si,L,i=0,1,2,...,k-1,而每个校验数据块为mi=mi,1mi,2...mi,L,i=0,1,2,...,n-k-1.
可以得到校验数据块的计算过程如下:
>
>
>
BRS码更新过程:
当原始数据发生更改时,为了维持数据一致性,需要对校验数据块进行更新。在编码过程中,每个校验数据块由右式
>
假如只有sj发生改变而其他的都保持不变,即Δsj不全为0,而其他的全部为0,那就有
BRS码的更新过程如图3表示:
1)将更新后的文件进行分块,分成新的k个原始数据块。
2)将新的原始数据块和对应的旧的原始数据块进行比较,算出每个块的变化量Δs
3)判断每个块是不是发生改变,即判断变化量Δs是否全为0。
4)对不发生改变的块,不进行任何操作。
5)对发生改变的块,每个校验数据块根据冗余符号,在对应的位置上加上变化量Δs,完成编码的更新。
BRS码重构过程:
与通常的里德所罗门编码不同,BRS的编解码只采用了简单的异或计算,可以做到完全地不涉及有限域的乘法计算。重构数据时,需要收集任意k个数据块。如果有原始数据块损坏了,就需要利用校验数据块进行解码计算了。
下面以一个例子说明BRS码的重构过程。假如现在有2个原始数据块s0,s1,可以生成两个校验数据块
前面编码时,介绍了BRS码在n=6,k=3的编码过程。假如3个原始数据块全部损坏,要使用3个校验数据块进行解码。我们可以利用编码时的关系:
m2,1=s0,1,m2,2=s0,2,
>
直接得到s0,1,s0,2,s1,1。然后由下列关系
>其中i≥1
得到迭代公式
>其中i≥2,并且s1,b=s2,b=0,(b≤0)
根据上面的迭代公式,每循环一次,就能算出3个bit的值(s0,s1,s2中都能得到一个bit)。每个原始数据块长度为Lbit,所以重复L次后,就能解出原始数据块中的所有未知的bit。这就完成了数据的重构。
2.3BRS码性能评估
2.3.1编码计算复杂度
RDP码,有2个校验数据块,第一个校验数据块是k个原始数据块通过异或运算得到,每个数据块长度为Lbit,则需要(k-1)L异或运算。而第二个校验数据块是泛对角线上k个数据块的异或得到,也需要(k-1)L异或运算。所以RDP的编码复杂度是最优的。
CRS编码,有一个称为w的分组数量,未经过任何优化的编码需要大约
对于BRS码,系统总共有(n-k)个校验数据块,每个校验数据块是k个原始数据块通过异或运算得到。因此,计算每个校验数据块编码需要(k-1)L异或运算。BRS的编码复杂度也是最优的。
2.3.2解码计算复杂度
RDP码是通过迭代解码的,本身不涉及有限域计算。假设原始数据块故障的数量为r(r≤2),那重构时所需要的异或计算量为r(k-1)Lbit。
CRS使用了二进制矩阵,避免了有限域计算,加快了计算速度。但解码由二进制矩阵决定,平均解码时的异或数量是大约
BRS码像RDP码一样,也是通过迭代解码的,本身不涉及有限域计算。假设原始数据块故障的数量为r,(r≤n-k),那重构时所需要的异或计算量就是r(k-1)L。
2.3.3更新计算复杂度
DRP虽然编码和解码都能达到最优,但更新时却比较麻烦。每当原始数据有1个bit改变时,按行异或得到的校验数据块只需要更新1个bit,而按泛对角线异或得到的校验数据块需要依赖原始数据块和按行异或得到的校验数据块,它需要更新2个bit。所以每次更新1bit时,平均每个校验数据块需要更新1.5bit。
CRS的编码过程经过优化,但更新过程却很难优化。CRS的更新复杂度和它的二进制生成矩阵紧密联系在一起。平均来说,每次更新1bit,每个校验数据块需要更新大约
BRS的更新过程跟它的编码过程差不多。在编码时,因为原始数据的每一个bit只需要引用一次,如果原始数据中有一个bit发生了改变,每个校验数据块中只需要对应地改变1个bit就能完成更新。相比于RDP和CRS,BRS有着更优越的更新复杂度。同时,BRS已经达到了最优的更新复杂度。
下面是本文引用的编码的复杂度比较
BRS码相比传统里德所罗门码,最大的优势在于其大大减小了编解码过程中计算复杂度,使用了简单易于实施的异或运算,并且避免了有限域复杂的运算。传统里德所罗门码的构造基于有限域GF(q),编解码过程中设计到的有限域加法、减法以及乘法。有限域的运算虽然理论研究比较成熟,但实际运用起来比较繁琐、时间消耗大,明显不能符合当今分布式存储系统快速可靠的设计指标。BRS码则不同,编解码的运算仅仅限于快速的异或运算,大大提高了数据上传和下载的速率,很大程度上减少了系统操作复杂度(如元数据更新、更新后的数据广播等)。在实际的分布式存储系统中具有很高的应用价值和发展潜力。BRS码不仅拥有最优的编解码速度,同时也拥有最快的更新速度。面对庞大的数据量更新,BRS能以最快的速度完成更新,在最短的时间内完成任务,节省时间和资源,既能减少成本的消耗又能达到一种良好的用户体验。
BRS码可以保证像其他的里德所罗门码结点存储数据量小。BRS码还具有的MDS属性能让系统能够容纳多个结点故障,而不引起数据的丢失。同时BRS码可以实现结点精确修复,即系统修复后的数据与结点丢失的数据完全一致,这使得BRS码易于实施、修复及更新代价低。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
机译: 基于二进制里德-所罗门编码的数据编解码方法
机译: 与螺旋扫描数据一起使用的方法和装置通过实施里德-所罗门产品代码,包含这种数据的单一介质和代码,通过实施里德-所罗门产品记录来实现里德-所罗门产品记录的方法和装置与螺旋扫描数据一起使用包括这种数据,以及一种包括这种介质的盒体包括这种中等介质的盒体
机译: 基于里德-所罗门码构造的低密度奇偶校验码的编解码方法