基于完备循环差集的局部修复码构造及故障节点修复方法
1.本发明属于计算机技术领域,具体涉及一种基于完备循环差集的局部修复码构造及故障节点修复方法。
背景技术:
2.在分布式存储系统中,复制策略会导致较大的存储开销,所以通常使用纠删码来确保数据的完整性,基于纠删码的冗余方案比复制策略存储效率更高,但是当存储节点出现故障时,传统的纠删码,特别是最大距离可分(mds)码需要从剩余的节点读取大量的数据,修复带宽开销过高。为了保证数据的可靠性和节点修复的有效性,gopalan等人提出了局部修复码(locally repairable codes,lrcs),可以有效修复故障节点,降低故障节点的修复成本。目前,对分布式存储系统中局部修复码的研究表明,局部修复码的构造存在一些困难,如构造复杂和码率较低等问题。为此,构造最小距离最优且码率较高的lrc成为了目前局部修复码研究的重点所在。
技术实现要素:
3.本发明的目的在于提供一种基于完备循环差集的局部修复码构造方法,用以解决现有技术中的大部分局部修复码的构造复杂和码率较低的问题。
4.为了实现上述任务,本发明采用以下技术方案:
5.一方面,本发明提供一种基于完备循环差集的局部修复码构造方法,具体包括如下步骤:
6.步骤1,给定一个(v,m,1)完备循环差集d,d≡{a1,a2,...,am},令集合ab={a1+b,a2+b,...,am+b},0≤b≤v-1,集合s={1,2,...,v},根据循环差集的定义有v=q2+q+1,m=q+1,q为素数;
7.步骤2,基于完备循环差集构造局部修复码的关联矩阵令关联矩阵m中的第i(i=b+1,1≤i≤v)行表示局部修复码中的第i个存储节点,第j列表示节点存储的第j个数据块,1≤j≤v,如果集合即第i个节点存储第j个编码块,则关联矩阵的第i行第j列的值为1;
8.步骤3,根据步骤2得到的关联矩阵m,构造完备循环差集的局部修复码。
9.进一步的,所述步骤3具体如下:
10.在关联矩阵m前加一个单位矩阵得到所构造的局部修复码的生成矩阵g=[ib|m],从而得到参数为n=2(q2+q+1),k=q2+q+1,r=q+1,t=q+1的局部修复码。
[0011]
进一步的,所述步骤3具体包括如下子步骤:
[0012]
步骤a,将步骤2得到的关联矩阵m中主对角线的1全部换为0,得到矩阵m1;然后将步骤2得到的关联矩阵m右上的副对角线中的1全部换为0,根据完备循环差集的双对角线性质得到关联矩阵m中左下角的元素为1,将其也换为0,得到矩阵m2;
[0013]
步骤b,级联两个矩阵m1和m2,得到的关联矩阵为m
′
=[m1|m2],将关联矩阵与单位矩阵级联得到校验矩阵h1=[m
′
|i];
[0014]
步骤c,由校验矩阵h1=[m
′
|i]构造得到完备循环差集的局部修复码,其参数满足n=3(q2+q+1),k=2(q2+q+1),r=2q,t=q。
[0015]
进一步的,所述步骤3具体包括如下子步骤:
[0016]
步骤a,将步骤2得到的关联矩阵m与全1行向量的克罗内克乘积得到局部修复码的校验矩阵其中表示矩阵的克罗内克乘积,1r表示长度为r的全1行向量;
[0017]
步骤b,由校验矩阵h2构造得到完备循环差集的局部修复码,其参数满足n=(q+1)(q2+q+1),k=q(q2+q+1),r=(q+1)
2-1,t=q+1,其中q为素数。
[0018]
另一方面,本发明还提供一种故障节点修复方法,所述方法利用权利要求1~3中任一项构造得到的完备循环差集的局部修复码对故障节点进行修复,包括如下步骤:
[0019]
判断故障为单节点故障还是多节点故障,若为单节点故障则采用单节点故障修复方法,若为多节点故障则采用多节点故障修复方法;
[0020]
单节点故障修复方法:根据码字和生成矩阵或校验矩阵的关系,得到码字的修复集,当局部修复码中一个节点发生故障时,利用修复关系进行异或完成故障节点修复;
[0021]
多节点故障修复方法:若信息位和校验位同时发生故障且在同一修复集中,则选择顺序修复,即先修复信息位,再利用已修复的信息位修复集中的码字进行异或来修复校验位;若多个信息位同时发生故障,则并行修复,即同时利用故障节点的修复集进行修复。
[0022]
本发明与现有技术相比具有以下技术特点:
[0023]
(1)在本发明公开的局部修复码的构造方法中,第一种方式研究了基于完备循环差集的局部修复码构造,所构造的局部修复码与现有的局部修复码相比,不仅最小距离达到了最优边界,还是码率较高的局部修复码,同时,局部修复码的复杂度也较低。当可用性t=2时,第二种方式得到的局部修复码的码率满足最优边界条件。第三种方式所构造局部修复码的码率较第二种方式得到了进一步提升。
[0024]
(2)本发明采用完备循环差集构造局部修复码,所构造的局部修复码是二元局部修复码,在编码、译码和修复故障节点的过程中只使用异或操作,极大地降低了运算的复杂度,构造算法简单,节省时间。
[0025]
(3)本发明构造的二元局部修复码能够修复单节点或多节点故障,具有良好的修复局部性,只需到矩阵剩余列中对应于故障列中值为1处的行索引,就是恢复故障节点所需的编码块,即可实现故障节点的修复,有利于系统中数据的高效传输,对数据存储有十分重要的作用。
[0026]
(4)本发明构造的二元局部修复码通过关联矩阵的扩展和关联矩阵与克罗内克的乘积提高了局部修复码的局部性,从而极大地提高了码率。
具体实施方式
[0027]
首先对本发明中出现的技术词语进行解释:
[0028]
循环差集:以正整数v为模的m个互不同余的整数所组成的集合d≡{a1,a2,...,am}(mod v)叫做一个(v,m,λ)循环差集,如果对每一个d≠0(mod v),恰好在d中有λ个有序对,使得d≡a
i-aj(mod v),其中v称为循环差集的模,m称为循环差集的大小,三个参数满足关系
式m(m-1)=λ(v-1)。
[0029]
完备循环差集:λ=1时,一个大小为m的循环差集的模v满足v=m
2-m+1,这样的循环差集为完备循环差集。
[0030]
数据修复:为了确保数据存储的可靠性,目前数据通常都被编码在大型的分布式存储中,当节点发生故障时,新节点会连接到未损坏节点的一个子集来下载重建损坏节点的中存储的数据,这个过程叫做数据修复。
[0031]
修复带宽:在数据修复过程中所消耗的带宽被称为修复带宽。
[0032]
生成矩阵:设一个码字的前k个符号表示信息符号,局部修复码的生成矩阵可以表示为g=[ik|m],其中ik是k
×
k的单位矩阵,m是有限域fq上的k
×
(n-k)的关联矩阵。
[0033]
校验矩阵:设矩阵h是一个(n-k)
×
n的行满秩矩阵,c为有限域fq上的线性码。若c为h
·
x
t
=0在有限域fq上的解空间,则称矩阵h为线性码c的校验矩阵。
[0034]
码的最小距离:对于(n,k)分组码c中任意两个不同的非零码字w和v,分组码c的最小距离表示为对于lrcs,码的最小距离d表示可以恢复系统中任意d-1个故障节点。
[0035]
顺序修复:将故障节点逐个修复,之前修复的任何一个故障节点都可以用于修复剩余的故障节点。
[0036]
并行修复:在并行模式下,发生故障的节点可同时被修复。
[0037]
本发明提供了一种基于完备循环差集的局部修复码构造方法,该方法利用完备循环差集的关联矩阵构造局部修复码,具体步骤如下:
[0038]
步骤1,给定一个(v,m,1)完备循环差集d,d≡{a1,a2,...,am}(mod v),令集合ab={a1+b,a2+b,...,am+b}(modv)(0≤b≤v-1),集合s={1,2,...,v},根据完备循环差集的定义有v=m
2-m+1=q2+q+1,m=q+1,q为素数;
[0039]
步骤2,基于完备循环差集构造局部修复码的关联矩阵令关联矩阵m中的第i(i=b+1,1≤i≤v)行表示局部修复码中的第i个存储节点,第j(1≤j≤v)列表示节点存储的第j个数据块,如果集合即第i个节点存储第j个编码块,则关联矩阵的第i行第j列的值为1;
[0040]
步骤3,在关联矩阵m前加一个单位矩阵得到所构造的局部修复码的生成矩阵g=[ib|m],ib中的列对应于信息符号,而m中的列对应于奇偶校验符号,由于m是基于完备循环差集构造的局部修复码的关联矩阵,每一行都有汉明权重q+1,也就是说每个信息符号都有t=q+1个修复集;m的每一列都有汉明权重q+1,m的任意两个不同的列最多在一个位置是相同的,因此基于完备循环差集所构造的局部修复码的局部性r=q+1,得到参数为n=2(q2+q+1),k=q2+q+1,r=q+1,t=q+1的局部修复码。
[0041]
作为本发明的一种优选实现方式,本发明提供了第二种基于完备循环差集的局部修复码的构造方法,该方法利用完备循环差集的性质扩展关联矩阵构造局部修复码。该方法的步骤1与上文本发明第一种方法的步骤1和步骤2均相同,还包括如下步骤:
[0042]
(1)将步骤2得到的关联矩阵m中主对角线的1全部换为0,得到矩阵m1;然后将步骤2得到的关联矩阵m右上的副对角线中的1全部换为0,根据完备循环差集的双对角线性质得
到关联矩阵m中左下角的元素为1,将其也换为0,得到矩阵m2;
[0043]
(2)级联两个矩阵m1和m2,得到的关联矩阵为m
′
=[m1|m2],将关联矩阵与单位矩阵级联得到校验矩阵h1=[m
′
|i];
[0044]
(3)由校验矩阵h1=[m
′
|i]所构造的局部修复码的参数满足n=3(q2+q+1),k=2(q2+q+1),r=2q,t=q。
[0045]
作为本发明的一种优选实现方式,本发明提供了第三种基于完备循环差集的局部修复码构造方法,该方法的步骤1与上文本发明第一种方法的步骤1和步骤2均相同,还包括如下步骤:将步骤2得到的关联矩阵m和全1行向量的克罗内克乘积构造新的局部修复码,码率有了极大地提高。新构造的局部修复码的校验矩阵的形式为其中表示矩阵的克罗内克乘积,1r表示长度为r的全1行向量。所以可以得到由校验矩阵h2构造的参数为n=(q+1)(q2+q+1),k=q(q2+q+1),r=(q+1)
2-1,t=q+1的局部修复码,其中q为素数。
[0046]
在本发明公开的上述三种局部修复码的构造方法中,第一种方法研究了基于完备循环差集的局部修复码构造,所构造的局部修复码与现有的局部修复码相比,不仅最小距离达到了最优边界,还是码率较高的局部修复码,同时,局部修复码的复杂度也较低。当可用性t=2时,第二种方法得到的局部修复码的码率满足最优边界条件。第三种方法所构造局部修复码的码率较第二种方法得到了进一步提升。
[0047]
以下给出实施例,来说明本发明的方法的实施情况:
[0048]
需要说明实施例中n表示分布式存储系统中局部修复码的码长,k表示局部修复码的维度,r表示局部修复码的局部性,t表示局部修复码的可用性,另外还分析了节点发生故障时的修复方法。
[0049]
实施例1
[0050]
在基于完备循环差集构造局部修复码的方法中,当q=2时,根据公式有v=7,m=3,可以得到一个(7,3,1)-循环差集,集合s={1,2,3,4,5,6,7},a0={1,2,4}(即b=0的情况),ab(0≤b≤v-1)与s的对应关系如表1所示,表1是本发明构造的基于完备循环差集的局部修复码的方法中集合ab={a1+b,a2+b,...,am+b}(modv)(0≤b≤v-1)和集合s={1,2,...,v}之间的对应关系。
[0051]
表1ab与s的对应关系
[0052]
[0053][0054]
根据ab与s的对应关系得到基于完备循环差集构造的关联矩阵m。
[0055][0056]
根据生成矩阵g=[ιb|μ]构造的局部修复码的参数为n=14,k=7,r=3,t=3,可知码的最小距离d=4,用g1,g2,...,g
14
表示上述局部修复码生成矩阵g的列向量,有g1=g
8-g
5-g7=g
9-g
2-g6=g
11-g
3-g4。对于与g1对应的信息符号c1,可以获得对应的修复关系:c1=c
8-c
5-c7=c
9-c
2-c6=c
11-c
3-c4。因此c1的修复集有:类似地,可以得到其他信息符号的修复集。
[0057]
采用实施例1构造的局部修复码多节点故障的修复过程:
[0058]
(1)若c1和c9同时故障,由于信息位和校验位同时发生故障且在同一个修复集中,这种情况应该选择顺序修复,即先在修复集或中任取一个进行信息位c1的修复,然后利用c1,c2,c6进行异或来修复校验位c9。
[0059]
(2)如果信息位c1和c2同时发生故障,则两个信息位的修复过程互不干涉,此时优先选择并行修复,可以同时从c1的修复集或中任选一个修复
信息位c1,从c2的修复集或中任选一个修复信息位c2。
[0060]
实施例2
[0061]
在基于完备循环差集的扩展矩阵中,把实施例1中关联矩阵m的主对角线中的1全部换为0,得到矩阵m1;
[0062][0063]
然后将关联矩阵m右上的副对角线中的1全部换为0,关联矩阵m中左下角的元素为1,将其换成0,得到矩阵m2;
[0064][0065]
级联两个矩阵,得到关联矩阵m
′
=[m1|m2];
[0066][0067]
在关联矩阵m
′
后级联单位矩阵得到校验矩阵h1,根据校验矩阵h1可以构造参数为n=21,k=14,r=4,t=2的局部修复码。若节点发生故障,故障节点的修复方法为:如果信息位c1发生故障,则由校验矩阵h1可知,信息位c1可以用表达式c1=c
19-c
6-c
8-c
12
=c
21-c
3-c
9-c
13
,所以信息位的修复集可以表示为其余符号失效时也可以用同样的方式进行修复。
[0068]
实施例3
[0069]
运用完备循环差集的关联矩阵m和全1行向量的克罗内克乘积构造局部修复码时,在q=3的情况下,可知v=13,m=4。根据参数可以得到一个(13,4,1)-循环差集,其中s=(1,2,3,4,5,6,7,8,9,10,11,12,13),a0={1,2,9,11},所以根据集合间的对应关系,其关联矩阵m可以表示为:
[0070][0071]
将关联矩阵m与{1,1,1,1}进行克罗内克乘积,得到校验矩阵为根据关联矩阵m和全1行向量的克罗内克乘积可以构造(n=52,k=39,r=15,t=4)局部修复码,此码的最小距离d=5。
技术特征:
1.基于完备循环差集的局部修复码构造方法,其特征在于,具体包括如下步骤:步骤1,给定一个(v,m,1)完备循环差集d,d≡{a1,a2,...,a
m
},令集合a
b
={a1+b,a2+b,...,a
m
+b},0≤b≤v-1,集合s={1,2,...,v},根据循环差集的定义有v=q2+q+1,m=q+1,q为素数;步骤2,基于完备循环差集构造局部修复码的关联矩阵令关联矩阵m中的第i(i=b+1,1≤i≤v)行表示局部修复码中的第i个存储节点,第j列表示节点存储的第j个数据块,1≤j≤v,如果集合即第i个节点存储第j个编码块,则关联矩阵的第i行第j列的值为1;步骤3,根据步骤2得到的关联矩阵m,构造完备循环差集的局部修复码。2.如权利要求1所述的基于完备循环差集的局部修复码构造方法,其特征在于,所述步骤3具体操作如下:在关联矩阵m前加一个单位矩阵得到所构造的局部修复码的生成矩阵g=[i
b
|m],从而得到参数为n=2(q2+q+1),k=q2+q+1,r=q+1,t=q+1的局部修复码。3.如权利要求1所述的基于完备循环差集的局部修复码构造方法,其特征在于,所述步骤3具体包括如下子步骤:步骤a,将步骤2得到的关联矩阵m中主对角线的1全部换为0,得到矩阵m1;然后将步骤2得到的关联矩阵m右上的副对角线中的1全部换为0,根据完备循环差集的双对角线性质得到关联矩阵m中左下角的元素为1,将其也换为0,得到矩阵m2;步骤b,级联两个矩阵m1和m2,得到的关联矩阵为m
′
=[m1|m2],将关联矩阵与单位矩阵级联得到校验矩阵h1=[m
′
|i];步骤c,由校验矩阵h1=[m
′
|i]构造得到完备循环差集的局部修复码,其参数满足n=3(q2+q+1),k=2(q2+q+1),r=2q,t=q。4.如权利要求1所述的基于完备循环差集的局部修复码构造方法,其特征在于,所述步骤3具体包括如下子步骤:步骤a,将步骤2得到的关联矩阵m与全1行向量的克罗内克乘积得到局部修复码的校验矩阵其中表示矩阵的克罗内克乘积,1
r
表示长度为r的全1行向量;步骤b,由校验矩阵h2构造得到完备循环差集的局部修复码,其参数满足n=(q+1)(q2+q+1),k=q(q2+q+1),r=(q+1)
2-1,t=q+1,其中q为素数。5.一种故障节点修复方法,其特征在于,所述方法利用权利要求1~3中任一项构造得到的完备循环差集的局部修复码对故障节点进行修复,包括如下步骤:判断故障为单节点故障还是多节点故障,若为单节点故障则采用单节点故障修复方法,若为多节点故障则采用多节点故障修复方法;单节点故障修复方法:根据码字和生成矩阵或校验矩阵的关系,得到码字的修复集,当局部修复码中一个节点发生故障时,利用修复关系进行异或完成故障节点修复;多节点故障修复方法:若信息位和校验位同时发生故障且在同一修复集中,则选择顺序修复,即先修复信息位,再利用已修复的信息位修复集中的码字进行异或来修复校验位;若多个信息位同时发生故障,则并行修复,即同时利用故障节点的修复集进行修复。
技术总结
本发明属于计算机领域,公开了一种基于完备循环差集的局部修复码构造及故障节点修复方法,局部修复码构造方法:步骤1,给定一个(v,m,1)完备循环差集;步骤2,基于完备循环差集构造局部修复码的关联矩阵,令关联矩阵M中的第i行表示局部修复码中的第i个存储节点,第j列表示节点存储的第j个数据块,如果集合即第i个节点存储第j个编码块,则关联矩阵的第i行第j列的值为1;步骤3,根据步骤2得到的关联矩阵M,构造完备循环差集的局部修复码。本发明构造的局部修复码与现有的局部修复码相比,不仅最小距离达到了最优边界,且码率较高。进行故障节点修复能够大大降低运算的复杂度,节省时间。时间。