一种基于纠删码的数据块重建方法

文档序号:6636780阅读:484来源:国知局
一种基于纠删码的数据块重建方法
【专利摘要】一种基于纠删码的数据块重建方法,属于计算机存储【技术领域】,解决现有数据块修复方法需要传输大量数据的问题,以减少重建数据的传输量。本发明包括数据分块步骤、构造生成矩阵G步骤、生成校验块步骤、检查数据块状态步骤、构造修复矩阵步骤和修复数据块步骤。本发明将原始文件分为k个数据块,将每个数据块继续等分为r个数据片;k个数据块编码为m个校验块,每个校验块也包含r个校验片。重建任意一个数据块时,从剩余的每个数据块的r个数据片和校验块的r个校验片中取r/m片(该方法保证r被m整除),从而重建一个数据块只需要总量(m+k-1)r/m的数据片,相对里德-所罗门编码重建一个数据块的数据量,有了明显的减少。
【专利说明】一种基于纠删码的数据块重建方法

【技术领域】
[0001] 本发明属于计算机存储【技术领域】,具体涉及一种基于纠删码的数据块重建方法, 可减少重建数据传输。

【背景技术】
[0002] 从RAID(独立硬盘冗余阵列)到分布式存储系统,纠删码广泛应用于存储系统中, 用于防止部分数据丢失或数据服务器宕机导致的数据不可访问。
[0003] 纠删码是一种数据保护的编码方法,它首先将原始数据分为等大的数据块,然后 再将数据块编码为校验块。当若干个数据块或校验块丢失时,纠删码技术保证原始数据仍 然可以恢复。
[0004] 传统的编码方法将原始数据等分为k份数据块,编码生成m份校验块并将它们存 储在k+m个不同的存储节点。存储节点是存储设备的逻辑抽象,既可以是一个磁盘也可以 是一个存储服务器。所有(k+m)块数据块和校验块中的任意k块都可以重建出k个数据块。 但是这类纠删码也面临着一个修复带宽问题:重建一个数据块需要该数据块大小的k倍磁 盘I/O和网络流量,占用大量的存储资源和网络资源。
[0005] 以(n,k)里德-所罗门编码为例,η是数据块和校验块的总个数,k是数据块个 数,m = n-k是校验块个数。当使用(n,k)里德-所罗门编码对数据量为M的文件进行编 码时,首先将文件等分为k个数据块:DpDp. .. ,每个数据块大小为M/k,接着计算生成 矩阵和k个数据块的乘积(计算基于有限域),得到m个校验块CtlX1、…、Clrt,每个校验块 大小也是M/k。(n,k)里德-所罗门编码的生成矩阵是一个基于有限域GF(2W)的m行k列 的矩阵,该矩阵可以是变换后的范德尔蒙德矩阵(Vandermonde matrix),也可以是柯西矩 阵(Cauchy matrix)。当一个数据块或校验块失效时,需要重建数据块或校验块以保证可靠 性。如果失效的是校验块,利用k块数据块可以重新编码得到;如果失效的是数据块,利用 剩余n-1块数据块和校验块中的任意k块可重建该数据块。无论是失效的是一块数据块还 是一块校验块,都需要k块整块数据块或校验块进行重建,所需要的数据量是M。
[0006] 现有减少单数据节点失效所需重建数据量的编码方法往往牺牲了最优的存储 效率或者最大距离可分(MDS)性质。简单再生码(Simple Regenerating Codes,见论 文:〃Simple regenerating codes :Network coding for cloud storage. "INFOCOM, 2012Pr〇ceedings IEEE. IEEE,2012.)在每个存储节点多存储1/f的数据量,f越大,额外的 存储开销越小,但相应的修复带宽也越大,反之亦然。局部重建码(Local Reconstruction Codes,见论文:"Erasure Coding in Windows Azure Storage. ^USENIX Annual Technical Conference. 2012.)将数据块分组,不仅在组内进行编码,并在组间进行编码,这样可以将 大部分单点失效的重建局限在组内进行,从而减少了重建数据量,但局部重建码需要额外 的存储开销,且不满足MDS性质。功能性最小存储再生码(Functional Minimum Storage Regenerating codes,见论文:NCCloud :A Network-Coding-Based Storage System in a Cl〇ud-〇f-Cl〇uds[J]. 2013.)虽然存储和修复单个节点失效所需要的数据量都是最优的, 但存在计算开销大,且保存的不是原来的数据,因此读取数据时需要解码等缺点。


【发明内容】

