本发明属于数据编码,涉及一种阵列码的编码方法,更具体的是涉及一种基于三冗余和两种基于四冗余mds阵列码的数据编码方法。
背景技术:
1、在不断发展进步的信息技术引领下,目前大数据发展呈现出了四个特点:分别是信息数据的总量大、多样、易变以及高速增长,尤其是随着网络技术的迅速发展,各个领域产生的数据总量可以达zb级别。随着存储系统的规模在逐渐扩大,保证其数据可靠性是亟待解决的主要问题之一。
2、为防止存储系统中的各类硬件故障造成数据丢失,用于生产环境的存储管理软件都使用了某种数据冗余技术对数据进行保护。数据冗余技术通常包括多路镜像和纠删码技术两种。多路镜像将数据复制多份,并将多个副本分布在存储系统的不同节点上,仅存放数据副本的所有存储节点同时故障才会导致数据丢失,牺牲存储效率以保障数据的可靠性。例如,谷歌公司的gfs及其开源版本hdfs对每一份数据均存有三份副本,即系统中的任意两个节点同时故障不会造成数据丢失。纠删码技术基本思想是将一份原始数据划分为k块,基于k块原始数据计算获得r块冗余数据。对于这k+r块数据,其中任意的r块数据出错时,存储系统均可以通过重构算法恢复出k块原始数据,纠删码冗余保护技术解决了传统冗余保护技术不适用于分布式存储系统的问题。纠删码技术主要包括rs类纠删码和阵列纠删码。rs类纠删码涉及到复杂的有限域运算,从而导致其较高的编解码计算复杂度。而阵列纠删码的编解码过程只需要使用异或和循环移位运算,其运算复杂度比rs码要小很多。
3、现有的一些经典mds阵列码(如evenodd码和rdp码)中存在的问题是对原始数据节点数k的选择有局限性,从而大大降低了其实用性。
技术实现思路
1、本发明的目的在于:与经典mds阵列码(如evenodd码和rdp码)保持相若的编码复杂度的同时,解决现有技术中经典mds阵列码(如evenodd码和rdp码)对原始数据节点数k的选择有局限性的技术问题,本发明提供一种用于三冗余或四冗余的mds阵列码编码方法。
2、本发明为了实现上述目的具体采用以下技术方案:
3、一种用于三冗余或四冗余的mds阵列码编码方法,包括以下步骤:
4、步骤s1:获取k个原始数据包,将k个原始数据包分别标记为mj,1≤j≤k,每个数据包由一个m*(l-1)矩阵表示;
5、其中,m表示数据包矩阵的行数,(l-1)表示数据包矩阵的列数;
6、步骤s2:获取每个所述原始数据包mj所对应的二元编码系数矩阵ψj或ψj′,ψj和ψ′j均为l*l矩阵,其表示形式如下:
7、
8、
9、其中,il表示l*l单位阵,cl代表l*l循环移位矩阵表示将l*l单位阵按列向右循环移j+1位;
10、步骤s3:对每个原始数据包mj进行编码操作;若对每个原始数据包mj进行三冗余mds阵列码编码操作,执行步骤s4;若对每个原始数据包mj进行第一种四冗余mds阵列码编码操作,执行步骤s5;若对每个原始数据包mj进行第二种四冗余mds阵列码编码操作,执行步骤s6;
11、步骤s4:高效生成如下定义的编码数据包p、q和r:
12、
13、其中,g由(l-1)*(l-1)单位矩阵il-1和(l-1)*1全零列向量按列并置得到,即g=[il-1 0(l-1)*1];t表示对矩阵进行转置操作;gt表示矩阵g的转置;
14、步骤s5:高效生成如下定义的编码数据包p′、q′、r′和s′;
15、
16、
17、其中,h由(l-1)*(l-1)单位矩阵il-1和1*(l-1)全1行向量按行并置得到,即h=[il-1 1(l-1)*1]t;
18、步骤s6:高效生成如下定义的编码数据包p″、q″、r″和s″;
19、
20、
21、优选地,在所述步骤s3中,三种编码操作对应的质数l需分别满足以下条件:
22、若对原始数据包mj进行三冗余mds阵列码编码操作,则质数l需满足以下条件之一:
23、(1)7<l<200,且l≠31,73,127;
24、(2)任意质数l>7,ml为偶数或l≡±1mod 8;
25、若对原始数据包mj进行第一种四冗余mds阵列码编码操作,则质数l需满足以下条件之一:
26、(1)7<l<200,且l≠31,73,89,127;
27、(2)任意质数l>7,ml为偶数或l≡±1mod 8;
28、若对原始数据包mj进行第二种四冗余mds阵列码编码操作,则质数l需满足以下条件之一:
29、(1)7<l<200,且l≠17,23,31,73,89,127,151;
30、(2)l>7且ml=l-1,或l>23且l≡±1mod 8;
31、其中,ml为2的模l乘法阶。
32、优选地,在所述步骤s4中,高效生成p、q和r3个编码数据包的方法包括以下步骤:
33、步骤s401:从j=1开始按照j为1至(l-2)的顺序依次对mj进行逐位异或,也就是先m1+m2,取得的结果再加上m3,以此类推直到加到ml-2,获得p1;同理,从j=l-1开始按照j为(l-1)至k的顺序依次对mj进行逐位异或,获得p2;
34、步骤s402:获取编码数据包p的方法为:p=p1+p2;
35、步骤s403:在mj和p2的右侧分别添加一列全0向量得到m′j,p′2,即m′j=mjg,p′2=p2g;
36、步骤404:获取编码数据包q的方法为:
37、从j=1开始按照j为1至(l-2)的顺序依次对m′j按列向右循环j+1位,再将所得m*l矩阵的最后一列删除得到矩阵xj,即获取获取q1=p1+x;
38、将p′2按列向右循环1位,再将所得m*l矩阵的最后一列删除得到z,即z=p′2clgt;从j=l-1开始按照j从(l-1)至k的顺序依次对m′j按列向右循环mod(j-l+3,l)位,再将所得m*l矩阵的最后一列删除得到矩阵yj,即获取获取q2=z+y;
39、获取q=q1+q2;
40、步骤405:获取编码数据包r的方法为:
41、从j=1开始按照j为1至(l-2)的顺序依次对m′j按列向右循环mod(2(j+1),l)位,再将所得m*l矩阵的最后一列删除得到矩阵xj,即获取获取r1=p1+x;
42、将p′2按列向右循环2位,再将所得m*l矩阵的最后一列删除得到z,即从j=l-1开始按照j从(l-1)至k的顺序依次对m′j按列向右循环mod(2(j-l+3),l)位,再将所得m*l矩阵的最后一列删除得到矩阵yj,即获取获取r2=z+y;
43、获取r=r1+r2。
44、优选地,在所述步骤s5中,高效生成p′、q′、r′和s′4个编码数据包的方法包括以下步骤:
45、步骤s501:从j=1开始按照j为1至(l-2)的顺序依次对mj进行逐位异或,获得p1;同理,从j=l-1开始按照j为(l-1)至k的顺序依次对mj进行逐位异或,获得p2;在p1和p2右侧分别添加一列全0向量,即p1=p1g,p2=p2g;
46、步骤s502:在mj的右侧添加一列全0向量得到m′j,即m′j=mjg;
47、步骤s503:获取q3的方法为:
48、从j=1开始按照j为1至(l-2)的顺序依次对m′j按列向右循环j+1位,得到m*l矩阵xj,即获取获取q1=p1+x;
49、将p2按列向右循环1位,得到m*l的矩阵y,即y=p2cl;从j=l-1开始按照j从(l-1)至k的顺序依次对m′j按列向右循环mod(j-l+3,l)位,得到m*l的矩阵获取获取q2=y+z;
50、获取q3=q1+q2;
51、步骤s504:获取r3的方法为:
52、从j=1开始按照j为1至(l-2)的顺序依次对m′j按列向右循环mod(2(j+1),l)位,得到m*l矩阵xj,即获取获取r1=p1+x;
53、将p2按列向右循环2位,得到m*l的矩阵y,即从j=l-1开始按照j从(l-1)至k的顺序依次对m′j按列向右循环mod(2(j-l+3),l)位,得到m*l的矩阵获取获取r2=y+z;
54、获取r3=r1+r2;
55、步骤s505:获取s3的方法为:
56、从j=1开始按照j为1至(l-2)的顺序依次对m′j按列向右循环mod(3(j+1),l)位,得到m*l矩阵xj,即获取获取s1=p1+q1+r1+x;
57、将p2,q2,r2分别按列向右循环3位,2位和1位,得到m*l的矩阵y,m,n,即n=r2cl;;从j=l-1开始按照j从(l-1)至k的顺序依次对m′j按列向右循环mod(3(j-l+3),l)位,得到m*l的矩阵获取获取s2=y+m+n+z;
58、获取s3=s1+s2;
59、步骤s506:获取编码数据包p′,q′,r′,s′的方法为:
60、q3前(l-1)列m维向量的每一个元素值更新为该元素与最后一列m维向量对应行的元素逐位异或的值并删除该矩阵的最后一列m维向量,得到m*(l-1)的矩阵g,即g=q3h;获取p′=p+g;
61、删除q3,r3,s3的最后一列,分别得到m*(l-1)的矩阵f,h,t,即f=q3gt,h=r3gt,t=s3gt;获取q′=f+h,r′=f+t,s′=f。
62、优选地,在所述步骤s6中,高效生成p″、q″、r″和s″4个编码数据包的方法包括以下步骤:
63、步骤s601:从j=1开始按照j为1至(l-3)的顺序依次对mj进行逐位异或,获得p1;同理,从j=l-2开始按照j为(l-2)至k的顺序依次对mj进行逐位异或,获得p2;
64、步骤s602:获取编码数据包p″的方法为:p″=p1+p2;
65、步骤s603:在mj的右侧添加一列全0向量得到m′j,即m′j=mjg;在p2的右侧添加一列全0向量得到p′2,即p′2=p2g;
66、步骤604:获取编码数据包q″的方法为:
67、从j=1开始按照j为1至(l-3)的顺序依次对m′j按列向右循环j+2位,再将所得m*l矩阵的最后一列删除得到矩阵xj,即获取获取q1=p1+x;
68、将p′2按列向右循环1位,再将所得m*l矩阵的最后一列删除得到z,即z=p′2clgt;从j=l-2开始按照j从(l-2)至k的顺序依次对m′j按列向右循环mod(j-l+4,l)位,再将所得m*l矩阵的最后一列删除得到矩阵yj,即获取获取q2=z+y;
69、获取q″=q1+q2;
70、步骤605:获取编码数据包r″的方法为:
71、从j=1开始按照j为1至(l-3)的顺序依次对m′j按列向右循环mod(2(j+2),l)位,再将所得m*l矩阵的最后一列删除得到矩阵xj,即获取获取r1=p1+x;
72、将p′2按列向右循环2位,再将所得m*l矩阵的最后一列删除得到z,即从j=l-2开始按照j从(l-2)至k的顺序依次对m′j按列向右循环mod(2(j-l+4),l)位,再将所得m*l矩阵的最后一列删除得到矩阵yj,即获取获取r2=z+y;
73、获取r″=r1+r2;
74、步骤606:获取编码数据包s″的方法为:
75、从j=1开始按照j为1至(l-3)的顺序依次对m′j按列向右循环mod(3(j+2),l)位,再将所得m*l矩阵的最后一列删除得到矩阵xj,即获取获取s1=p1+q1+r1+x;
76、在q2和r2的右侧分别添加一列全0向量得到q′2,r′2,即q′2=q2g,r′2=r2g;
77、将p′2,q′2,r′2分别按列向右循环3位,2位和1位,再将所得m*l矩阵的最后一列删除分别得到z,t,w,即w=r′2clgt;从j=l-2开始按照j从(l-2)至k的顺序依次对m′j按列向右循环mod(3(j-l+4),l)位,再将所得m*l矩阵的最后一列删除得到矩阵yj,即获取获取s2=z+t+w+y;
78、获取s″=s1+s2。
79、本发明的有益效果如下:
80、本发明的技术方案可以实现三冗余或四冗余的mds阵列码编码。如图2所示,在保持与经典mds阵列码(如evenodd码、rdp码)相若的编码复杂度的同时,原始数据节点数k的可选择范围是evenodd码和rdp码的近两倍。因此,与经典mds阵列码相比,可用性更强,适用范围更广。