[發明專利]一種基于網絡編碼的分布式存儲方法及其裝置有效
| 申請號: | 201310219794.6 | 申請日: | 2013-06-04 |
| 公開(公告)號: | CN103336785A | 公開(公告)日: | 2013-10-02 |
| 發明(設計)人: | 馮丹;李白;施展;柳青;焦田豐 | 申請(專利權)人: | 華中科技大學 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 華中科技大學專利中心 42201 | 代理人: | 方放 |
| 地址: | 430074 湖北*** | 國省代碼: | 湖北;42 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 網絡 編碼 分布式 存儲 方法 及其 裝置 | ||
1.一種基于網絡編碼的分布式存儲方法,適用于分布式存儲系統,包括數據編碼步驟、數據解碼步驟和數據修復步驟,分布式存儲系統由一個名字節點NS和P個存儲節點{DS1,DS2,DS3...DSp}構成,P≥3,其中用于存儲文件分塊的存儲節點稱為數據節點,為n個,3≤n≤p;其特征在于:
(1)數據編碼步驟,包括下述子步驟:
(1.1)數據分塊:
將原始文件D分割為c塊等大小的原始數據塊Dg,g=0,1...c-1,對于不足一塊原始數據塊大小的剩余原始數據DB,先記下DB的大小LB,再將其使用零填充補足為原始數據塊大小,作為原始數據塊Dc;
c=k×(d+1+i-k)-(i+1)×i/2,其中,k為恢復出原文件所需最少數據節點數目,2≤k<n;d為修復一個損壞節點時可用數據節點的數目,k≤d<n;i為編碼冗余參數,0≤i≤k-1;
(1.2)冗余編碼:
將c個原始數據塊Da與編碼矩陣Me進行有限域2q內的運算,編碼為r個編碼數據塊Cb,q=4、8、16、32或64;b=0,2,...r-1;r=(d+1+i-k)×n;
其中,編碼矩陣Me中的矩陣元素ab,g為屬于有限域2q的整數,0≤ab,g≤2q-1,編碼矩陣Me為一個r行c列的范德蒙矩陣;每個Cb都是c個原始數據塊(Dg)g=0,1...c-1的線性組合,線性組合系數對應為編碼矩陣Me第b行的行向量Vb,即每個Cb對應編碼矩陣Me第b行的行向量Vb;
(1.3)生成元數據文件Dmeta:
將編碼矩陣Me以及參數n、k、d、i、q和LB保存在元數據文件Dmeta中;
(1.4)數據存儲:
將r個編碼數據塊Cb存放在n個數據節點df上,f=0,1,...n-1,每個數據節點存儲α=d+1+i-k個編碼數據塊,并存儲一份Dmeta的副本;數據節點df存儲的數據塊為Ct,t=f×α,f×α+1,...(f+1)α-1;
(2)數據解碼步驟,包括下述子步驟:
(2.1)獲取文件元數據信息:
下載原始文件D的元數據文件Dmeta,得到編碼矩陣Me以及參數n、k、d、i、q和LB;
(2.2)下載可用數據塊:
判斷n個數據節點中可用數據節點數是否小于k個,是則數據讀取失敗,退出;否則任意選擇k個可用數據節點,k個數據節點中包含rk=k×α=k×(d+1+i-k)個編碼數據塊,共對應編碼矩陣Me中rk個行向量:從編碼矩陣Me這rk個行向量中選擇c個行向量,要求這c個行向量組成的方陣Me1可逆,然后下載這c個行向量所對應的c個編碼數據塊:Cb1,Cb2...Cbc;
(2.3)冗余解碼:
對所述方陣Me1矩陣求逆,得到其逆矩陣Me1-1,逆矩陣Me1-1中元素記為bgj,其中行數g=0,1,...c-1,列數j=0,1,...c-1;將逆矩陣Me1-1與下載的c個編碼數據塊做有限域2q內的運算,得到c個原始數據塊Dg,
Dg為c個編碼數據塊Cb0,Cb1...Cb(c-1)的線性組合,線性組合的系數為逆矩陣Me1-1對應的行向量Vdi;
(2.4)恢復數據:
將冗余解碼后得到的c個原始數據塊Dg按其下標的順序D0,D1...Dc-1依次寫入到恢復文件D0中,最后一塊原始數據塊Dc-1只寫其前LB個字節到恢復文件D0中,形成恢復文件D0;
(3)數據修復步驟,當一個數據節點dv損壞時,v為0、1、...或n-1,其存儲的編碼數據塊的修復包括下述子步驟:
(3.1)獲取文件元數據信息:
下載原始文件D的元數據文件Dmeta,得到編碼矩陣Me以及參數n、k、d、i、q和LB;
設置下載數據塊數目變量γ的初值:
γ=(2×c×d)/((2×k-i-1)×i+2×k×(d-k+1));
(3.2)計算數據塊修復信息,包括下述過程:
(3.2.1)置循環次數變量N1=0,判斷n個數據節點中可用數據節點數是否小于d個,是則數據修復失敗,退出;否則進行過程(3.2.2);
(3.2.2)從d個可用數據節點中隨機選擇γ個編碼數據塊,將它們對應的編碼矩陣Me的γ個行向量Vh組合為γ行c列矩陣Vs,h=1,2...γ;置N1=N1+1;
(3.2.3)生成一個(d+1+i-k)行γ列的修復矩陣Mr=[mp,h],其中每個元素mp,h從有限域2q內隨機取值,p=1,2,...(d+1+i-k),h=1,2,...γ;
(3.2.4)建立r行c列的新編碼矩陣Me’,Me’由原有行向量和新行向量V′p構成,原有行向量為可用數據節點所包括的編碼數據塊對應的編碼矩陣Me中的行向量,按其在Me中原有位置存在于Me’中,做有限域2q內的矩陣Mr與矩陣Vs乘法運算,得到新行向量V′z:
用新行向量V′p代替編碼矩陣Me中損壞的數據節點dv所存儲的α個編碼數據塊對應的行向量Vz,其中z=v×α,v×α+1,...(v+1)×α-1;
(3.2.5)檢查所述新編碼矩陣Me’是否滿足MDS性質,是則進行子步驟(3.3),否則進行過程(3.2.6);
(3.2.6)判斷是否N1≤L,是則轉過程(3.2.2);否則置N1=0,置γ=γ+1,然后轉過程(3.2.2),最大循環次數L=1000~3000;
(3.3)更新元數據文件:
將元數據文件Dmeta中的編碼矩陣Me替換為新編碼矩陣Me’,形成更新后的元數據文件Dmeta’,將其拷貝到各個數據節點;
(3.4)修復數據塊:
下載(3.2.2)中所隨機選擇的γ個編碼數據塊(Ce1,Ce2,...Ceγ),做有限域2q內矩陣Mr與γ個編碼數據塊(Ce1,Ce2,...Ceγ)的運算,得到修復的數據塊Cp’:
Cp’為γ個編碼數據塊(Ce1,Ce2,...Ceγ)的線性組合,線性組合的系數為修復矩陣Mr對應的行向量Vr;
(3.5)存儲數據塊:
將修復的數據塊Cp’存儲到一個新的可用數據節點上。
2.一種基于網絡編碼的分布式存儲裝置,適用于分布式存儲系統,包括數據編碼模塊、數據解碼模塊和數據修復模塊。分布式存儲系統由一個名字節點NS和P個存儲節點{DS1,DS2,DS3...DSp}構成,P≥3,其中用于存儲文件分塊的存儲節點稱為數據節點,為n個,3≤n≤p;其特征在于:
(1)數據編碼模塊,包括下述子模塊:
(1.1)數據分塊子模塊:
將原始文件D分割為c塊等大小的原始數據塊Dg,g=0,1...c-1,對于不足一塊原始數據塊大小的剩余原始數據DB,先記下DB的大小LB,再將其使用零填充補足為原始數據塊大小,作為原始數據塊Dc;
c=k×(d+1+i-k)-(i+1)×i/2,其中,k為恢復出原文件所需最少數據節點數目,2≤k<n;d為修復一個損壞節點時可用數據節點的數目,k≤d<n;i為編碼冗余參數,0≤i≤k-1;
(1.2)冗余編碼子模塊:
將c個原始數據塊Da與編碼矩陣Me進行有限域2q內的運算,編碼為r個編碼數據塊Cb,q=4、8、16、32或64;b=0,2,...r-1;r=(d+1+i-k)×n;
其中,編碼矩陣Me中的矩陣元素ab,g為屬于有限域2q的整數,0≤ab,g≤2q-1,編碼矩陣Me為一個r行c列的范德蒙矩陣;每個Cb都是c個原始數據塊(Dg)g=0,1...c-1的線性組合,線性組合系數對應為編碼矩陣Me第b行的行向量Vb,即每個Cb對應編碼矩陣Me第b行的行向量Vb;
(1.3)生成元數據文件Dmeta子模塊:
將編碼矩陣Me以及參數n、k、d、i、q和LB保存在元數據文件Dmeta中;
(1.4)數據存儲子模塊:
將r個編碼數據塊Cb存放在n個數據節點df上,f=0,1,...n-1,每個數據節點存儲α=d+1+i-k個編碼數據塊,并存儲一份Dmeta的副本;數據節點df存儲的數據塊為Ct,t=f×α,f×α+1,...(f+1)α-1;
(2)數據解碼模塊,包括下述子模塊:
(2.1)獲取文件元數據信息子模塊:
下載原始文件D的元數據文件Dmeta,得到編碼矩陣Me以及參數n、k、d、i、q和LB;
(2.2)下載可用數據塊子模塊:
判斷n個數據節點中可用數據節點數是否小于k個,是則數據讀取失敗,退出;否則任意選擇k個可用數據節點,k個數據節點中包含rk=k×α=k×(d+1+i-k)個編碼數據塊,共對應編碼矩陣Me中rk個行向量:從編碼矩陣Me這rk個行向量中選擇c個行向量,要求這c個行向量組成的方陣Me1可逆,然后下載這c個行向量所對應的c個編碼數據塊:Cb1,Cb2...Cbc;
(2.3)冗余解碼子模塊:
對所述方陣Me1矩陣求逆,得到其逆矩陣Me1-1,逆矩陣Me1-1中元素記為bgj,其中行數g=0,1,...c-1,列數j=0,1,...c-1;將逆矩陣Me1-1與下載的c個編碼數據塊做有限域2q內的乘法運算,得到c個原始數據塊Dg,
Dg為c個編碼數據塊Cb0,Cb1...Cb(c-1)的線性組合,線性組合的系數為逆矩陣Me1-1對應的行向量Vdi;
(2.4)恢復數據子模塊:
將冗余解碼后得到的c個原始數據塊Dg按其下標的順序d0,D1...Dc-1依次寫入到恢復文件D0中,最后一塊原始數據塊Dc-1只寫其前LB個字節到恢復文件D0中,形成恢復文件D0;
(3)數據修復模塊,當一個數據節點dv損壞時,v為0、1、...或n-1,其存儲的編碼數據塊的修復包括下述子模塊:
(3.1)獲取文件元數據信息子模塊:
下載原始文件D的元數據文件Dmeta,得到編碼矩陣Me以及參數n、k、d、i、q和LB;
設置下載數據塊數目變量γ的初值:
γ=(2×c×d)/((2×k-i-1)×i+2×k×(d-k+1));
(3.2)計算數據塊修復信息子模塊,包括下述單元:
單元(3.2.1),置循環次數變量N1=0,判斷n個數據節點中可用數據節點數是否小于d個,是則數據修復失敗,退出;否則轉單元(3.2.2);
單元(3.2.2),從d個可用數據節點中隨機選擇γ個編碼數據塊,將它們對應的編碼矩陣Me的γ個行向量Vh組合為γ行c列矩陣Vs,h=1,2...γ;置N1=N1+1;
單元(3.2.3),生成一個(d+1+i-k)行γ列的修復矩陣Mr=[mp,h],其中每個元素mp,h從有限域2q內隨機取值,p=1,2,...(d+1+i-k),h=1,2,...γ;
單元(3.2.4),建立r行c列的新編碼矩陣Me’,Me’由原有行向量和新行向量V′p構成,原有行向量為可用數據節點所包括的編碼數據塊對應的編碼矩陣Me中的行向量,按其在Me中原有位置存在于Me’中,做有限域2q內的矩陣Mr與矩陣Vs乘法運算,得到新行向量V′z:
用新行向量V′p代替編碼矩陣Me中損壞的數據節點dv所存儲的α個編碼數據塊對應的行向量Vz,其中z=v×α,v×α+1,...(v+1)×+α-1;
單元(3.2.5),檢查所述新編碼矩陣Me’是否滿足MDS性質,是則轉子模塊(3.3),否則轉單元(3.2.6);
單元(3.2.6),判斷是否N1≤L,是則轉單元(3.2.2);否則置N1=0,置γ=γ+1,然后轉單元(3.2.2),最大循環次數L=1000~3000;
(3.3)更新元數據文件子模塊:
將元數據文件Dmeta中的編碼矩陣Me替換為新編碼矩陣Me’,形成更新后的元數據文件Dmeta’,將其拷貝到各個數據節點;
(3.4)修復數據塊子模塊:
下載(3.2.2)中所隨機選擇的γ個編碼數據塊(Ce1,Ce2,...Ceγ),做有限域2q內矩陣Mr與γ個編碼數據塊(Ce1,Ce2,...Ceγ)的運算,得到修復的數據塊Cp’:
Cp’為γ個編碼數據塊(Ce1,Ce2,...Ceγ)的線性組合,線性組合的系數為修復矩陣Mr對應的行向量Vr;
(3.5)存儲數據塊子模塊:
將修復的數據塊Cvp存儲到一個新的可用數據節點上。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于華中科技大學,未經華中科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310219794.6/1.html,轉載請聲明來源鉆瓜專利網。





