一种基于网络编码的分布式存储方法及其装置与流程

文档序号:12039482阅读:来源:国知局
一种基于网络编码的分布式存储方法及其装置与流程

技术特征:
1.一种基于网络编码的分布式存储方法,适用于分布式存储系统,包括数据编码步骤、数据解码步骤和数据修复步骤,分布式存储系统由一个名字节点NS和P个存储节点{DS1,DS2,DS3...DSP}构成,P≥3,其中用于存储文件分块的存储节点称为数据节点,为n个,3≤n≤P;其特征在于:(1)数据编码步骤,包括下述子步骤:(1.1)数据分块:将原始文件D分割为c块等大小的原始数据块Dg,g=0,1...c-1,对于不足一块原始数据块大小的剩余原始数据DB,先记下DB的大小LB,再将其使用零填充补足为原始数据块大小,作为原始数据块Dc-1;c=k×(d+1+i-k)-(i+1)×i/2,其中,k为恢复出原文件所需最少数据节点数目,2≤k<n;d为修复一个损坏节点时可用数据节点的数目,k≤d<n;i为编码冗余参数,0≤i≤k-1;(1.2)冗余编码:将c个原始数据块Dg与编码矩阵Me进行有限域2q内的运算,编码为r个编码数据块Cb,q=4、8、16、32或64;b=0,1,...r-1;r=(d+1+i-k)×n;其中,编码矩阵Me中的矩阵元素ab,g为属于有限域2q的整数,0≤ab,g≤2q-1,编码矩阵Me为一个r行c列的范德蒙矩阵;每个Cb都是c个原始数据块Dg的线性组合,其中g=0,1...c-1,线性组合系数对应为编码矩阵Me第b行的行向量Vb,即每个Cb对应编码矩阵Me第b行的行向量Vb;(1.3)生成元数据文件Dmeta:将编码矩阵Me以及参数n、k、d、i、q和LB保存在元数据文件Dmeta中;(1.4)数据存储:将r个编码数据块Cb存放在n个数据节点df上,f=0,1,...n-1,每个数据节点存储α=d+1+i-k个编码数据块,并存储一份Dmeta的副本;数据节点df存储的数据块为Ct,t=f×α,f×α+1,...(f+1)α-1;(2)数据解码步骤,包括下述子步骤:(2.1)获取文件元数据信息:下载原始文件D的元数据文件Dmeta,得到编码矩阵Me以及参数n、k、d、i、q和LB;(2.2)下载可用数据块:判断n个数据节点中可用数据节点数是否小于k个,是则数据读取失败,退出;否则任意选择k个可用数据节点,k个可用数据节点中包含rk=k×α=k×(d+1+i-k)个编码数据块,共对应编码矩阵Me中rk个行向量:Vb1,Vb2...Vbrk;从编码矩阵Me这rk个行向量中选择c个行向量,要求这c个行向量组成的方阵Me1可逆,然后下载这c个行向量所对应的c个编码数据块:Cb0,Cb1...Cb(c-1);(2.3)冗余解码:对所述方阵Me1矩阵求逆,得到其逆矩阵Me1-1,逆矩阵Me1-1中元素记为bgj,其中行数g=0,1,...c-1,列数j=0,1,...c-1;将逆矩阵Me1-1与下载的c个编码数据块做有限域2q内的运算,得到c个原始数据块Dg,其中g=0,1...c-1;Dg为c个编码数据块Cb0,Cb1...Cb(c-1)的线性组合,线性组合的系数为逆矩阵Me1-1对应的行向量Vdg;(2.4)恢复数据:将冗余解码后得到的c个原始数据块Dg按其下标的顺序D0,D1...Dc-1依次写入到恢复文件DO中,最后一块原始数据块Dc-1只写其前LB个字节到恢复文件DO中,形成恢复文件DO;(3)数据修复步骤,当一个数据节点dv损坏时,v为0、1、...或n-1,其存储的编码数据块的修复包括下述子步骤:(3.1)获取文件元数据信息:下载原始文件D的元数据文件Dmeta,得到编码矩阵Me以及参数n、k、d、i、q和LB;设置下载数据块数目变量γ的初值:γ=(2×c×d)/((2×k-i-1)×i+2×k×(d-k+1));(3.2)计算数据块修复信息,包括下述过程:(3.2.1)置循环次数变量N1=0,判断n个数据节点中可用数据节点数是否小于d个,是则数据修复失败,退出;否则进行过程(3.2.2);(3.2.2)从d个可用数据节点中随机选择γ个编码数据块,将它们对应的编码矩阵Me的γ个行向量Vh组合为γ行c列矩阵Vs,h=1,2...γ;置N1=N1+1;(3.2.3)生成一个(d+1+i-k)行γ列的修复矩阵Mr=[mp,h],其中每个元素mp,h从有限域2q内随机取值,p=1,2,...(d+1+i-k),h=1,2,...γ;(3.2.4)建立r行c列的新编码矩阵Me’,Me’由原有行向量和新行向量V′p构成,原有行向量为可用数据节点所包括的编码数据块对应的编码矩阵Me中的行向量,按其在Me中原有位置存在于Me’中,做有限域2q内的矩阵Mr与矩阵Vs乘法运算,得到新行向量V′p:用新行向量V′p代替编码矩阵Me中损坏的数据节点dv所存储的α个编码数据块对应的行向量Vz,其中z=v×α,v×α+1,...(v+1)×α-1;(3.2.5)检查所述新编码矩阵Me’是否满足MDS性质,是则进行子步骤(3.3),否则进行过程(3.2.6);所述MDS性质中文为最大距离可分性质,即n个节点中任意k个节点的数据可以恢复出原文件的数据;(3.2.6)判断是否N1≤L,是则转过程(3.2.2);否则置N1=0,置γ=γ+1,然后转过程(3.2.2),最大循环次数L=1000~3000;(3.3)更新元数据文件:将元数据文件Dmeta中的编码矩阵Me替换为新编码矩阵Me’,形成更新后的元数据文件Dmeta’,将其拷贝到各个数据节点;(3.4)修复数据块:下载过程(3.2.2)中所随机选择的γ个编码数据块Ce1,Ce2,...Ceγ,做有限域2q内矩阵Mr与γ个编码数据块Ce1,Ce2,...Ceγ的运算,得到修复的数据块Cp’:Cp’为γ个编码数据块Ce1,Ce2,...Ceγ的线性组合,线性组合的系数为修复矩阵Mr对应的行向量Vrp;(3.5)存储数据块:将修复的数据块Cp’存储到一个新的可用数据节点上。2.一种基于网络编码的分布式存储装置,适用于分布式存储系统,包括数据编码模块、数据解码模块和数据修复模块;分布式存储系统由一个名字节点NS和P个存储节点{DS1,DS2,DS3...DSP}构成,P≥3,其中用于存储文件分块的存储节点称为数据节点,为n个,3≤n≤P;其特征在于:(1)数据编码模块,包括下述子模块:(1.1)数据分块子模块:将原始文件D分割为c块等大小的原始数据块Dg,g=0,1...c-1,对于不足一块原始数据块大小的剩余原始数据DB,先记下DB的大小LB,再将其使用零填充补足为原始数据块大小,作为原始数据块Dc-1;c=k×(d+1+i-k)-(i+1)×i/2,其中,k为恢复出原文件所需最少数据节点数目,2≤k<n;d为修复一个损坏节点时可用数据节点的数目,k≤d<n;i为编码冗余参数,0≤i≤k-1;(1.2)冗余编码子模块:将c个原始数据块Dg与编码矩阵Me进行有限域2q内的运算,编码为r个编码数据块Cb,q=4、8、16、32或64;b=0,1,...r-1;r=(d+1+i-k)×n;其中,编码矩阵Me中的矩阵元素ab,g为属于有限域2q的整数,0≤ab,g≤2q-1,编码矩阵Me为一个r行c列的范德蒙矩阵;每个Cb都是c个原始数据块Dg的线性组合,其中g=0,1...c-1,线性组合系数对应为编码矩阵Me第b行的行向量Vb,即每个Cb对应编码矩阵Me第b行的行向量Vb;(1.3)生成元数据文件Dmeta子模块:将编码矩阵Me以及参数n、k、d、i、q和LB保存在元数据文件Dmeta中;(1.4)数据存储子模块:将r个编码数据块Cb存放在n个数据节点df上,f=0,1,...n-1,每个数据节点存储α=d+1+i-k个编码数据块,并存储一份Dmeta的副本;数据节点df存储的数据块为Ct,t=f×α,f×α+1,...(f+1)α-1;(2)数据解码模块,包括下述子模块:(2.1)获取文件元数据信息子模块:下载原始文件D的元数据文件Dmeta,得到编码矩阵Me以及参数n、k、d、i、q和LB;(2.2)下载可用数据块子模块:判断n个数据节点中可用数据节点数是否小于k个,是则数据读取失败,退出;否则任意选择k个可用数据节点,k个可用数据节点中包含rk=k×α=k×(d+1+i-k)个编码数据块,共对应编码矩阵Me中rk个行向量:从编码矩阵Me这rk个行向量中选择c个行向量,要求这c个行向量组成的方阵Me1可逆,然后下载这c个行向量所对应的c个编码数据块:Cb0,Cb1...Cb(c-1);(2.3)冗余解码子模块:对所述方阵Me1矩阵求逆,得到其逆矩阵Me1-1,逆矩阵Me1-1中元素记为bgj,其中行数g=0,1,...c-1,列数j=0,1,...c-1;将逆矩阵Me1-1与下载的c个编码数据块做有限域2q内的乘法运算,得到c个原始数据块Dg,其中g=0,1...c-1;Dg为c个编码数据块Cb0,Cb1...Cb(c-1)的线性组合,线性组合的系数为逆矩阵Me1-1对应的行向量Vdg;(2.4)恢复数据子模块:将冗余解码后得到的c个原始数据块Dg按其下标的顺序D0,D1...Dc-1依次写入到恢复文件DO中,最后一块原始数据块Dc-1只写其前LB个字节到恢复文件DO中,形成恢复文件DO;(3)数据修复模块,当一个数据节点dv损坏时,v为0、1、...或n-1,其存储的编码数据块的修复包括下述子模块:(3.1)获取文件元数据信息子模块:下载原始文件D的元数据文件Dmeta,得到编码矩阵Me以及参数n、k、d、i、q和LB;设置下载数据块数目变量γ的初值:γ=(2×c×d)/((2×k-i-1)×i+2×k×(d-k+1));(3.2)计算数据块修复信息子模块,包括下述单元:第一单元,置循环次数变量N1=0,判断n个数据节点中可用数据节点数是否小于d个,是则数据修复失败,退出;否则转第二单元;第二单元,从d个可用数据节点中随机选择γ个编码数据块,将它们对应的编码矩阵Me的γ个行向量Vh组合为γ行c列矩阵Vs,h=1,2...γ;置N1=N1+1;第三单元,生成一个(d+1+i-k)行γ列的修复矩阵Mr=[mp,h],其中每个元素mp,h从有限域2q内随机取值,p=1,2,...(d+1+i-k),h=1,2,...γ;第四单元,建立r行c列的新编码矩阵Me’,Me’由原有行向量和新行向量V′p构成,原有行向量为可用数据节点所包括的编码数据块对应的编码矩阵Me中的行向量,按其在Me中原有位置存在于Me’中,做有限域2q内的矩阵Mr与矩阵Vs乘法运算,得到新行向量V′p:用新行向量V′p代替编码矩阵Me中损坏的数据节点dv所存储的α个编码数据块对应的行向量Vz,其中z=v×α,v×α+1,...(v+1)×α-1;第五单元,检查所述新编码矩阵Me’是否满足MDS性质,是则转更新元数据文件子模块,否则转第六单元;所述MDS性质中文为最大距离可分性质,即n个节点中任意k个节点的数据可以恢复出原文件的数据;第六单元,判断是否N1≤L,是则转第二单元;否则置N1=0,置γ=γ+1,然后转第二单元,最大循环次数L=1000~3000;(3.3)更新元数据文件子模块:将元数据文件Dmeta中的编码矩阵Me替换为新编码矩阵Me’,形成更新后的元数据文件Dmeta’,将其拷贝到各个数据节点;(3.4)修复数据块子模块:下载所述第二单元中所随机选择的γ个编码数据块Ce1,Ce2,...Ceγ,做有限域2q内矩阵Mr与γ个编码数据块Ce1,Ce2,...Ceγ的运算,得到修复的数据块Cp’:Cp’为γ个编码数据块Ce1,Ce2,...Ceγ的线性组合,线性组合的系数为修复矩阵Mr对应的行向量Vrp;(3.5)存储数据块子模块:将修复的数据块Cp’存储到一个新的可用数据节点上。
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1