[0007] 本发明提供一种基于纠删码的数据块重建方法,解决现有数据块修复方法需要传 输大量数据的问题,以减少重建数据的传输量。
[0008] 本发明所提供的一种基于纠删码的数据块重建方法,包括数据分块步骤、构造生 成矩阵G步骤、生成校验块步骤、检查数据块状态步骤、构造修复矩阵步骤和修复数据块步 骤,其特征在于:
[0009] (1)数据分块步骤:
[0010] 将数据量为M的原始文件等分为k个数据块IV j = 0.....k-1,再将k个数据块 分别保存在k个数据节点上,进而将各数据节点上的数据块等分为r个数据片D M,P = 〇.....r-1,r = mH,k彡2, m彡2 ;等分过程中不足部分用0补齐并记录不足数据块或数 据片的长度;
[0011] 对所有数据片赋予序号,数据片I^p为第jXr+p+l个数据片;
[0012] (2)构造生成矩阵G步骤:
[0013] 生成矩阵G是m行、k列的分块矩阵,包括mX k个子矩阵Gi,

【权利要求】
1. 一种基于纠删码的数据块重建方法,包括数据分块步骤、构造生成矩阵G步骤、生成 校验块步骤、检查数据块状态步骤、构造修复矩阵步骤和修复数据块步骤,其特征在于: (1) 数据分块步骤: 将数据量为M的原始文件等分为k个数据块j=O.....k-1,再将k个数据块分别保 存在k个数据节点上,进而将各数据节点上的数据块Dj等分为r个数据片Dj>p,p=O..... r-1,r=k多2,m多2 ;等分过程中不足部分用O补齐并记录不足数据块或数据片的 长度; 对所有数据片赋予序号,数据片Ip为第jXr+ρ+Ι个数据片; (2) 构造生成矩阵G步骤: 生成矩阵G是m行、k列的分块矩阵,包括mXk个子矩阵Gi, j:
其中,每个子矩阵G._ 为一个r行、
r列的方阵,满足下面等式: 其中,(g表示矩阵的张量乘(也称为Kronecker乘),I111表示m行、m列的单位矩阵,/= 表示单位矩阵Im所有元素循环左移i位后的结果,当i= 〇时,=/m,(tf表示j 个G连续张量乘的结果,αμ是(m+k,k)_里德-所罗门编码生成矩阵中第i行第j列元 素; (3) 生成校验块步骤: 分别计算生成矩阵G中各行子矩阵和所有数据块的乘积,得到m个校验块Ci,i= 0?m-Ι,再将m个校验块分别保存在m个数据节点上,第i个校验块Ci为生成矩阵G的第i行 子矩阵与k个数据块的乘积:
校验块(^再等分为r个校验片CiP,p= 0?r-Ι;对所有校验片赋予序号,校验片Cj,P为第iXr+ρ+Ι个校验片; (4) 检查数据块状态步骤: 定期依次检查各数据节点上的数据块是否出错或丢失,是则转步骤(5);否则不作处 理; (5) 构造修复矩阵步骤,包括下述子步骤: (5. 1)当第i个数据节点上的数据块Di出错或丢失,将生成矩阵G中第i列的子矩阵 全设置为〇,构成第一中间矩阵Ga; (5.2)在第一中间矩阵Ga中选取任意一个非零子矩阵,在该非零子矩阵中选取任意一 个非零矩阵元素作为种子,在第一中间矩阵Ga*标记该非零矩阵元素所在的行向量与列向 量; (5. 3)对所标记的行向量与列向量中的每个非零矩阵元素,在第一中间矩阵Ga中标记 该非零矩阵元素所在的行向量和列向量; (5.4) 判断是否有新的行向量和列向量被标记,是则转子步骤(5. 3),否则进行子步骤 (5. 5); (5.5) 构成修复矩阵Mr: 首先生成一个kXr行,kXr列的单位矩阵Gb; 将第一中间矩阵Ga标记的列向量序号作为行向量序号,从单位矩阵Gb中选取对应的行 向量,作为第一行向量组; 将第一中间矩阵Ga标记的行向量序号作为行向量序号,从生成矩阵G中选取对应的行 向量,作为第二行向量组; 将所述第一行向量组置于第二行向量组之上,构成第二中间矩阵G。,将第二中间矩阵G。中全零列删除得到正方矩阵Gd,然后从正方矩阵&的逆矩阵Gy1中选择从iXr/m开始的 r个行向量,构成r行、(k+m-1)Xr/m列的修复矩阵凡; (6) 修复数据块步骤: 选取第一中间矩阵Ga标记的列向量的列序号作为数据片序号,其所对应的各数据片作 为数据片序列SW,数据片数量为(k-1)Xr/m,选取第一中间矩阵GA#记的行向量的行序号 作为校验片序号,其所对应的各校验片作为校验片序列SC;,校验片数量为mXr/m; 通过计算凡和数据片序列SDdP校验片序列SQ的乘积重建数据块Di:
【文档编号】G06F11/14GK104461781SQ201410717059
【公开日】2015年3月25日 申请日期:2014年12月1日 优先权日:2014年12月1日
【发明者】冯丹, 柳青, 施展, 李剑, 欧阳梦云 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1