本發(fā)明屬于計(jì)算機(jī)領(lǐng)域,涉及一種基于Pyramid碼的局部性修復(fù)編碼方法。
背景技術(shù):
當(dāng)前分布式存儲(chǔ)系統(tǒng)通常采用糾刪碼提高存儲(chǔ)可靠性,其中最大距離可分(Maximum Distance Separable,MDS)碼,在確保系統(tǒng)可靠性的同時(shí),能提高系統(tǒng)的存儲(chǔ)效率。然而,糾刪碼在修復(fù)故障節(jié)點(diǎn)時(shí)需要下載整個(gè)文件大小的數(shù)據(jù)量,修復(fù)帶寬開銷過大。為了降低傳統(tǒng)糾刪碼的修復(fù)帶寬開銷,Dimakis等人提出了再生碼,顯著降低了故障節(jié)點(diǎn)的修復(fù)帶寬開銷。通過對(duì)修復(fù)帶寬和存儲(chǔ)開銷進(jìn)行分析,Dimakis等人于2010年又提出了最小存儲(chǔ)再生(Minimum Storage Regeneration,MSR)碼和最小帶寬再生(Minimum Bandwidth Regeneration,MBR)碼。簡單再生碼(Simple Regenerating Codes)以較高的存儲(chǔ)開銷為代價(jià),在修復(fù)單節(jié)點(diǎn)故障時(shí)具有較好的修復(fù)局部性,但沒有進(jìn)一步考慮多故障節(jié)點(diǎn)的修復(fù)。MSR碼和MBR碼在修復(fù)故障節(jié)點(diǎn)時(shí),只關(guān)注了修復(fù)帶寬開銷和存儲(chǔ)開銷,沒有考慮磁盤存儲(chǔ)開銷,不適用于云存儲(chǔ)系統(tǒng)。
云存儲(chǔ)系統(tǒng)中兩個(gè)或多個(gè)節(jié)點(diǎn)同時(shí)發(fā)生故障的概率很大,已有的SRC和LRC在修復(fù)一個(gè)節(jié)點(diǎn)故障時(shí)具有很好的修復(fù)局部性,但是在修復(fù)兩個(gè)或多個(gè)故障節(jié)點(diǎn)時(shí)需要連接多個(gè)存活節(jié)點(diǎn),磁盤I/O開銷較高。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述現(xiàn)有技術(shù)中存在的缺陷或不足,本發(fā)明的目的在于,提供一種基于Pyramid碼的局部性修復(fù)編碼方法,該方法可以降低故障節(jié)點(diǎn)修復(fù)過程中的磁盤I/O開銷,且具有較優(yōu)的節(jié)點(diǎn)存儲(chǔ)開銷。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于Pyramid碼的局部性修復(fù)編碼方法,具體包括以下步驟:
分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)數(shù)目眾多,設(shè)其中有n個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)塊,將每8個(gè)存儲(chǔ)節(jié)點(diǎn)作為一個(gè)最小編碼結(jié)構(gòu)C,每個(gè)最小編碼結(jié)構(gòu)C視為一個(gè)局部修復(fù)組,則C=D·G,D=[d11,d12,...,dij,...,dtj],dij為第i個(gè)局部修復(fù)組存儲(chǔ)的j個(gè)數(shù)據(jù)塊,i表示第i個(gè)局部修復(fù)組,i≤t,j表示局部修復(fù)組內(nèi)存儲(chǔ)的數(shù)據(jù)塊數(shù)目,1≤j≤4且為整數(shù),G=[I|P]表示生成C所需的生成矩陣,其中I為單位矩陣,P為子矩陣,
其中g(shù)12、g13、g21、g24、g31、g34、g42和g43為Pyramid碼的編碼系數(shù),且各列之間g線性獨(dú)立,保證子矩陣P滿秩,所述校驗(yàn)塊為數(shù)據(jù)塊經(jīng)過生成矩陣G線性編碼生成;
根據(jù)Pyramid碼編碼方式和魯棒性得到Pyramid碼的最小編碼結(jié)構(gòu)C,將所述Pyramid碼的最小編碼結(jié)構(gòu)C作為基本編碼結(jié)構(gòu),把分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)根據(jù)Pyramid碼的最小編碼結(jié)構(gòu)所需存儲(chǔ)節(jié)點(diǎn)數(shù)進(jìn)行分組。若存儲(chǔ)節(jié)點(diǎn)個(gè)數(shù)n剛好能被8整除,則直接在每個(gè)局部修復(fù)組內(nèi)采用Pyramid碼進(jìn)行編碼;若存儲(chǔ)節(jié)點(diǎn)個(gè)數(shù)n不能被8整除,則將最后一組存儲(chǔ)節(jié)點(diǎn)和不能整除所得余數(shù)放在一組并采用MDS碼進(jìn)行編碼。
具體地,若t=n/8為整數(shù),所需存儲(chǔ)的文件分為4t個(gè)數(shù)據(jù)塊并存儲(chǔ)在t個(gè)局部修復(fù)組內(nèi),每個(gè)局部修復(fù)組內(nèi)包含4個(gè)數(shù)據(jù)塊和4個(gè)校驗(yàn)塊;
若n/8為非整數(shù),則整數(shù)部分為t,余數(shù)部分記為δ,δ個(gè)存儲(chǔ)節(jié)點(diǎn)內(nèi)包含ε個(gè)數(shù)據(jù)塊,ε≤4且為整數(shù),則所需存儲(chǔ)的文件分為4t+ε個(gè)數(shù)據(jù)塊,其中前t-1個(gè)局部修復(fù)組中,每個(gè)局部修復(fù)組包含8個(gè)節(jié)點(diǎn)并分別存儲(chǔ)4個(gè)數(shù)據(jù)塊和4個(gè)校驗(yàn)塊,第t個(gè)局部修復(fù)組包含8+δ個(gè)節(jié)點(diǎn)并存儲(chǔ)4+ε個(gè)數(shù)據(jù)塊,對(duì)第t個(gè)局部修復(fù)組采用MDS編碼方式進(jìn)行編碼。
本發(fā)明還提供一種分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)故障修復(fù)方法,具體包括以下步驟:
按上述方法對(duì)分布式存儲(chǔ)系統(tǒng)中n個(gè)存儲(chǔ)節(jié)點(diǎn)進(jìn)行編碼后得到t個(gè)局部修復(fù)組,設(shè)第i個(gè)局部修復(fù)組內(nèi)有存儲(chǔ)節(jié)點(diǎn)出現(xiàn)故障,未出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)為存活存儲(chǔ)節(jié)點(diǎn);其中第i個(gè)局部修復(fù)組內(nèi)包含四個(gè)數(shù)據(jù)塊di1、di2、di3和di4以及四個(gè)校驗(yàn)塊ci1、ci2、ci3和ci4,其中di1、di2、di3和di4是按照兩行兩列排列的數(shù)據(jù)塊,ci1為di1和di2經(jīng)過生成矩陣G線性編碼生成,ci2為di3和di4經(jīng)過生成矩陣G線性編碼生成,ci3為di1和di3經(jīng)過生成矩陣G線性編碼生成,ci4為di2和di4經(jīng)過生成矩陣G線性編碼生成;
(1)若第i個(gè)局部修復(fù)組內(nèi)出現(xiàn)一個(gè)存儲(chǔ)節(jié)點(diǎn)故障:
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是四個(gè)數(shù)據(jù)塊中的任意一個(gè),則通過出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)同行或者同列的存活存儲(chǔ)節(jié)點(diǎn)進(jìn)行修復(fù);
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是四個(gè)校驗(yàn)塊中的任意一個(gè),則通過生成故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的校驗(yàn)塊時(shí)對(duì)應(yīng)的存活存儲(chǔ)節(jié)點(diǎn)進(jìn)行修復(fù);
(2)若第i個(gè)局部修復(fù)組內(nèi)出現(xiàn)兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障:
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊:若所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊同行或同列,則分別通過所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊所在列或行的存活節(jié)點(diǎn)進(jìn)行修復(fù);若所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊非同行或同列,則通過所述兩個(gè)數(shù)據(jù)塊中的一個(gè)數(shù)據(jù)塊所在列和另一數(shù)據(jù)塊所在行的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù);
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是一個(gè)數(shù)據(jù)塊和一個(gè)校驗(yàn)塊,則通過所述一個(gè)數(shù)據(jù)塊所在列和所述一個(gè)校驗(yàn)塊所在行的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù),或者通過所述一個(gè)數(shù)據(jù)塊所在行和所述一個(gè)校驗(yàn)塊所在列的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù)。
所述若局部修復(fù)組內(nèi)出現(xiàn)兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障時(shí),也可同時(shí)進(jìn)行兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障修復(fù)。
本發(fā)明具有以下技術(shù)效果:
1、考慮到存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)量大,采用Pyramid碼進(jìn)行編碼,將原文件分為若干數(shù)據(jù)塊存儲(chǔ)在n個(gè)存儲(chǔ)節(jié)點(diǎn),保證了存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)開銷,Pyramid碼在故障存儲(chǔ)節(jié)點(diǎn)修復(fù)中保證了有限的存活節(jié)點(diǎn)參與,較小的修復(fù)局部性使故障存儲(chǔ)節(jié)點(diǎn)修復(fù)過程中的修復(fù)帶寬開銷低。
2、本發(fā)明構(gòu)造的基于Pyramid碼的局部性修復(fù)編碼結(jié)構(gòu)中,局部修復(fù)組內(nèi)存儲(chǔ)節(jié)點(diǎn)的校驗(yàn)塊全部由局部修復(fù)組內(nèi)存儲(chǔ)的數(shù)據(jù)塊進(jìn)行線性編碼生成,基于此編碼結(jié)構(gòu),當(dāng)局部修復(fù)組中存在單節(jié)點(diǎn)和兩節(jié)點(diǎn)故障時(shí),都只需要通過連接局部修復(fù)組內(nèi)有限的存活節(jié)點(diǎn)快速實(shí)現(xiàn)局部修復(fù)組內(nèi)故障節(jié)點(diǎn)的數(shù)據(jù)重構(gòu),恢復(fù)出故障存儲(chǔ)節(jié)點(diǎn)數(shù)據(jù)。
附圖說明
圖1是本發(fā)明實(shí)施例1對(duì)應(yīng)的基于Pyramid碼的局部性修復(fù)編碼結(jié)構(gòu)圖;(a):n個(gè)存儲(chǔ)節(jié)點(diǎn)能被8整除;(b):n個(gè)存儲(chǔ)節(jié)點(diǎn)不能被8整除。
圖2是本發(fā)明實(shí)施例2局部修復(fù)組內(nèi)單節(jié)點(diǎn)故障時(shí)存儲(chǔ)節(jié)點(diǎn)修復(fù)示意圖;
圖3是本發(fā)明實(shí)施例2局部修復(fù)組內(nèi)兩節(jié)點(diǎn)故障時(shí)存儲(chǔ)節(jié)點(diǎn)修復(fù)示意圖;(a):兩個(gè)數(shù)據(jù)節(jié)點(diǎn)故障修復(fù);(b):一個(gè)數(shù)據(jù)節(jié)點(diǎn)和一個(gè)校驗(yàn)節(jié)點(diǎn)故障修復(fù);(c):兩個(gè)校驗(yàn)節(jié)點(diǎn)故障修復(fù);(d):非同行同列存儲(chǔ)節(jié)點(diǎn)故障修復(fù)。
圖4是本發(fā)明實(shí)施例3有8個(gè)存儲(chǔ)節(jié)點(diǎn)時(shí)的局部性修復(fù)編碼結(jié)構(gòu)圖。
圖5是本發(fā)明實(shí)施例3中局部修復(fù)組內(nèi)單節(jié)點(diǎn)故障修復(fù)示意圖;
圖6是本發(fā)明實(shí)施例3中局部修復(fù)組內(nèi)兩節(jié)點(diǎn)故障修復(fù)示意圖;其中(a):兩個(gè)數(shù)據(jù)節(jié)點(diǎn)故障修復(fù);(b):一個(gè)數(shù)據(jù)節(jié)點(diǎn)和一個(gè)校驗(yàn)節(jié)點(diǎn)故障修復(fù);(c):兩個(gè)校驗(yàn)節(jié)點(diǎn)故障修復(fù);(d):非同行同列節(jié)點(diǎn)故障修復(fù)。
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的方案做進(jìn)一步詳細(xì)地解釋和說明。
具體實(shí)施方式
本發(fā)明所指的修復(fù),實(shí)際上是解碼的過程,因?yàn)榫幋a過程為線性編碼,C=D·G,G為滿秩矩陣,則修復(fù)過程即是解碼過程,即D=C·G-1。例如,ci1由di1和di2經(jīng)過生成矩陣G線性編碼生成,若di1發(fā)生故障,則連接數(shù)據(jù)節(jié)點(diǎn)di2和校驗(yàn)節(jié)點(diǎn)ci1,根據(jù)生成矩陣G進(jìn)行解碼即可修復(fù)di1。
考慮到故障存儲(chǔ)節(jié)點(diǎn)的分布情況,每個(gè)局部修復(fù)組內(nèi)三個(gè)及三個(gè)以上存儲(chǔ)節(jié)點(diǎn)故障的概率可以忽略,本發(fā)明多節(jié)點(diǎn)故障指整個(gè)存儲(chǔ)結(jié)構(gòu)內(nèi)的故障存儲(chǔ)節(jié)點(diǎn)的數(shù)目。
實(shí)施例1:
如圖1-3所示,遵從上述技術(shù)方案,本實(shí)施例提供一種基于Pyramid碼的局部性修復(fù)編碼方法,Pyramid碼的最小編碼結(jié)構(gòu)指的是能夠?qū)崿F(xiàn)Pyramid碼編碼方式快速修復(fù)并且保證最少節(jié)點(diǎn)參與修復(fù)過程。
主要包括以下步驟:分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)數(shù)目眾多,設(shè)分布式存儲(chǔ)系統(tǒng)中有n個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)一個(gè)數(shù)據(jù)塊,將每8個(gè)存儲(chǔ)節(jié)點(diǎn)作為一個(gè)最小編碼結(jié)構(gòu)C,其中C=D·G,D=[d11,d12,...,dij,...,dtj],dij為第i個(gè)局部修復(fù)組存儲(chǔ)的j個(gè)數(shù)據(jù)塊,i表示第i個(gè)局部修復(fù)組,i≤t,j表示局部修復(fù)組內(nèi)存儲(chǔ)的數(shù)據(jù)塊數(shù)目,1≤j≤4且為整數(shù);一共有t個(gè)局部修復(fù)組,G=[I|P]表示生成C所需要的生成矩陣,其中I為單位矩陣,P為子矩陣,
g12、g13、g21、g24、g31、g34、g42和g43為Pyramid碼的編碼系數(shù),各列之間編碼系數(shù)線性獨(dú)立,保證子矩陣P滿秩,以最小編碼結(jié)構(gòu)C作為一個(gè)局部修復(fù)組,一共有n/8個(gè)局部修復(fù)組,n/8個(gè)局部修復(fù)組構(gòu)成一個(gè)存儲(chǔ)結(jié)構(gòu);也就是說,每個(gè)局部修復(fù)組內(nèi)有8個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)一個(gè)數(shù)據(jù)塊,相當(dāng)于每個(gè)局部修復(fù)組內(nèi)有8個(gè)數(shù)據(jù)塊,其中4個(gè)為數(shù)據(jù)塊,另外4個(gè)為校驗(yàn)塊。
將上述得到的Pyramid碼的最小編碼結(jié)構(gòu)作為基本編碼結(jié)構(gòu),把分布式存儲(chǔ)系統(tǒng)的存儲(chǔ)節(jié)點(diǎn)根據(jù)Pyramid碼的最小編碼結(jié)構(gòu)所需節(jié)點(diǎn)數(shù)進(jìn)行分組。
存在以下兩種情況:
若n/8為整數(shù),記為t,則所需存儲(chǔ)的文件系統(tǒng)分為4t個(gè)數(shù)據(jù)塊并存儲(chǔ)在t個(gè)局部修復(fù)組內(nèi),每個(gè)局部修復(fù)組內(nèi)包含4個(gè)數(shù)據(jù)塊和4個(gè)校驗(yàn)塊,校驗(yàn)塊為數(shù)據(jù)塊經(jīng)過生成矩陣G線性編碼生成,
若n/8為非整數(shù),整數(shù)部分為t,余數(shù)部分記為δ,δ個(gè)節(jié)點(diǎn)內(nèi)包含ε(ε為自然數(shù),且ε≤4)個(gè)數(shù)據(jù)塊,則所需存儲(chǔ)文件分為4t+ε個(gè)數(shù)據(jù)塊,其中前t-1組每組存儲(chǔ)4個(gè)數(shù)據(jù)塊和4個(gè)校驗(yàn)塊,第t組包含8+δ個(gè)節(jié)點(diǎn)并存儲(chǔ)ε+4個(gè)數(shù)據(jù)塊并對(duì)第t組采用MDS編碼方式進(jìn)行編碼。
MDS編碼方式是目前比較成熟的一種編碼方式,以下僅做簡單說明:MDS編碼即將大小為M的原文件平均分為k塊,每塊大小為M/k,然后將這k個(gè)文件塊編碼成w個(gè)編碼塊,并將w個(gè)編碼塊分別存儲(chǔ)在w個(gè)節(jié)點(diǎn)中,每個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)編碼塊。然而,其特殊之處在于,用戶僅需連接w個(gè)節(jié)點(diǎn)中的任意k個(gè)節(jié)點(diǎn),就可以還原出需要讀取的原始文件,即此時(shí)系統(tǒng)中的參數(shù)滿足m=k。同時(shí),將MDS碼所滿足的性質(zhì)稱為MDS性質(zhì),即任意k個(gè)編碼塊均可以還原出原始文件。
實(shí)施例2:
本實(shí)施例提供一種分布式存儲(chǔ)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)故障修復(fù)方法,包括以下步驟:
步驟一,采用實(shí)施例1所述局部性修復(fù)編碼方法對(duì)分布式存儲(chǔ)系統(tǒng)中所有n個(gè)存儲(chǔ)節(jié)點(diǎn)進(jìn)行編碼;
步驟二,存儲(chǔ)節(jié)點(diǎn)故障修復(fù);
設(shè)t個(gè)局部修復(fù)組中的第i個(gè)局部修復(fù)組內(nèi)有存儲(chǔ)節(jié)點(diǎn)出現(xiàn)故障,未出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)為存活存儲(chǔ)節(jié)點(diǎn);其中第i個(gè)局部修復(fù)組內(nèi)包含四個(gè)數(shù)據(jù)塊di1、di2、di3和di4以及四個(gè)校驗(yàn)塊ci1、ci2、ci3和ci4,其中di1、di2、di3和di4是按照兩行兩列排列的數(shù)據(jù)塊,ci1為di1和di2經(jīng)過生成矩陣G線性編碼生成,ci2為di3和di4經(jīng)過生成矩陣G線性編碼生成,ci3為di1和di3經(jīng)過生成矩陣G線性編碼生成,ci4為di2和di4經(jīng)過生成矩陣G線性編碼生成;
(1)若局部修復(fù)組內(nèi)出現(xiàn)一個(gè)存儲(chǔ)節(jié)點(diǎn)故障:
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是四個(gè)數(shù)據(jù)塊中的任意一個(gè),則通過出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)同行或者同列的存活存儲(chǔ)節(jié)點(diǎn)進(jìn)行修復(fù);
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是四個(gè)校驗(yàn)塊中的任意一個(gè),則通過生成故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的校驗(yàn)塊時(shí)對(duì)應(yīng)的存活存儲(chǔ)節(jié)點(diǎn)進(jìn)行修復(fù);
(2)若局部修復(fù)組內(nèi)出現(xiàn)兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障:
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊:若所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊同行或同列,則分別通過所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊所在列或行的存活節(jié)點(diǎn)進(jìn)行修復(fù);若所述兩個(gè)數(shù)據(jù)塊或兩個(gè)校驗(yàn)塊非同行或同列,則通過所述兩個(gè)數(shù)據(jù)塊中的一個(gè)數(shù)據(jù)塊所在列和另一數(shù)據(jù)塊所在行的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù);
若出現(xiàn)故障的存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的是一個(gè)數(shù)據(jù)塊和一個(gè)校驗(yàn)塊,則通過所述一個(gè)數(shù)據(jù)塊所在列和所述一個(gè)校驗(yàn)塊所在行的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù),或者通過所述一個(gè)數(shù)據(jù)塊所在行和所述一個(gè)校驗(yàn)塊所在列的三個(gè)存活節(jié)點(diǎn)進(jìn)行修復(fù)。
步驟(2)所述若局部修復(fù)組內(nèi)出現(xiàn)兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障時(shí),則根據(jù)Pyramid碼在存儲(chǔ)節(jié)點(diǎn)修復(fù)過程的獨(dú)立性,也可采用步驟(1)所述同時(shí)進(jìn)行兩個(gè)存儲(chǔ)節(jié)點(diǎn)故障修復(fù)。
實(shí)施例3:
如圖4,本實(shí)施例假定分布式存儲(chǔ)系統(tǒng)中有8個(gè)存儲(chǔ)節(jié)點(diǎn),在最小編碼結(jié)構(gòu)為8個(gè)存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)中構(gòu)造Pyramid碼,用D=[d1,d2,d3,d4]表示最小編碼結(jié)構(gòu)內(nèi)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)塊,其中d1,d2,d3,d4分別表示單個(gè)數(shù)據(jù)塊信息;G=[I|P]表示生成編碼數(shù)據(jù)塊C所需要的生成矩陣,其中I為單位矩陣,P為4×4子矩陣。則C記為:C=[d1,d2,d3,d4,c1,c2,c3,c4],
這里生成矩陣
其中變量g12、g13、g21、g24、g31、g34、g42和g43表示Pyramid碼的編碼系數(shù)。由生成矩陣可知校驗(yàn)塊的表達(dá)式,c1=g12d1+g21d2,c2=g34d3+g43d4,c3=g13d1+g31d3,c4=g24d2+g42d4。
如圖5(a)所示,若是存儲(chǔ)數(shù)據(jù)塊d1的存儲(chǔ)節(jié)點(diǎn)發(fā)生故障,可以通過該故障節(jié)點(diǎn)所在行中的存活存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù)塊d2和校驗(yàn)塊c1進(jìn)行修復(fù),也可以選擇該故障節(jié)點(diǎn)所在列中的存活存儲(chǔ)節(jié)點(diǎn)中的數(shù)據(jù)塊d3和校驗(yàn)塊c3來修復(fù)。另外,存儲(chǔ)數(shù)據(jù)塊d2、d3和d4的節(jié)點(diǎn)故障時(shí)也可以通過類似的方法實(shí)現(xiàn)快速修復(fù)。如圖5(b)所示,若是存儲(chǔ)校驗(yàn)塊c1的存儲(chǔ)節(jié)點(diǎn)發(fā)生故障時(shí),連接對(duì)應(yīng)行存儲(chǔ)數(shù)據(jù)塊d1和d2的存儲(chǔ)節(jié)點(diǎn)即可實(shí)現(xiàn)快速修復(fù)。
兩個(gè)存儲(chǔ)數(shù)據(jù)d1和d2的存儲(chǔ)節(jié)點(diǎn)同時(shí)故障,則根據(jù)Pyramid碼在節(jié)點(diǎn)修復(fù)過程的獨(dú)立性,只需分別連接故障節(jié)點(diǎn)所在列(或者行)對(duì)應(yīng)的存活節(jié)點(diǎn)d3和c3、d4和c4同時(shí)進(jìn)行修復(fù),如圖6(a)所示;一個(gè)存儲(chǔ)數(shù)據(jù)塊的存儲(chǔ)節(jié)點(diǎn)和一個(gè)存儲(chǔ)校驗(yàn)塊的存儲(chǔ)節(jié)點(diǎn)同時(shí)故障,則只需連接三個(gè)存儲(chǔ)節(jié)點(diǎn)即可修復(fù),如圖6(b)所示,d1和c1同時(shí)發(fā)生故障,首先需要連接d3和c3來修復(fù)d1,然后利用d1和d2對(duì)c1進(jìn)行修復(fù);兩個(gè)同行(或者同列)校驗(yàn)塊的存儲(chǔ)節(jié)點(diǎn)同時(shí)故障,則需要連接對(duì)應(yīng)行(或者列)的四個(gè)數(shù)據(jù)塊進(jìn)行修復(fù),如圖6(c)所示,c3和c4同時(shí)故障,需要連接d1、d2、d3和d4即可實(shí)現(xiàn)故障節(jié)點(diǎn)修復(fù);若不是同行或者同列的存儲(chǔ)節(jié)點(diǎn)同時(shí)發(fā)生故障,則只需要連接三個(gè)數(shù)據(jù)塊的存儲(chǔ)節(jié)點(diǎn)即可,如圖6(d)所示,圖(1)是對(duì)角d1和d4發(fā)生故障,則只需要連接d3、c2和c3即可修復(fù),圖(2)中c1和d4同時(shí)失效,只需連接d1、d2和c4即可修復(fù)。