发明内容
针对现有技术存在的问题,本发明的主要目的在于提供一种冗余度低且具备较强容灾能力的网络分布式编码存储方法。
为实现上述目的,本发明提供了一种网络分布式编码存储方法,将文件保存至分布式系统中的n个服务器中,其中n≥4,且容许≤t/2个服务器出错时仍然能够保证存储数据的安全性并正常提供服务,该网络分布式编码存储方法一实施例包括如下步骤:
(1)对n个服务器进行编号j,0≤j≤n-1;
(2)将欲分存入服务器的各个文件都均分为(n-t)×n个小块信息块,标记为ai,j,其中0≤i<n-t,0≤j<n,当无法均分数据文件时,在文件后面补零直至可以均分;
(3)生成一个参数为(n-t,n-1,t,(n-t)×t/(n-1))的码,即在一个(n-t)×(n-1)的矩阵中选取(n-t)×t个元素,使得每行有且只有t个元素值为1,而每列可以有
或
个值为1的元素。具体方法如下:①生成一个(n-t)×(n-1)的矩阵A,将第0列至第t-1列的所有元素赋值为1,其他元素赋值为0;②对t≤j<n-1,计算矩阵A第j列的权重x
j,即数值为1的个数,如果第j列的权重x
j小于(n-t)×t/(n-1),必然存在a
i,j=0,a
i,j′=1使得列j′的数值为1的个数>(n-t)×t/(n-1),其中0≤j′<n-1,且j′≠j,则赋值a
i,j=1,a
i,j′=0;③计算矩阵A每一列的权重的均值
并计算矩阵A列重量的方差的平方
④其中在进行步骤②之前先计算得到矩阵A最初的列重量的方差,然后重复步骤②,计算步骤②元素赋值后矩阵A列重量的方差并每计算得到一次方差,均与前一次方差进行比较,直到矩阵A列重量的方差保持不变,则得到参数为(n-t,n-1,t,(n-t)×t/(n-1))的码;
(4)随机记录步骤(3)所得到的编码矩阵A中所有值为1的元素坐标[p,q]为一个二元组合,将取得的二元组合保存为一个t×(n-t)的二维矩阵;
(5)根据步骤(4)得到的二维矩阵,其对应的信息块为ap,(q+j+1)mod n,将二维矩阵每一行所对应的信息块进行异或和操作即可获得一校验块,ai,j=⊕ap,(q+j+1)mod n,其中n-t≤i<n,0≤j<n,根据相同的方法对于原文件信息块的每一列均产生t块校验块,共有t×n块校验块;
(6)在每n-t小块原文件信息块后添加t小块校验块组成文件块,共同构成一个n×n的二维矩阵组;
(7)把步骤(6)中的二维矩阵组第j列的分块对应存储到第j号服务器中,分存成功。
另外,当需要读取数据时,则首先检测服务器是否存在出错或损毁;若服务器无出错或损毁,则按顺序拼接所有服务器的信息块,获取完整的原文件;若服务器存在出错或损毁,则通过现有服务器中存储的文件块译码获得缺失的信息块,再按顺序拼接信息块,获取完整的原文件,且译码获得缺失的信息块后,可将恢复的信息块进行二次容错编码,将二次容错编码后生成的文件块存储至新服务器中,以达到系统的可持续容灾。
而通过现有服务器中存储的文件块译码获得缺失的信息块,具体包括如下步骤:
(1)构造一个(n-t)×n的文件块二维数组,在相应的位置记录缺失的信息块,标记为“无”,而未缺失的信息块位置标记为“有”,记录剩余校验块的“度”,其中每块信息块视作“度为1”,而校验块的“度”由进行异或操作的信息块的数量得到;
(2)对所有“度”不等于0的校验块,检查它所校验的信息块是否缺失,将未缺失的信息块与相应校验块进行异或,每进行一次异或操作,将校验块的“度”减1,获得的“度”为1的校验块即为对应的缺失信息块,在文件块二维数组中将该恢复的信息块的位置标记改为“有”,同时将该校验块的“度”置为0,并丢弃;
(3)重复步骤(2),将新获得的信息块与相应校验块进行异或,降低“度”值,恢复出其它丢失的信息块,直到文件块二维数组中信息块的位置全标记为“有”;
(4)当文件块二维数组中信息块的位置全标记为“有”时,即得到原文件的所有信息块,译码成功。
本发明相对于现有技术,首先,由于在数据分存过程中增加了编码,且通过译码进行恢复数据,而无论是编码操作还是译码操作也只是在有限域上的简单异或和,并没有复杂计算,也没有增加过多的步骤,这样系统复杂度大大降低,没有增加太多的时间消耗,能满足“常写常读”的环境;其次,在空间上,可以将存储的信息视为共有n块,其中k块为原文件信息块,t块为校验块,k+t=n,采用本编码方法生成的t<k,因此冗余比例n∶k<2(即存储空间不到原文件大小的两倍),且容灾能力可达t/2(即当有少于t/2的服务器出现故障或遭遇损毁时,完全可以利用剩余服务器中存储的文件块进行恢复得到所有的原始数据文件),冗余度低但具备较强的容灾能力;再次,恢复某原文件后立即对该文件进行二次编码并存储至新服务器中,这样能达到可持续容灾的能力。
具体实施方式
下面结合附图,详细说明本发明的具体实施方式。
图1为本发明的分布式系统一实施例的组织结构示意图,本发明的网络分布式编码存储方法可应用于由若干服务器、PC机等组成的广域网或局域网环境中,由此形成网络分布式存储系统。
如图2所示,为本发明网络分布式编码存储方法流程图。使用该方法可将文件保存至如图1所示的网络分布式存储系统中,该网络分布式存储系统包含n个服务器,其中n≥4,且容许≤t/2个服务器出错时仍然能够保证存储数据的安全性并正常提供服务,则该网络分布式编码存储方法包括如下步骤:
S21、对n个服务器进行编号j,0≤j≤n-1;
S22、将欲存储的原文件均分成(n-t)×n个小块信息块,标记为ai,j,其中0≤i<n-t,0≤j<n,当无法均分数据文件时,在文件后面补零直至可以均分。如图3所示,为本发明原文件分块示意图,即首先将原文件分成(n-t)×n个小块,按顺序为块0、块1、块2,直至块(n-t)*n-3、(n-t)*n-2、(n-t)*n-1,其次将这(n-t)×n个小块信息块依次按(n-t)×n的二维矩阵排列,可以按行分排,也可以按列分排。如按行分排,则将信息块按顺序首先排满第一行,再排第二行,直至第n-t行,即将块0排列为a0,0,块1排列为a0,1,......块n-1排列为a0,n-1,而块n排列为第二行第一列,即a1,0,依次类推,直至an-t-1,n-1;如按列排列,则将信息块按顺序首先排满第一列,再排第二列,直至第n-1列,即将块0排列为a0,0,块1排列为a1,0,......块n-t排列为an-t-1,0,而块n-t+1排列为第一行第二列,即a0,1,依次类推,直至an-t-1,n-1;
S23、通过容错编码方法产生t×n个小块的校验块,具体包含步骤(1)~步骤(3)这三个步骤:
步骤(1)、生成一个参数为(n-t,n-1,t,(n-t)×t/(n-1))的码,即在一个(n-t)×(n-1)的矩阵中选取(n-t)×t个元素,使得每行有且只有t个元素值为1,而每列可以有
或
个值为1的元素。具体方法如下:①生成一个(n-t)×(n-1)的矩阵A,将第0列至第t-1列的所有元素赋值为1,其他元素赋值为0;②对t≤j<n-1,计算矩阵A第j列的权重x
j,即数值为1的个数,如果第j列的权重x
j小于(n-t)×t/(n-1),必然存在a
i,j=0,a
i,j′=1使得列j′的数值为1的个数>(n-t)×t/(n-1),其中0≤j′<n-1,且j′≠j,则赋值a
i,j=1,a
i,j′=0;③计算矩阵A每一列的权重的均值
并计算矩阵A列重量的方差的平方
④其中在进行步骤②之前先计算得到矩阵A最初的列重量的方差,然后重复步骤②,计算步骤②元素赋值后矩阵A列重量的方差并每计算得到一次方差,均与前一次方差进行比较,直到矩阵A列重量的方差保持不变,则得到参数为(n-t,n-1,t,(n-t)×t/(n-1))的码;
步骤(2)、随机记录步骤(1)所得到的编码矩阵A中所有值为1的元素坐标[p,q]为一个二元组合,将取得的二元组合保存为一个t×(n-t)的二维矩阵;
步骤(3)、根据步骤(2)得到的二维矩阵,其对应的信息块为ap,(q+j+1)mod n,将二维矩阵每一行所对应的信息块进行异或和操作即可获得一校验块,ai,j=⊕ap,(q+j+1)mod n,其中n-t≤i<n,0≤j<n,根据相同的方法对于原文件信息块的每一列均产生t块校验块,共有t×n块校验块;
如图4所示,为本发明校验块生成示意图,当信息块按ai,j(0≤i<n-t,0≤j<n)的二维矩阵排列好后,再按照步骤S23所述的编码方法对信息块进行异或和操作,得到t×n块校验块。
S24、在每n-t小块信息块后添加t小块校验块构成文件块,共同构成一个n×n的二维矩阵组,如图4所示,每一列的前n-t块为信息块,后t块为校验块;
S25、按编号顺序将文件块存储至n个服务器中,把矩阵组第j列的分块对应存储到第j号服务器中,分存成功。如图5所示,为本发明文件块存储示意图。将信息块a0,0~信息块an-t-1,0,及其校验块an-t,0~校验块an-1,0存入服务器0,直至将信息块a0,n-1~信息块an-t-1,n-1,及其校验块an-t,n-1~校验块an-1,n-1存入服务器n,分存完毕。
如图6所示,为本发明数据读取及容灾能力恢复流程图,具体包括如下步骤:
S61、当需要读取数据时,首先检测服务器是否存在出错或损毁,若服务器无出错或损毁,则至S62,否则,至S63;
S62、按顺序拼接所有服务器的信息块;
S64、获取完整的原文件。
如图7所示,为本发明无服务器出错时数据读取示意图。首先,获取n个服务器中存储的文件块,其中包含(n-t)*n个信息块和t*n个校验块,共同组成n*n的二维矩阵;其次,将信息块取出按顺序排列,这里的排列即存储阶段步骤S22的反向操作。举例来说,若存储阶段步骤S22是按行分排,则此处即将a0,0恢复成块0,a0,1恢复成块1,......,a0,n-1恢复成块n-1,直至an-t-1,n-1恢复成块(n-t)*n-1;若存储阶段步骤S22是按列分排,此处则将a0,0恢复成块0,a1,0恢复成块1,......,an-t-1,0恢复成块n-t,直至an-t-1,n-1恢复成块(n-t)*n-1;最后将块0、块1......块(n-t)*n-2、块(n-t)*n-1按顺序合并即获得完整的原文件。
S63、译码获取缺失的信息块,该译码过程包括如下步骤(1)~步骤(4):
步骤(1)、构造一个(n-t)×n的文件块二维数组,在相应的位置记录缺失的信息块,标记为“无”,而未缺失的信息块位置标记为“有”,记录剩余校验块的“度”,其中每块信息块视作“度为1”,而校验块的“度”由进行异或操作的信息块的数量得到;
步骤(2)、对所有“度”不等于0的校验块,检查它所校验的信息块是否缺失,将未缺失的信息块与相应校验块进行异或,每进行一次异或操作,将校验块的“度”减1,获得的“度”为1的校验块即为对应的缺失信息块,在文件块二维数组中将该恢复的信息块的位置标记改为“有”,同时将该校验块的“度”置为0,并丢弃;
步骤(3)、重复步骤(2),将新获得的信息块与相应校验块进行异或,降低“度”值,恢复出其它丢失的信息块,直到文件块二维数组中信息块的位置全标记为“有”;
步骤(4)、当文件块二维数组中信息块的位置全标记为“有”时,即得到原文件的所有信息块,译码成功。
如图8所示,为本发明有服务器出错时译码恢复信息块示意图,按照步骤S63的译码过程将现有的信息块和相应的校验块进行异或操作来获取丢失的信息块并放在相应的位置。
S62、按顺序拼接所有服务器的信息块和通过译码恢复的信息块;
S64、获取完整的原文件。
如图9所示,为本发明有服务器出错或损毁时数据读取示意图。首先,获取目前现有的服务器中存储的文件块,包括信息块和校验块,如服务器j出错或损毁,则服务器j中存储的信息块a0,j~信息块an-t-1,j,及其校验块an-t,j~校验块an-1,j均丢失;其次,按照步骤S63的译码过程利用现有的信息块和相应的校验块进行异或操作来获取丢失的信息块,如恢复本例中服务器j对应的信息块a0,j~信息块an-t-1,j,并将其排在服务器j对应的位置;再次,将所有信息块取出按顺序排列,这里排列方法与图7中本发明无服务器出错时数据读取时的排列方法相同,这里不再赘述。最后,将块0、块1......块(n-t)*n-2、块(n-t)*n-1按顺序合并即获得完整的原文件。
S65、二次编码获得缺失的文件块。即当译码获得缺失的信息块后,采用与图2中步骤S23相同的方法进行二次编码,恢复丢失的校验块,如服务器j丢失或损毁,即通过译码方法获得缺失的信息块a0,j~信息块an-t-1,j后,再采用二次容错编码产生缺失的校验块an-t,j~校验块an-1,j,将校验块an-t,j~校验块an-1,j放在信息块a0,j~信息块an-t-1,j的后面,使服务器j中丢失的文件块完全恢复;
S66、将编码获得的文件块存储至新服务器中,以达到系统的可持续容灾。
如图10所示,为本发明有服务器出错时容灾能力恢复示意图。当检测到服务器存储出错或损毁时,首先,获取目前现有的服务器中存储的文件块,包括信息块和校验块,如服务器j出错或损毁,则服务器j中存储的信息块a0,j~信息块an-t-1,j,及其校验块an-t,j~校验块an-1,j均丢失;其次,按照步骤S63的译码过程利用现有的信息块和相应的校验块进行异或操作来获取丢失的信息块,如本例中恢复服务器j对应的信息块a0,j~信息块an-t-1,j,并将其排在服务器j对应的位置;再次,采用与图2中步骤S23相同的方法进行二次编码,产生丢失的校验块,如本例中采用二次容错编码恢复缺失的校验块an-t,j~校验块an-1,j,将校验块an-t,j~校验块an-1,j放在信息块a0,j~信息块an-t-1,j的后面,使服务器j中丢失的文件块完全恢复;最后,准备新服务器j,将译码和二次编码后获得的文件块,即信息块a0,j~信息块an-t-1,j以及校验块an-t,j~校验块an-1,j存储至新服务器j中,以达到系统的可持续容灾。
下面对本发明的优选实施例作进一步的描述。
实施例1
在广域网上(也可为局域网)设置一个包含n=31个服务器的网络分布式系统,目标为当t/2=5个服务器出错时仍然能够保证存储数据的安全性并提供正常服务,此时t=10。
所述网络分布式编码存储方法包括如下步骤:
对31个服务器进行编码j,0≤j≤30;
对欲存储入服务器的各个文件进行分块处理,通过补零均分为21×31块,记为a0,0,a0,1,…a1,0,a1,1,…a20,0,…a20,30;
生成一个参数为(21,30,10,7)的码,具体方法如下:
构造一个21×30的矩阵A,将第0列至第9列的所有元素赋值为1,其它元素赋值为0,矩阵A如下所示:
计算上述矩阵A每一列的权重x
j,即值为1的元素数量:x
0~x
9=21,x
10~x
29=0;矩阵A每一列权重的平均值
矩阵A列重量的方差的平方初始值:
对j从列10到列29,计算矩阵A第j列的值为1的元素数量(x10~x29=0),如果第j列的数值为1的个数小于7,必然存在ai,j=0,ai,j′=1使得列j′的数值为1的个数>7,其中j′为在列0与列29之间的某一列,且j′≠j,则赋值ai,j=1,ai,j′=0,举例i从行(n-t)×t/(n-1),即行7开始计算,即赋值a7,10=1,a7,0=0,结果如下:
继续计算上述矩阵A每一列的权重x
j,此时x
0=20,x
1~x
9=21,x
10=1,x
11~x
29=0;矩阵A每一列权重的的平均值
矩阵A列重量的方差的平方:
判断元素赋值运算后的矩阵A列重量的方差S
1和最初的方差S
0是否相等,因二者不相等,继续计算i=8,依次类推,当第10列的数值为1的个数等于7时,结果如下:
根据相同的方法计算第11列,直到第29列,每进行一次元素赋值运算,便计算得到一次方差,将计算得到的方差与前一次方差进行比较,直到矩阵A列重量的方差保持不变,则得到参数为(21,30,10,7)的码,最终结果如下:
随机记录上述编码矩阵A中所有值为1的元素坐标,并保存为一个10×21二维二元组集合,该二维二元组集合举例如下:
Array1=[0,0][1,0][3,0][4,0][5,7][11,10][12,10][9,10][12,12][13,14][14,20][18,20][15,20][19,20][20,20][18,21][14,21][19,22][15,22][20,24][15,28]
Array2=[6,0][2,0][5,0][0,1][4,1][1,1][4,2][1,2][3,2][10,10][13,10][9,11][9,12][9,13][9,14][12,17][17,20][19,21][18,22][15,23][14,26]
Array3=[5,1][3,1][2,1][5,2][1,3][4,3][1,4][1,7][7,10][8,10][10,11][11,11][13,11][8,11][9,15][11,19][15,21][20,21][19,23][15,24][15,25]
Array4=[6,1][0,2][3,3][5,3][0,3][4,4][3,4][1,5][4,5][1,6][7,11][13,12][11,12][8,13][13,13][11,13][13,15][16,20][17,21][17,22][15,26]
Array5=[6,2][6,3][0,4][5,4][6,4][6,5][4,6][12,11][8,12][7,12][12,13][12,14][9,16][13,16][9,17][9,19][16,21][20,22][14,22][17,23][20,23]
Array6=[2,2][3,5][0,5][6,6][4,7][5,8][1,8][4,8][1,9][10,12][10,16][8,17][9,18][16,22][16,23][19,24][20,25][20,26][15,27][20,27][15,29]
Array7=[2,3][2,4][5,5][0,6][6,7][0,7][6,8][6,9][7,13][10,13][8,14][10,14][12,15][10,15][13,17][14,23][17,24][14,24][16,24][19,25][19,26]
Array8=[3,6][0,8][4,9][0,9][7,14][11,14][7,15][7,16][10,17][10,18][10,19][18,23][17,25][16,25][14,25][17,26][16,26][17,27][20,28][16,29][20,29]
Array9=[2,5][5,6][2,6][3,7][5,9][11,15][8,15][12,16][11,16][7,17][12,18][13,18][7,18][12,19][7,19][18,24][14,27][16,27][14,28][16,28][17,28]
Array10=[2,7][3,8][2,8][2,9][3,9][8,16][11,17][8,18][11,18][8,19][13,19][18,25][18,26][19,27][18,27][19,28][18,28][17,29][14,29][18,29][19,29]
该二元组集合所对应的信息块为ap,(q+j+1)mod n,将二元组集合每一行所对应的信息块进行异或和操作即可获得一校验块,即校验块ai,j=⊕ap,(q+j+1)mod n(21≤i<31,0≤j<31),该校验块记录为a21,0,a21,1,…a30,0…a30,30,举例如下:
Array1=[0,0][1,0][3,0][4,0][5,7][11,10][12,10][9,10][12,12][13,14][14,20][18,20][15,20][19,20][20,20][18,21][14,21][19,22][15,22][20,24][15,28]
则:a21,0=a0,1⊕a1,1⊕a3,1⊕a4,1⊕a5,8⊕a11,11⊕…⊕a20,25⊕a15,29,“度”为21;
Array2=[6,0][2,0][5,0][0,1][4,1][1,1][4,2][1,2][3,2][10,10][13,10][9,11][9,12][9,13][9,14][12,17][17,20][19,21][18,22][15,23][14,26]
则:a22,0=a6,1⊕a2,1⊕a5,1⊕a0,2⊕a4,2⊕a1,2⊕…⊕a15,24⊕a14,27,“度”为21;
……
Array4=[6,1][0,2][3,3][5,3][0,3][4,4][3,4][1,5][4,5][1,6][7,11][13,12][11,12][8,13][13,13][11,13][13,15][16,20][17,21][17,22][15,26]
则a24,20=a6,22⊕a0,23⊕a3,24⊕a5,24⊕a0,24⊕a4,25⊕…⊕a17,12⊕a15,16,“度”为21;
……
Array10=[2,7][3,8][2,8][2,9][3,9][8,16][11,17][8,18][11,18][8,19][13,19][18,25][18,26][19,27][18,27][19,28][18,28][17,29][14,29][18,29][19,29]
则a30,30=a2,7⊕a3,8⊕a2,8⊕a2,9⊕a3,9⊕a8,16⊕a11,17⊕…⊕a18,29⊕a19,29,“度”为21。
至此编码过程完成,共生成10×31块校验块。
由21×31块原文件信息块和10×31块校验块,共同构成一个31×31的二维矩阵组;
将信息块为a0,j~a20,j和校验块为a21,j~a30,j对应分存到服务器j中,直到31个服务器都分存完毕。此时该原文件存储过程结束,并满足容错5个服务器的能力。
当服务器无出错或损毁,即无任何数据丢失的情况下,若用户需要读取该原文件时,若原文件分块时按行排列,则依次读取信息块a0,0,a0,1,…a1,0,a1,1,…a20,0,…a20,30,进行串联合并即可得到原文件;若原文件分块时按列排列,则依次读取信息块a0,0,a1,0,…a0,1,a1,1,…a0,20,…a20,30,进行串联合并即可得到原文件。
当有服务器出错或损毁时,若用户需要读取该原文件,则首先需要译码出丢失的信息块。假如有5个服务器出错或损毁,里面存储的信息块和校验块均丢失时,假设编号为0,8,13,20,29的服务器出错,首先需要译码出编号为0,8,13,20,29的服务器中包含的信息块,方法如下(对存储于服务器中的每个信息块均采取下述方法):
构造一个21×31的文件信息块二维数组,在相应位置记录被删除的文件块,标记为“无”,而未删除的文件位置标记为“有”,记录剩余校验块的“度”,剩余校验块“度”的初始值为21;
选择一个剩余的“度”不为0的校验块,根据编码步骤中得到的10×21的二维二元组矩阵和上述步骤中的信息块二维数组中标记的信息块“有”、“无”值来检查它所校验的信息块是否丢失,将未丢失的信息块与相应校验块进行异或,每进行一次异或操作,将校验块的“度”减1,获得的“度”为1的校验块即为对应的缺失信息块,在文件信息块数组中将该恢复的信息块的位置标记改为“有”,同时将该校验块的“度”置为0,并丢弃,例如:
由a22,1=a6,2⊕a2,2⊕a5,2⊕a0,3⊕a4,3⊕a1,3⊕…⊕a9,13⊕…⊕a15,25⊕a14,28,该校验块a22,1,该校验块的“度”为21,可以发现a9,13信息块处于出错服务器13上,将现有的信息块a6,2、a2,2、a5,2、a0,3、a4,3、a1,3…a15,25、a14,28分别与a22,1异或,每进行一次异或操作,将校验块的“度”减1,直至校验块的度为“1”,则得到丢失的信息块a9,13,将文件信息块数组中位置为[9,13]的元素标记为“有”。另外,若某校验块对应的缺失的信息块数量不止一个,则某校验块与相应存在的信息块进行异或操作后不能马上得到缺失的信息块,此时需要将运算结果与相关的其它校验块继续进行异或操作,来降低“度”,直至“度”为1;
同理,依次由各个剩余“度”不为0的校验块恢复出丢失的信息块,直到文件信息块数组的文件位置全标记为“有”,至此所有信息块都已恢复,则译码过程成功。
译码成功后,再将所有的信息块,包括原有的和译码恢复的信息块重新按顺序排列即可得到原文件。若原文件分块时按行排列,则依次读取信息块a0,0,a0,1,…a1,0,a1,1,…a20,0,…a20,30,进行串联合并即可得到原文件;若原文件分块时按列排列,则依次读取信息块a0,0,a1,0,…a0,1,a1,1,…a0,20,…a20,30,进行串联合并即可得到原文件。
最后,准备5台新的服务器0、8、13、20、29,采用与上面所述相同的方法进行二次编码,产生丢失的校验块,即服务器0信息块对应的校验块为a21,0~a30,0,服务器8信息块对应的校验块为a21,8~a30,8,服务器13信息块对应的校验块为a21,13~a30,13,服务器20信息块对应的校验块为a21,20~a30,20,服务器29信息块对应的校验块为a21,29~a30,29,将校验块a21,0~a30,0放在信息块a0,0~a20,0的后面,使服务器0中丢失的文件块完全恢复,并放入服务器0中,以此类推,将恢复的文件块依次放入服务器8、13、20、29,以达到系统的可持续容灾。
实施例2
该实施例2与实施例1的区别在于在生成参数为(21,30,10,7)的码时,当j从列10到列29,第j列的数值为1的个数小于7时,元素的赋值运算i从第0行开始计算,下面只描述与实施例1的不同之处,相同之处不再赘述。
对j从列10到列29,计算矩阵A第j列的值为1的元素数量(x10~x29=0),如果第j列的数值为1的个数小于7,必然存在ai,j=0,ai,j′=1使得列j′的数值为1的个数>7,其中j′为在列0与列29之间的某一列,且j′≠j,则赋值ai,j=1,ai,j′=0,i从第0行开始计算,即赋值a0,10=1,a0,0=0,结果如下:
计算上述矩阵A每一列的权重x
j,此时x
0=20,x
1~x
9=21,x
10=1,x
11~x
29=0;矩阵A每一列权重的平均值
矩阵A列重量的方差的平方:
判断变换后的矩阵A列重量的方差S
1和最初的方差S
0是否相等,因二者不相等,继续计算i=2,依次类推,当第10列的数值为1的个数等于7,结果如下:
根据相同的方法计算第11列,直到第29列,每进行一次元素赋值运算,便计算得到一次方差,将计算得到的方差与前一次方差进行比较,直到矩阵A列重量的方差保持不变,则得到参数为(21,30,10,7)的码,最终结果如下:
以上介绍了网络分布式编码存储方法。但本发明并不限定于以上实施例,任何未脱离本发明技术方案,即仅仅对其进行本领域普通技术人员所知悉的改进或变更,均属于本发明的保护范围之内。