基于完備循環差集的局部修復碼構造及故障節點修復方法
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,構造完備循環差集的局部修復碼。本發明構造的局部修復碼與現有的局部修復碼相比,不僅最小距離達到了最優邊界,且碼率較高。進行故障節點修復能夠大大降低運算的復雜度,節省時間。時間。
