一类纠删码的译码方法与流程

文档序号:13625745阅读:535来源:国知局
本发明属于计算机信息存储
技术领域
,具体是一种纠删码的译码方法。
背景技术
:随着网络和服务器的迅速成长,数据的容量越来越大,数据的重要性和安全性也更加得到重视。为了应对由数据量的快速增长而带来的数据存储可靠性问题,海量存储系统必须能够提供安全的存储服务、以及持续的在线运行和高效、可靠的容错机制;同时也为了提高数据访问的并发效率和降低成本,通常有效的做法是使用多个存储节点共同构建一个存储系统,该存储系统通常是基于网络的分布式存储系统。针对传统数据冗余保护技术在大容量磁盘存储系统中所表现出的不足,以分布式、大规模、大容量磁盘存储为特点的海量存储系统中出现了一种更加高效的数据冗余技术——纠删码。纠删码起源于通信传输领域,目前逐渐出现在大规模存储系统中,特别是分布式存储环境。纠删码技术基本思想是将一份数据划分为k块原始的数据,基于k块原始数据冗余计算获得m块冗余数据。对于这k+m块数据,其中任意的m块元素出错时,存储系统均可以通过重构算法恢复出原来的k块数据,纠删码冗余保护技术解决了传统冗余保护技术不适于分布式生产存储系统的问题。纠删码可以用于有大量数据和任何需要容错的应用程序或系统中,比如磁盘阵列系统、数据网格、分布式存储应用程序、对象存储或归档存储。基于纠删码的方法与传统的镜像、副本技术相比,具有冗余度低、磁盘利用率高等优点。目前,纠删码的一个常见的使用案例是基于对象的云存储,其针对云计算、大数据业务对海量存储系统的多样性、大规模存储容量需求,能够较好的适应分布式存储应用环境。纠删码是一类特殊的编码删码,它是一种前向错误纠正技术,即在译码时码字中错误的位置已知。目前对基于二进制异或运算的纠删码而言,解码方法几乎都采用了循环迭代法,即不断循环遍历。这造成了解码的算法时间复杂度高,解码的速度低下;并且在没有解码前,难以对是否完全解码成功进行预判。技术实现要素:本发明的目的是,提供一种降低解码算法时间复杂度、提升解码速度、适用范围广的纠删码译码方法。为实现上述目的,本发明所述纠删码的译码方法的具体方案如下:已知某纠删码的校验矩阵h和错误的位置,码字中数据位的个数为dnum,所述方法求得错误元素的值的具体步骤为:s1、假设矩阵h的尺寸为m×n;构造一个dnum×dnum的单位矩阵,记作i;构造一个(n-dnum)×(n-dnum)的零矩阵,记作o;根据矩阵h、i、o,拼接出一个新的矩阵w,如下所示:s2、对码字中每一个元素赋予一个从0开始的递增整数编号:0、1、2、...;将发生错误元素的编号位置集合,记作errids;按顺序从errids中取出一个元素编号,记作eid;s3、搜索矩阵w的第eid列中等于1的所有行,记作dqrows,其中,行列编号均从0开始;然后遍历dqrows中的行编号,找出对应矩阵w中行重最小且编号大于等于dnum的编号,记作brow;s4、矩阵w中,将brow对应的行加到dqrows中其他所有编号对应的行,结果模2;s5、矩阵w中,将brow对应的行中的所有值置0;s6、重复步骤s3到s5,直至所有errids中的所有对应的编号eid处理完成;s7、截取已转换后的w矩阵0到dnum-1行,形成一个新的矩阵,记作m;矩阵m的每一列分别对应每一个元素,而m的每一行则分别对应一个数据元素;对于矩阵m的第i行,其中所有1元素所在的列序号对应的元素异或和即为第i个元素的值。更进一步的,当存在校验位上的错误时,先用权利要求1中所述步骤求出所有数据元素,再用编码的方法求出校验位上错误元素的值。本发明的有益效果体现在:(1)在没有进行解码运算前,提供一种判断能否完全解码成功依据;(2)与传统循环迭代译码方法相比,解码的时间复杂度降低、速度提高;(3)本方法适用于任何基于二进制异或运算的纠删码,包括evenodd码、x码、star码、rdp码、斜率码等,适用范围广。具体实施方式下面结合实施例,对本发明的实施作进一步的描述。实施例一已知一个2×6的数据存储阵列,每一列表示一个存储节点;其中前3列为存储数据元素,后3列存储校验元素,如下所示:01268103457911该存储阵列中各个校验元素由如下方式产生,其中的+号代表异或:则该码字的校验矩阵h可得,如下:校验矩阵上面的0~11标号表示校验矩阵的这一列所对应的存储阵列中的元素。存储阵列中第1、2列发生错误后失效,即元素1、2、4、5变成未知。即在本实施例中,已知如上某纠删码的校验矩阵h和错误的位置元素,数据存储阵列中数据位的个数dnum为6,所述方法求得错误元素的值的具体步骤为:s1、矩阵h的尺寸m×n为6×12;构造一个6×6的单位矩阵,记作i;构造一个(n-dnum)×(n-dnum)的零矩阵,即6×6的零矩阵记作o;根据矩阵h、i、o,拼接出一个新的矩阵w,如下所示:s2、对码字中每一个元素赋予一个从0开始的递增整数编号:0、1、2、...;将发生错误元素的编号位置集合,记作errids,即集合1,2,4,5;按顺序从errids中取出一个元素编号,记作eid,分别等于1,2,4,5;s3、搜索矩阵w的第1列中等于1的所有行,记作dqrows,其中,行列编号均从0开始;然后遍历dqrows中的所有行编号,找出对应矩阵w中行重最小且编号大于等于dnum的编号,记作brow。第7列与第10列的行重相同的情况下,可任选一列,标记结果如下:s4、矩阵w中,将brow对应的行加到dqrows中其他所有编号对应的行,结果模2;s5、矩阵w中,将brow对应的行中的所有值置0,得出结果如下;s6、重复步骤s3到s5,直至所有errids中的所有对应的编号eid处理完成;即对于未知元素2、4、5作同样的操作,过程如下:元素2:元素4:元素5:s7、截取已转换后的w矩阵0到5行,形成一个新的矩阵,记作m,如下:矩阵m的每一列分别对应每一个元素,而m的每一行则分别对应一个数据元素;对于矩阵m的第i行,其中所有1元素所在的列序号对应的元素异或和即为第i个元素的值;即,根据矩阵m,每一个错误元素可以按如下公式计算恢复(其中‘+’代表异或):v(1)=v(0)+v(7)+v(9)v(1)=v(7)+v(9)v(2)=v(3)+v(8)v(4)=v(0)+v(6)v(5)=v(0)+v(9)实施例二当存在校验位上的错误时仍然使用实施例1中的存储阵列结构和校验元素生成方法,此次假设存储阵列中第2、3列发生错误后失效,即数据元素2、5和校验元素6、7变成未知。则具体步骤如下:s1如实施例1中,不在赘述:矩阵s2、对码字中每一个元素赋予一个从0开始的递增整数编号:0、1、2、...;将发生错误元素的编号位置集合,记作errids,即集合2,5,6,7;按顺序从errids中取出一个元素编号,记作eid,分别等于2,5,6,7;实施步骤s3到s5,并重复直至所有errids中的所有对应的编号eid处理完成;即对于未知元素2、5、6、7作同样的操作,得到如下:元素2:元素5:元素6:元素7:s7、截取已转换后的w矩阵0到5行,形成一个新的矩阵,记作m,如下:矩阵m的每一列分别对应每一个元素,而m的每一行则分别对应一个数据元素;对于矩阵m的第i行,其中所有1元素所在的列序号对应的元素异或和即为第i个元素的值;即,根据矩阵m,未知数据元素可以按如下公式计算恢复(其中‘+’代表异或):v(2)=v(3)+v(8)=1+0=1v(5)=v(1)=1此时所有未知数据元素2、5已经求得,再用编码的公式即可求得剩余的校验位置元素。v(6)=v(0)+v(4)=1+0=1v(7)=v(1)+v(5)=1+0=1以上结合对本发明进行了示例性描述,显然本发明具体实现并不受上述方式的限制,只要采用了本发明的方法构思和技术方案进行的各种非实质性的改进,或未经改进将本发明的构思和技术方案直接应用于其它场合的,均在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1