CN103688515B - 一种最小带宽再生码的编码和存储节点修复方法 - Google Patents
一种最小带宽再生码的编码和存储节点修复方法 Download PDFInfo
- Publication number
- CN103688515B CN103688515B CN201380001964.1A CN201380001964A CN103688515B CN 103688515 B CN103688515 B CN 103688515B CN 201380001964 A CN201380001964 A CN 201380001964A CN 103688515 B CN103688515 B CN 103688515B
- Authority
- CN
- China
- Prior art keywords
- data
- column
- node
- code
- data packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000011069 regeneration method Methods 0.000 title claims abstract description 37
- 230000008929 regeneration Effects 0.000 title claims abstract description 36
- 239000011159 matrix material Substances 0.000 claims abstract description 190
- 230000008439 repair process Effects 0.000 claims abstract description 74
- 238000012545 processing Methods 0.000 claims description 7
- 230000008901 benefit Effects 0.000 abstract description 4
- 230000008569 process Effects 0.000 description 29
- 230000001419 dependent effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- RZVAJINKPMORJF-UHFFFAOYSA-N Acetaminophen Chemical compound CC(=O)NC1=CC=C(O)C=C1 RZVAJINKPMORJF-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/61—Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
- H03M13/615—Use of computational or mathematical techniques
- H03M13/616—Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/1088—Reconstruction on already foreseen single or plurality of spare disks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1515—Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/373—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/3761—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1028—Distributed, i.e. distributed RAID systems with parity
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种最小带宽再生码的编码方法,包括如下步骤:将大小为B的原始数据平均分为k(k+1)/2个数据块,得到第一数据包;使用第一数据包构建尺寸为k×k的、对称的***矩阵S;构建k个编码标识码,每个编码标识码包括k个元素;分别将所述***矩阵的一列与编码标识码运算得到的编码数据包;分别选择n‑k个不同的***矩阵的列重复上述步骤,得到n‑k个编码数据包集;以所述编码数据包集Pg的编码标识码编号g为其列号,构建大小为(n‑k)×k的校验矩阵P;分别将所述***矩阵和编码矩阵的每行存储到一个存储节点。本发明还涉及一种上述存储节点的修复方法。实施本发明的最小带宽再生码的编码和存储节点修复方法,具有以下有益效果:运算简单、开销小、修复带宽较小。
Description
技术领域
本发明涉及分布式存储领域,更具体地说,涉及一种最小带宽再生码的编码和存储节点修复方法。
背景技术
随着计算机网络应用的迅速发展,网络信息数据量变得越来越大,海量信息存储变得尤为重要。传统意义的文件存储***已经不能满足现有应用的大容量、高可靠性、高性能等方面的要求,分布式存储***以其高效的可扩展性和高可用性成为存储海量数据的有效***。然而在分布式存储***中,存储数据的节点是不可靠的。为了能够由不可靠的存储节点提供可靠的存储服务,需要在存储***中引入冗余。引入冗余最简单的方法就是对原始数据直接备份,直接备份虽然简单但是其存储效率和***可靠性不高,而通过编码引入冗余的方法可以提高其存储效率。在目前的存储***中,编码方法一般采用MDS码(Maximum DistanceSeparable最大距离可分离),MDS码可以达到存储空间效率的最佳,一个(n,k)MDS纠错码需要将一个原始文件分成k个大小相等的模块,并通过线性编码生成n个互不相关的编码模块,由n个节点存储不同的模块,并满足MDS属性(n个编码模块中任意k个就可重构原始文件)。这种编码技术在提供有效的网络存储冗余中占有重要的地位,特别适合存储大的文件以及档案数据备份应用。
在分布式存储***中,把大小为B的数据存储在n个存储节点中,每个存储节点存储的数据大小为α。数据接收者只需要连接并下载n个存储节点中的任意k个存储节点的数据即可恢复出原始数据B,这一过程称为数据重建过程。RS(Reed‐Solomon里德‐所罗门)码是满足MDS码特性的一种码字。当存储***中的存储节点失效时,为了保持存储***的冗余量,需要恢复该失效节点存储的数据并将该数据存储在新节点中,该过程称为修复过程。然而,在修复过程中,RS码首先需要下载k个存储节点的数据并恢复出原始数据,之后为新节点编码出失效节点的存储数据。为了恢复一个存储节点的数据而解码出整个原始数据显然对传输带宽是一种浪费。
然而,***节点失效或者文件损耗,***的冗余度会随着时间而逐渐减小,因此需要一种机制来保证***的冗余。文献[R.Rodrigues and B.Liskov,“HighAvailability in DHTs:Erasure Coding vs.Replication”,Workshop onPeer-to-Peer Systems(IPTPS)2005.]中提出的EC码(Erasure Codes纠错码),该码在存储开销上是比较有效的,然而支持冗余恢复所需要的通信开销也比较大。图1表示只要***中有效节点数d≥k,就可以从现有节点中获得原始文件;图2表示恢复失效节点所存储内容的过程。从图1和图2中可以看出整个恢复过程是:1)首先从***中的k个存储节点中下载数据并重构原始文件;2)由原始文件再重新编码出新的模块,存储在新节点上。该恢复过程表明修复任何一个失效节点所需要的网络负载至少为k个节点所存储的内容。
同时,为了降低修复过程中所使用的带宽,文献[A.G.Dimakis,P.G.Godfrey,M.J.Wainwright,K.Ramchandran,“Network coding for distributed storagesystems”,IEEE Proc.INFOCOM,Anchorage,Alaska,May2007.]利用网络编码理论的思想提出了再生码(RGC,Regenerating Codes),RGC码也满足MDS码特性。再生码的修复过程中,新节点需要在剩下的存储节点中连接d个存储节点并分别从这d个存储节点中下载β大小的数据,所以RGC码的修复带宽为dβ。同时给出了RGC码功能修复的模型并提出了RGC码的两类最佳码:最小带宽再生码(MSR,Minimum‐storage Regenerating)和最小修复带宽再生码(MBR,Minimum‐bandwidthRegenerating)。RGC码的修复带宽优于RS码,但RGC的修复过程需要连接d(d>k)个存储节点(d称为修复节点)。另外,修复节点需要对其存储的数据执行随机线性网络编码操作。为了满足所有编码包是相互独立的,RGC码的运算需要在一个较大的有限域内。
专利PCT/CN2012/083174中提出了一种实用射影自修复码的编码、数据重构及修复方法。实用射影自修复码(PPSRC,Practical Projective Self-repairing Codes)同样具有自修复码的两个典型属性:丢失的编码模块可从其他编码模块中下载少于整个文件的数据进行修复;丢失的编码模块从一个给定数的模块中修复,该给定数只与丢失了多少模块数有关,而与具体哪些模块丢失无关。这些属性使得修复一个丢失模块的负载比较低,另外由于***中各节点地位相同、负载均衡使得在网络的不同位置,可以独立并发地修复不同丢失模块。
该码字除了满足以上条件外还有以下特性:当一个节点失效时,可以有(n‐1)/2对修复节点可供选择;当有(n‐1)/2个节点同时失效时,我们仍然可以使用剩下的(n+1)/2个节点中的2两个节点来修复失效节点。
PPSRC码的编码以及自修复过程仅涉及异或运算,并不像一般自修复码,其编码需要计算多项式相对较复杂,PPSRC码的计算复杂度小于PSRC码(ProjectiveSelf-repairing Codes射影自修复码)。同时,PPSRC码的修复带宽和修复节点优于MSR码。PPSRC码的冗余是可控的,适用于一般的存储***,PPSRC码的重建带宽达到最佳。
总而言之,PPSRC码有效地减少了数据存储节点,降低了***数据存储的冗余度,很大程度上提高了实用自修复码的使用价值。
然而,PPSRC码也存在一定的不足之处。首先,PPSRC码的编解码过程较为复杂,有限域及其子域的划分运算量相对较大,并且数据重构过程比较繁琐;其次,在PPSRC码中,编码模块是不可再分的,因此修复编码模块也必须是不可再分的。同时,PPSRC码的整个编解码过程运算复杂度较高,冗余量虽然可控但其实还是相当大的。通常PPSRC码存储节点数选取非常大,对于相对小一些的文件来说就显得完全没有必要了。这些均增加了PPSRC码在实际分布式存储***中实施难度,该射影自修复码通用性不强。
通过属性——当任意一个模块所存储的信息是由两个其他模块的信息异或而得到的情况下,任意两个模块信息就可用来修复第三个模块,在文献[A.Duminuco,E.Biersack,“Hierarchical Codes:How to Make Erasure CodesAttractive for Peer-to-Peer Storage Systems”,Peer-to-Peer Computing(P2P),2008.]中提出了一种HC码(Hierarchical Codes分层码)。HC码是一种迭代构造,从小的EC码开始逐渐构成一个大的编码,通过异或由EC码构造的子模块而产生。
其主要思想是:考虑一个大小为s×k的文件,将文件分成s个子群,每个子群包含k个未编码模块。在每个子群中使用一个(n,k)EC码来产生n-k个局部冗余编码模块。通过编码计划进一步由所有的s×k个未编码模块来产生r个全局冗余编码模块。因此形成一个编码群,将s×k个未编码模块编码成(s×n+r)个编码模块。局部冗余模块可以用来修复子群中节点的失效,因此只需要访问少于整个文件大小的模块就可以进行修复;而全局冗余模块提供进一步修复保证,即当一个子群中失效的模块太多而不能自修复时可通过全局冗余模块进行修复。由于HC码中***结构不对称,使得有些模块的地位或许比其他模块地位要高,使得很难做一个深入的恢复力分析(影响对编码有效性的理解);在实际***中如果利用该编码则需要更复杂的算法(不管是重构还是修复);在HC码中不同编码模块的地位不同,因而修复丢失的模块所需要的模块数不仅仅取决于丢失的模块数,还与具体哪些模块丢失有关;同样地,重构原始文件所需要的模块数可能也因不同的丢失模块而不同。
专利PCT/CN2012/071177中提出了一种RGC码,该方案中修复一个丢失的编码模块只需要一小部分的数据量,而不需要重构整个文件。RGC码应用线性网络编码思想,利用NC(Network Coding)属性(即最大流最小割)来改善修复一个编码模块所需要的开销,从网络信息论上可以证明用和丢失模块相同数据量的网络开销就可修复丢失模块。
RGC码主要思想还是利用MDS属性,当网络中一些存储节点失效,也就相当于存储数据丢失,需要从现有有效节点中下载信息来使得丢失的数据修复丢失的数据模块,并将其存储在新的节点上。随着时间的推移,很多原始节点可能都会失效,一些再生的新节点可以在自身再重新执行再生过程,继而生成更多的新节点。因此再生过程需要确保两点:1)失效的节点间是相互独立的,再生过程可以循环递推;2)任意k个节点就足够恢复原始文件。
图2描述了当一个节点失效后的再生过程。分布式***中n个存储节点各自存储α个数据,当有一个节点失效,新节点通过从其他d≥k个存活节点中下载数据并用于节点再生,每个节点的下载量为β,每个存储节点i通过一对节点Xi in,Xi out来表示,这对节点通过一个容量为该节点的存储量(即α)的边连接。再生过程通过一个信息流图描述,Xin从***中任意d个可用节点中各自收集β个数据,通过在Xout中存储α个数据,任何一个接收者都可以访问Xout。从信源到信宿的最大信息流是由图中最小割集决定,当信宿要重构原始文件时,这个流的大小不能低于原始文件的大小。
每个节点存储量α和再生一个节点所需要的带宽γ之间存在一个折中,因此又引入最小带宽再生码(MBR)和最小带宽再生码(MSR)。对于最小存储点可以知道每个节点至少存储M/k比特,因此可推出MSR码中当d取最大值即一个新来者同时和所有存活的n-1个节点通信时,修复带宽γMSR最小即而MBR码拥有最小修复带宽,可以推出当d=n-1时,获得最小修复负载
对于节点失效修复问题,考虑了三种修复模型:精确修复:失效的模块需要正确构造,恢复的信息和丢失的一样(核心技术为干扰队列和NC);功能修复:新产生的模块可以包含不同于丢失节点的数据,只要修复的***支持MDS码属性(核心技术为NC);***部分精确修复:是介于精确修复和功能修复之间的一个混合修复模型,在这个混合模型中,对于***节点(存储未编码数据)要求必须精确恢复,即恢复的信息和失效节点所存储的信息一样,对于非***节点(存储编码模块),则不需要精确修复,只需要功能修复使得恢复的信息能够满则MDS码属性(核心技术为干扰队列和NC)。
为了使RGC码运用到实际的分布式***中,即使不是最优情况也至少需要从k个节点下载数据才能修复丢失模块,因此即使修复过程所需要的数据传输量比较低,RGC码也需要高的协议负载和***设计(NC技术)复杂度来实现。另外RGC码中未考虑工程解决方法,如懒修复过程,因此不能避免临时失效所带来的修复负载。最后基于NC的RGC码的编解码实现所需要的计算开销比较大,比传统的EC码要高一个阶数。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述运算复杂、开销大、修复带宽较大的缺陷,提供一种运算简单、开销小、修复带宽较小的最小带宽再生码的编码和存储节点修复方法。
本发明解决其技术问题所采用的技术方案是:构造一种最小带宽再生码的编码方法,包括如下步骤:
A)将大小为B的原始数据平均分为k(k+1)/2个数据块,每个数据块大小为L比特,得到第一数据包;所述第一数据包表示为ci=bi,1bi,2...bi,L,i=1,2,...,k(k+1)/2;
B)使用所述第一数据包构建尺寸为k×k的、对称的***矩阵S;其中,按照其编号依次取得第一数据包,并将取得的第一数据包按照所述***矩阵中元素所在列的顺序、逐行依次填入所述***矩阵S的上三角中,得到所述***矩阵S的上三角;
C)构建k个编码标识码,每个编码标识码包括k个元素;分别将所述***矩阵的一列中的第一数据包按照一个标识编码中对应于该第一数据包编号的元素的值在该第一数据包的数据头或尾部加入设定数量的比特0,得到k个第二数据包,运算所述k个第二数据包得到一个编码数据包;对所述***矩阵中的该列使用不同的编码标识码重复上述步骤得到k个编码数据包;所述k个编码数据包按使用的编码数据包的编号排列而得到一个编码数据包集Pg=pg,1pg,2...pg,k,其中,g=1,2,..,n-k,pg,k是由所述第k个编码标识码和所述***矩阵的第g列得到的编码数据包;分别选择n-k个不同的***矩阵的列重复上述步骤,得到n-k个编码数据包集;
D)构建大小为(n-k)×k的校验矩阵P,所述校验矩阵P的各行为依次排列的所述编码数据包集Pg;
E)分别将所述***矩阵中的每一行包括的第一数据包存储到一个存储节点,得到k个***节点;分别将所述校验矩阵中的每一行存储到一个存储节点,得到n-k个校验节点,所述n是存储节点总数。
更进一步地,所述步骤C)进一步包括如下步骤:
C1)得到k个编码标识码;
C2)取得一个编码标识码,选择所述***矩阵的一列,对所选择的列的k个第一数据包分别依据该编码标识码中元素的最大值和该列中第一数据包所在行数对应的编码标识码元素值在该列第一数据包的数据头部或尾部分别添加设定数量的比特0,得到k个第二数据包;对所述k个第二数据包进行运算,得到一个编码数据包;
C3)依次使用不同的编码标识码依次分别对所选择的***矩阵的列重复步骤C2),直到得到n-k个编码数据包;将得到的编码数据包依次排列得到一个编码数据包集;
C4)分别依次选择所述***矩阵中k个不同的列并使用所述编码标识码重复步骤C2)和C3),得到n-k个编码数据包集。
更进一步地,所述步骤C1)进一步包括:
C11)判断k是否素数,如是,执行步骤C12);否则,执行步骤C13);
C12)按照(r1 a,r2 a,...,rk a)=(0,a,2a,...,(k-1)a)modk,a=1,2,...,n-k,分别将a=1,2,...,n-k带入数列(0,a,2a,...,(k-1)a),并对得到的数列中的元素分别取k的模,得到n-k个编码标识码;
C13)取大于k的最小素数p,并按照(r1 a,r2 a,...,rk a)=(a-1,2a-1,...,ka-1)modp,a=1,2,...,n-k,分别将a=1,2,...,n-k带入数列(a-1,2a-1,2a,...,ka-1),并对得到的数列中的元素分别取p的模,得到n-k个编码标识码。
更进一步地,所述步骤C2)进一步包括:
C21)取得所述编码标识码中的最大值,即rmax=max(r1 a,r2 a,...,rk a);
C22)在该***矩阵被选择的列的第y个第一数据包的数据头部添加等于当前使用的编码标识码中第y个元素值的比特0,而在该第一数据包的数据尾部添加rmax-ry a个比特0,得到一个第二数据包,其中,y=1,2,...,k;依次分别对该列的k-1个第一数据包按照其在该列的行数取相同的y值并重复上述步骤,得到k个第二数据包;g是被选择的***矩阵的列,g是1,2,..,n-k中的一个;
C23)将得到的k个第二数据包相加,得到由当前编码标识码产生的一个编码数据包pg,j,表示通过***矩阵的第g列数据和第j编码标识码运算得到的编码数据包。
更进一步地,所述步骤C4)中进一步包括:
C41)选择所述步骤C2)中编码标识码的相邻的下一个编码标识码;
C42)将所述取得的编码标识码作为当前使用的编码标识码,并重复步骤C2)和C3),直到所有的编码标识码均已使用。
更进一步地,所述步骤B)中进一步包括:
B1)将得到的第一数据包按照其编号取出,并按照所述***矩阵S中元素所在列的顺序、逐行依次填入所述***矩阵S的上三角部分,得到***矩阵的上三角 其中,B=k(k+1)/2;
B2)将上述步骤中得到上三角部分沿其对角线对折而得到该***矩阵的下三角部分,***矩阵表示为:
所述校验矩阵表示为: 其中,P1到Pn-k是上述步骤中每次重复步骤C3)时分别得到的编码数据包集;所述步骤D)中,还包括如下步骤:将所述***矩阵和所述校验矩阵排列为一个数据矩阵,并将该数据矩阵的每一行分别存储在各存储节点中;所述数据矩阵表示为:
本发明还涉及一种修复存储上述编码数据存储节点的方法,包括如下步骤:
I)确认存储节点失效,判断失效存储节点的类型是否***节点,如是,执行下一步骤;否则,执行步骤K);
J)由剩余的每个正常的***节点中下载该存储节点存储的第f个数据,即该***节点位于***矩阵第f列的数据,得到该失效节点中存储的k-1个数据,所述f是失效的***节点位于***矩阵的行数;f=1,2,...,k;选择该列数据对应的校验节点下载其存储的数据,使用所述由校验节点下载的数据和编码标识码运算,并结合所得到所述失效***节点中存储的***矩阵中一列的数据;得到所述失效***节点中的全部数据;将得到的数据存储在新的存储节点并使存储节点取代失效的***节点;
K)取得产生失效校验节点所存储编码数据包集对应的***矩阵的列号,由所有***节点中分别下载一个数据,所述下载的数据是***矩阵中一个完整的、对应于所述取得列号的列;使用所有编码标识码对所述下载的数据进行编码,得到所述失效校验节点存储的数据,将其存储到新的存储节点并使其取代失效的校验节点。
更进一步地,所述步骤J)进一步包括:
J1)取得失效***节点在***矩阵中的行数f,对于剩余正常的每个***节点,分别下载其位于***矩阵的第f列的第一数据包;
J2)选择存储由所述***矩阵第f列产生编码数据包集的校验节点下载其存储的编码数据包,使用下载的编码数据包和编码标识码进行编码运算的逆运算,得到所述***矩阵第f列的第一数据包;
J3)由所述***矩阵的行、列间的对应关系得到所述失效的***节点存储的第一数据包。
更进一步地,所述步骤K)进一步包括:
K1)确定失效的校验节点在编码矩阵中行数e,e=1,2,..,n-k;取得k个编码标识码;
K2)分别下载k个***节点的第e个第一数据包,得到所述***矩阵的第e列数据;取得编码标识码中的最大值,即rmax=max(r1 a,r2 a,...,rn a);
K3)对于得到的***矩阵第e列数据,分别使用取得的编码标识码对其进行编码处理,得到存储在所述失效节点的数据。
更进一步地,所述步骤K3)进一步包括:
K31)取得所述编码标识码中的最大值,即rmax=max(r1 a,r2 a,...,rk a);
K32)在该***矩阵被选择的列的第y个第一数据包的数据头部添加等于当前使用的编码标识码中第y个元素值的比特0,而在该第一数据包的数据尾部添加rmax-ry a个比特0,得到一个第二数据包,其中,y=1,2,...,k;依次分别对该列的k-1个第一数据包按照其在该列的行数取相同的y值并重复上述步骤,得到k个第二数据包;g是被选择的***矩阵的列,g是1,2,..,n-k中的一个;
K33)将得到的k个第二数据包相加,得到由当前编码标识码产生的一个编码数据包pg,j,表示通过***矩阵的第g列数据和第j编码标识码运算得到的编码数据包。
实施本发明的最小带宽再生码的编码和存储节点修复方法,具有以下有益效果:传统RGC码的构造基于有限域GF(q),编解码过程中设计到的有限域加法、减法以及乘法;有限域的运算虽然理论研究比较成熟,但实际运用起来比较繁琐、时间消耗大;而在本实施例中,由于减小了编解码过程中计算复杂度,以简单易于实施的异或运算取代了有限域复杂的运算。其编解码的运算仅仅限于快速的异或运算(即上述的相加),大大提高了节点修复及数据块再生的速率;本实施例中的二进制最小带宽再生码(BMBR Binary Minimum-bandwidth Regenerating)不仅降低了***运算复杂度,同时可以保证节点修复过程中所消耗的带宽是最小的(即原始文件大小),并不消耗多余的带宽。在带宽资源越来越宝贵的今天,上述BMBR码带来的裨益是显然的。BMBR码可以保证:丢失的编码块可以直接下载其他编码模块的若干子集进行修复;丢失的编码块可以通过固定数目的编码模块进行修复,该固定数目只与***丢失了多少模块数有关,而与具体哪些模块丢失无关。同时,BMBR码修复后的节点存储的数据和失效节点是完全一致的,也就是精确修复,很大程度上减少了***操作复杂度因此。综上,其运算简单、开销小、修复带宽较小。
附图说明
图1是现有技术中EC码的数据重构示意图;
图2是现有技术中EC码的失效存储节点修复示意图;
图3是现有技术中RGC码的数据重构示意图;
图4是本发明最小带宽再生码的编码和存储节点修复方法实施例中编码方法的流程图;
图5是所述实施例中编码数据包的取得流程图;
图6是所述是实施例中编码标识码的取得流程图;
图7是所述实施例中存储节点的修复流程图;
图8是所述实施例中编码数据包的取得示意图。
具体实施方式
下面将结合附图对本发明实施例作进一步说明。
如图4所示,在本发明最小带宽再生码的编码和存储节点修复方法实施例中,该最小带宽再生码的编码方法包括如下步骤:
步骤S41均分原始数据,得到第一数据包:在本步骤中,将大小为B的原始数据平均分为k(k+1)/2个数据块,每个数据块大小为L比特,得到第一数据包;所述第一数据包表示为ci=bi,1bi,2...bi,L,i=1,2,...,k(k+1)/2;在本实施例中,为了简单起见,作为一个例子,设上述得到数据块的大小为1比特,这样,每个第一数据包中包括了一个比特的数据,即ci=bi,1;这样,在本实施例中,上述参数B和k(k+1)/2在数量上是相等的,即B=k(k+1)/2。
步骤S42使用得到的第一数据包构建***矩阵:在本步骤中,使用上述步骤中得到的第一数据包构建尺寸为k×k的、对称的***矩阵S;其中,按照其编号依次取得第一数据包,并将取得的第一数据包按照***矩阵S中元素所在列的顺序、逐行依次填入***矩阵S的上三角中,得到***矩阵S的上三角。也就是说,在本步骤中,通过使用上述步骤中得到的第一数据包,得到一个***矩阵S。在本实施例中,该***矩阵是对称矩阵,即以该矩阵的对角线为轴,轴两侧的矩阵元素是对称的。为此,在本实施例中,采用了先得到该***矩阵的上三角,然后再将其对折,得到整个***矩阵的方法。得到***矩阵上三角的方法为:按照第一数据包的编号(即在其表达式中的下标i)将其取出,将i=1的第一数据包放置在***矩阵第1行中的第1列元素的位置上,将i=2的第一数据包放置在***矩阵第1行中的第2列元素的位置上,将i=3的第一数据包放置在***矩阵第1行中的第3列元素的位置上,以此类推,放置到第k个第一数据包时,得到***数据包的第1行;由于是构建***矩阵的上三角,所以,第i=k+1个第一数据包放置到该***矩阵S的第2行第2列元素的位置,按照上述方法,第k+2个第一数据包放置在该***矩阵S的第2行第3列,……,到第2行第k列时,放置的是第2k-1个第一数据包。总之,在构建上述上三角时,***矩阵S的第1行按照上述方法填入k个第一数据包(c1到ck),第2行填入k-1个数据包(ck+1到c2k-1),第3行填入k-2个第一数据包(c2k到c3k-2),……,第k行填入1个第一数据包(cB),于是,***矩阵S的上三角共使用k×(k-1)×(k-2)×(k-3)×L×2×1=k(k-1)/2,刚好将上述步骤中得到的第一数据包用完。得到***矩阵的上三角后,将其沿对角线对折,得到***矩阵S。也就是说,在本实施例中,将得到的第一数据包按照其编号取出,并按照***矩阵S中元素所在列的顺序、逐行依次填入所述***矩阵S的上三角部分,得到***矩阵S的上三角部分为 其中,B=k(k+1)/2;然后,将上述步骤中得到上三角部分沿其对角线对折而得到该***矩阵S的下三角部分,于是,***矩阵表示为:
步骤S43构建编码标识码,并使用编码标识码得到编码数据包集:在本步骤中,构建k个编码标识码,每个编码标识码包括k个元素(编码标识码的构建方法在稍后详述);之后,分别将***矩阵S的一列中的第一数据包按照一个标识编码中对应于该第一数据包编号的元素的值在该第一数据包的数据头或尾部加入设定数量的比特0,得到k个第二数据包,运算所述k个第二数据包得到一个编码数据包;对***矩阵S中的该列使用不同的编码标识码重复上述步骤得到k个编码数据包;所述k个编码数据包按使用的编码数据包的编号排列而得到一个编码数据包集Pg=pg,1pg,2...pg,k,其中,g=1,2,..,n-k,pg,k是由所述第g个编码标识码和***矩阵S的第k列得到的编码数据包;然后,分别选择n-k个不同的***矩阵S的列重复上述步骤,得到n-k个编码数据包集。也就是说,在本实施例中,选择***矩阵S中的一列,先使用得到的n-k个编码标识码中的一个(例如,编号为1编码标识码)对其进行添加比特0的处理,得到k个第二数据包,对得到的k个第二数据包进行异或运算,得到一个编码数据包;按照编码标识码的编号依次使用不同的编码标识码分别对该列进行相同的处理,共得到k个编码数据包;将这些得到的编码数据包按照其处理时使用的编码标识码依次排列,得到一个编码数据包集。分别再选择上述***矩阵S中n-k-1个不同的列进行上述步骤,共得到n-k个编码数据包集。值得一提的是,在本实施例中,通常可以由***矩阵S的第一列开始,一直选择到第n-k列来运行上述步骤。
步骤S44使用编码数据包集构建校验矩阵:在本步骤中,构建大小为(n-k)×k的校验矩阵P,校验矩阵P的各行为依次排列的所述编码数据包集Pg;即该校验矩阵P的每行是一个上述得到的编码数据包集;每行的第1列是使用第1个编码标识码得到的编码数据包,第2列是使用第2个编码标识码得到的编码数据包,以此类推,第k列是使用第k个编码标识码得到的编码数据包;校验矩阵P中不同的行是选择***矩阵S不同的列而得到的编码数据包集;通常,校验矩阵P的行是按照别选择的***矩阵S的列号顺序排列的;例如,由***矩阵S的第一列得到的编码数据包集是校验矩阵P的第一行,由***矩阵S的第二列得到的编码数据包集是校验矩阵P的第二行,由***矩阵S的第三列得到的编码数据包集是校验矩阵P的第三行,并以此类推。
步骤S45将***矩阵和校验矩阵中的每行数据分别存储到不同的存储节点:在本步骤中,分别将***矩阵S中的每一行包括的第一数据包存储到一个存储节点,得到k个***节点;分别将校验矩阵P中的每一行存储到一个存储节点,得到n-k个校验节点,以实现数据编码及存储。其中,n是存储节点总数。
在本实施例中的步骤S43中,其编码数据包的取得具体包括如下步骤:
步骤S51得到编码标识码:在本步骤中,得到k个编码标识码(取得编码标识码的具体步骤在稍后详述)。每个编码标识码中包括k个数值(或元素),这些数值指示出该编码标识码用于与***矩阵S的列运算产生第二数据包时,应该在与该数值(编码识别码中的数值)位置对应的第一数据包的数据头部添加比特0的个数。
步骤S52按照所述编码标识码对所述每个第一数据包在其数据头部或尾部添加设定数量的比特0,得到k个第二数据包:在本步骤中,首先选择一个***矩阵S的列,例如,***矩阵S的第一列;然后,选择一个编码识别码,例如,包括了k个元素的第一个编码识别码,使用该第一个编码识别码对该选择的列进行处理,得到k个第二数据包。处理过程如下:取得该第一列的第一个第一数据包,在其前面加该编码识别码中第一个元素值的比特0;得到所有编码识别码中元素值的最大值,将其与上述编码识别码中第一个元素值相减,得到一个数值;在该列第一个第一数据包的尾部增加上述相减得到数值个数的比特0;得到一个第二数据包;其中,在该数据包的数据尾部加入rmax-ri a个比特0,其中,rmax=max(r1 a,r2 a,...,rn a),为所有编码标识码中元素值的最大值,是事先求得的,通常其最大值为k-1;ri a是该第一数据包在本次操作中对应的编码标识码的元素值。如此,得到一个(例如,***矩阵S第1列第1行的第一数据包对应的)第二数据包;在上述选择的***矩阵S的列中,分别对其中位于不同行的第一数据包重复上述步骤,得到k个第二数据包。
步骤S53对所述k个第二数据包进行运算,得到其编码数据包:在本步骤中,如上所述,在选择的***矩阵列上,使用一个编码识别码,可以得到k个第二数据包,在本步骤中,将上述得到的k可第二数据包运算,得到一个编码数据包。值得一提的是,在本步骤中,运算或相加都是指将这些数据包彼此相互异或。对上述选择的***矩阵S的列分别使用剩余的k-1个编码标识码重复上述步骤S53和S53,得到k个编码数据包,这k个编码数据包是在相同的***矩阵S的列上,使用不同的编码标识码而得到的。将得到k个编码数据包按其使用的编码标识码序号排列为一行,得到一个编码数据包集。
步骤S54得到n-k个编码数据包集:选择不同的***矩阵S的列,重复上述步骤S52到步骤S53,直到得到n-k个编码数据包集;所述n-k个编码数据包集构成冗余符号。将这些得到的编码数据包集按照其产生时选择的***矩阵S的列号(通常,顺序选择***矩阵S的第1、2、3、…、n-k列)排列为一列,即可得到编码矩阵P。
此外,在本实施例中,编码数据包的取得过程请参见图8。图8从一个侧面表明了第一数据包、第二数据包及编码数据包之间的变换(转换)关系。
图6示出了在本实施例中得到编码标识码的具体步骤,包括:
步骤S61判断k是否为素数,如果是,执行步骤S62;否则,执行步骤S63;在本实施例中,这个k就是将原始数据平均分配为k(k+1)/2部分的k,是依据原始数据的大小事先设定的。
步骤S62按照(r1 a,r2 a,...,rk a)=(0,a,2a,...,(n-1)a)modk,a=1,2,...,k,得到k个编码标识码:在本实施例中,按照上述记载,分别将a=1,2,...,k带入数列(0,a,2a,...,(n-1)a),并分别对得到的数列中的元素分别取k的模,得到k个编码标识码。每个a分别代入数列并对其进行求模处理,得到一个编码标识码,其中,a的数值就是该编码标识码的序号。
步骤S63取大于k的最小素数p,并按照(r1 a,r2 a,...,rk a)=(a-1,2a-1,...,ka-1)modp,a=1,2,...,p-1,得到k个编码标识码:分别将a=1,2,...,p-1带入数列(a-1,2a-1,2a,...,ka-1),并分别对得到的数列中的元素分别取p的模,得到k个编码标识码。每个a分别代入数列并对其进行求模处理,得到一个编码标识码,其中,a的数值就是该编码标识码的序号。
实际的分布式存储***中,节点经常会发生失效。这时需要引入新的节点,替换失效的节点以保证***冗余维持在一定的范围内。这一过程称为节点再生。在本实施例中的最小带宽码中再生一个失效的节点,并且最小化所需的修复带宽,可以通过如下方式进行:
步骤S71确认节点失效:在本步骤中,确认有存储节点失效。
步骤S72判断该失效节点的类型:在本步骤中,判断失效节点的类型,就本实施例而言,存储节点的类型包括两种:一种是***节点,一个***节点存储***矩阵S中的一行数据,共有k个***节点;一种是校验节点,一个校验节点存储所述校验矩阵P中的一行数据,共有n-k个校验节点;在本步骤中,判断该失效节点是***节点还是校验节点,如果是***节点,还要判断该失效的存储节点在***节点中的编号,例如,是第f个***节点失效,此时,f在1到k之间取值,然后执行步骤S73;如果是校验节点,还要判断该失效的存储节点在校验节点中的编号,例如,是第i个校验节点失效,此时,i在1到n-k之间取值,然后执行步骤S74。值得一提的是,在本步骤的判断方法是结合实际的节点部署而得的。例如,在本实施例中,选择n个存储节点,前k个是***节点,后面的n-k个节点为校验节点。由于***在分配存储节点或分配存储节点所存储的数据时会记录相关节点分配信息,通常是以元数据的形式存储。这里的***,可以理解为一个服务器,它负责调度、管理以及所述节点失效判断。所以,可以由***中得到一个存储节点是***节点还是校验节点的信息,同时,也可以得到该节点对应的原始编码的列。
步骤S73选择剩余的k-1个***节点,分别下载其中的第f个数据,并选择对应的校验节点下载其数据,得到失效节点所存储的数据:在本步骤中,由剩余的每个正常的***节点中下载该存储节点存储的第f个数据,即该***节点位于***矩阵第f列的数据(缺少一个失效节点的第f个数据),得到该失效节点中存储的k-1个数据(在本实施例中,设发现一个失效节点就立即进行修复),其中,f是失效的***节点位于***矩阵的行数;f=1,2,...,k;选择该列数据对应的校验节点下载其存储的数据(也就是由***矩阵的、上述下载的列与编码标识码运算得到的校验数据),使用所述由校验节点下载的数据和编码标识码运算,并结合所得到失效***节点中存储的***矩阵中一列(即上述下载了k-1个数据的列)的已下载数据;得到失效***节点中的全部数据;将得到的数据存储在新的存储节点并使存储节点取代失效的***节点。在本步骤中,由于可以由上述步骤中所述的***得到失效节点的相关编码信息,对于每一个失效的校验节点,总是可以找到其对应的原始编码的列数据。
也就是说,在本步骤中,取得失效***节点在***矩阵中的行数f,对于剩余正常的每个***节点,分别下载其位于***矩阵的第f列的第一数据包;选择存储由所述***矩阵第f列产生编码数据包集的校验节点下载其存储的编码数据包,使用下载的编码数据包和编码标识码进行编码运算的逆运算,得到所述***矩阵第f列的第一数据包;由所述***矩阵的行、列间的对应关系得到所述失效的***节点存储的第一数据包。
步骤S74取得失效节点对应的***矩阵列号,下载该列数据,编码得到失效校验节点存储的数据:在本步骤中,取得产生失效校验节点所存储编码数据包集对应的***矩阵的列号e,e=1,2,..,n-k(该校验节点存储的编码数据包集是由***矩阵的该列数据和编码识别码运算而得到的),由所有***节点中分别下载一个数据,下载的数据是***矩阵中一个完整的、对应于取得列号的列(及***矩阵的第e列);使用所有编码标识码分别对下载的列数据进行编码(与编码时的运算相同),得到所述失效校验节点存储的数据,将其存储到新的存储节点并使其取代失效的校验节点。
步骤S75节点修复完成:在执行完上述步骤S73或步骤S74之后,执行本步骤,使得到的新的存储节点代替上述步骤中检测到的失效节点,完成节点的修复。
也就是说,对于校验节点失效而言,需要确定失效的校验节点在编码矩阵中行数e,e=1,2,..,n-k;并取得k个编码标识码(编码识别码是事先已知并存储的);然后,分别下载k个***节点的第e个第一数据包,得到***矩阵的第e列数据;对于得到的***矩阵第e列数据,分别使用取得的编码标识码对其进行编码处理,得到存储在所述失效节点的数据。
编码时,取得所述编码标识码中的最大值,即rmax=max(r1 a,r2 a,...,rk a);在该***矩阵被选择的列的第y个第一数据包的数据头部添加等于当前使用的编码标识码中第y个元素值的比特0,而在该第一数据包的数据尾部添加rmax-ry a个比特0,得到一个第二数据包,其中,y=1,2,...,k;依次分别对该列的k-1个第一数据包按照其在该列的行数取相同的y值并重复上述步骤,得到k个第二数据包;g是被选择的***矩阵的列,g是1,2,..,n-k中的一个;将得到的k个第二数据包相加(也就是将其异或),得到由当前编码标识码产生的一个编码数据包pg,j,表示通过***矩阵的第g列数据和第j编码标识码运算得到的编码数据包。
在本实施例中,对于k个原始的数据包(长度为L比特),不妨记为ci=bi,1bi,2...bi,L,i=1,2,...,k。难点在于成功找到n-k个独立的编码包,使得n个数据包(包括数据包和编码包)中的任意k个数据包是线性独立的。一般情况下,我们把满足以上条件的数据包称为(n,k)独立。
例如,取一个文件B={c1,c2},包含两个数据包c1、c2。明显可以看出,运用异或编码,存在三个线性独立的数据包{c1,c2,c1⊕c2}。然而,这并不能满足分布式存储***的要求。如果我们在数据包c1头部添加一个比特“0”,在数据包c2尾部添加一个比特“0”。记变动后的数据包为ci(ri),其中ri是在数据包ci头部添加的比特数。就上述三个数据包而言,变动后的数据包和编码包是线性独立的。
一般来讲,k个原始的数据包(长度为L比特),不妨记为ci=bi,1bi,2...bi,L,i=1,2,...,k,编码包ya通过如下方式给出:ya=c1(r1)⊕c2(r2)⊕…⊕ck(rk)。每个数据包ci头部总共添加的冗余比特数目为rmax=max{r1,r2,...,rk}。编码块ya唯一的标识符(即编码标识码)为IDa=(r1 a,r2 a,...,rk a)。可以看出,在数据包ci头部添加的ri冗余比特等效于操作
如果k是任意素数k,编码块ya唯一的标识符(即编码标识码)可以通过如下方式得到,即:ID=(r1 a,r2 a,...,rk a)=(0,a,2a,...,(k-1)a)modk,a=1,2,...,k.通过上述编码方式编码出的n个数据包{c1,c2,...,ck,y1,y2...,yn-k}是线性独立的。例如,当k=5,编码标识相应地为ID1=(0,1,2,3,4)1,ID2=(0,2,4,1,3)2,ID3=(0,3,1,4,2)3,ID4=(0,4,3,2,1)4,ID5=(0,0,0,0,0)5.
如果k不是素数,而是一个正整数k,可以选择最小的素数p,并且满足p>k。此时编码标识可以表示为:
(r1 a,r2 a,...,rk a)=(a-1,2a-1,...,ka-1)modp,a=1,2,...,p-1.
例如,当k=4时,取p=5,编码标识相应地为ID1=(0,1,2,3)1,ID2=(1,3,0,2)2,ID3=(2,0,3,1)3,ID4=(3,2,1,0)4,ID5=(0,0,0,0)5.
综上所述,对于任意正整数k:如果k是素数的话,通过在k个原始数据包头前添加(p‐1)比特数据(p是素数,且p>k),我们可以构造出(n+k,k)线性独立的数据包。如果k不是素数的话,同样可以构造出(n+k,k)线性独立的数据包,只是此时在每个原始数据包添加(p‐2)比特数据。
通常,参数为(n,k,d)的MBR码包含n个节点,记为{N1,N2,...,Nn}。BMBR码应用于包含n个节点的***中,每个节点存储k个数据块。任意k个节点存储的数据({si}i=1,2,...,k)涵盖了文件的所有原始数据,通常也将这种编码称为***码。剩下的n‐k个节点,通常称之为校验节点,存储的是编码后的数据块。
将大小为B的文件等分成k(k+1)/2份,每份大小为L比特。记S为(k×k)对称的***矩阵,该矩阵的上三角数据来自集合{ci}i=1,2,...,B。因为S严格对称矩阵,所以相应地可以构造出完整的***矩阵S:
同理,记校验节点存储的编码块的矩阵为P,其具体形式为:
其中,pi,j是标识符为(0,i,2i,...,(k-1)i)imodk的数据包相异或后的编码包。比如说,当k=3时, 取L=3比特的话,数据包文件相应地就可以定义为:
当一个***节点Si(i=1,2,...,k)失效了,需要引入新的节点替换它,此时可以从任意k个节点中分别下载一个数据包进行修复。具体地做法是,所有选中的节点将其第i块数据包传输给该新引入的节点。如果校验节点Pi(i=1,2,...,n-k)失效了,同样需要引入新的节点进行替换,此时可以从每个***节点中分别下载一个数据包并进行相应的编码。编码的过程采用失效节点的标识符,将编码成功后的数据块传送给新引入的节点。由于编码过程所采用的标识符与失效节点的标识符一样,明显可以看出,修复后的节点存储的数据和失效节点是完全一致的。
无论是***节点还是校验节点失效,BMBR码总是可以实现失效节点的精确修复,同时满足最小割所规定的带宽界限。因此,就修复带宽而言,BMBR的修复过程是最优的。
BMBR码同样是一种MBR码,满足所有MDS码的特性。也就是说,从任意k个节点下载数据就可以恢复出原始数据B。通常,再生过程中下载所需要的带宽为k2,这显然不是最优的。下面我们将给出最优再生过程,可以使得修复过程中下载所需要的带宽最小。
最优再生过程如下:数据采集者(DC)可以选择下载数据矩阵M第一列的任意k个数据,第二列任意(k‐1)数据,第三列任意(k‐2)个数据,直到第k列下载一个数据。从BMBR码的构造过程可以知道,矩阵M的任意一列任意k个数据是相互独立的。同时,矩阵S是对称的,可以看出我们选择的只是矩阵S的下三角数据的以及矩阵P的数据。因此,DC可以获得B个线性独立的数据包,最终解码出原始的文件。
由以上再生过程可以看出,整个再生过程DC下载的数据总量为原始数据大小B,达到了理论上最优的修复带宽。
BMBR码性能评估时,主要分析比较本专利所提出的BMBR码与传统RGC、RS码在编码、解码以及修复过程中的计算复杂度。
编码计算复杂度:
对于BMBR码,***总共有(n-k)个校验节点,每个校验节点存储k个编码数据包,每个数据包是k个原始数据包通过异或运算得到。因此,编码计算复杂度为k(n-k)(k-1)异或运算。
对于RGC(基于GF(q)),同样***有(n‐k)个校验节点,每个校验节点存储k个编码数据包。不同的是,编码包是通过k个原始数据包在有限域GF(q)选择相应多项式系数,进行异或运算得到的。因而,传统RGC编码计算复杂度为k(n‐k)(k‐1)的异或运算,同时k2(n-k)的有限域GF(q)上的乘法运算。
对于RS码,原始文件大小为B=k(k+1)/2,每个节点仅仅存储一个数据包。通常为了存储大小为B的文件,需要存储(k+1)/2倍的RS(n,k)码所需的数据量。RS码编码过程和RGC相似,因此其计算复杂度为k(k+1)(n-k)/2的有限域乘法运算,(k-1)(k+1)(n-k)/2的异或运算。
修复计算复杂度:
对于BMBR码的修复过程,如果***中同时有***节点和校验节点失效的话,***节点可以理解为优先级高于校验节点。也就是说,***先修复***节点然后在修复校验节点。为修复一个***节点,至少需要一个校验节点、至多需要k个校验节点,因而修复一个***节点的计算复杂度为至少(k-1)、至多k(k-1)的异或运算。修复一个校验节点需要k个***节点,则校验节点的修复计算复杂度为k(k-1)的异或运算。
为了修复RGC的一个节点,k个协助节点将k个数据包汇集于新引入的节点,通过运算该节点通过运算将k个数据包再生成之前失效的数据包。所以,整个修复过程的计算复杂度至少为2k2的有限域乘法运算、(2k(k-1))的异或运算。
而对于RS码,修复一个失效的节点需要下载原始文件大小的数据量以重建原始文件,再编码生成失效节点存储的数据包。修复过程的计算复杂度为(k2(k+1)/2+k)的有限域乘法运算、(k2(k+1)/2+k-1)的异或运算。
解码计算复杂度:
为了恢复出原始文件,BMBR码需要k(k-1)(k+1)/2的异或运算。相似地,RGC的解码复杂度为k3的有限域乘法运算、k3的异或运算。RS码的解码运算复杂度为k2(k+1)/2的有限域乘法运算、k2(k+1)/2的异或运算。
总结BMBR码与传统RGC、RS码在编码、解码以及修复过程中的计算复杂度,如下表所示,其中,X代表异或运算,M代表有限域乘法运算:
本实施例中的最小带宽再生码(BMBR)相比传统RGC码,最大的优势在于其大大减小了编解码过程中计算复杂度,以简单易于实施的异或运算取代了有限域复杂的运算。传统RGC码的构造基于有限域GF(q),编解码过程中设计到的有限域加法、减法以及乘法。有限域的运算虽然理论研究比较成熟,但实际运用起来比较繁琐、时间消耗大,明显不能符合当今分布式存储***快速可靠的设计指标。二进制最小带宽再生码则不同,编解码的运算仅仅限于快速的异或运算,大大提高了节点修复及数据块再生的速率,在实际的分布式存储***中具有很高的应用价值和发展潜力。
本实施例中最小带宽再生码不仅降低了***运算复杂度,同时可以保证节点修复过程中所消耗的带宽是最小的(即原始文件大小),并不消耗多余的带宽。在带宽资源越来越宝贵的今天,BMBR码带来的裨益是显然的。BMBR码可以保证:丢失的编码块可以直接下载其他编码模块的若干子集进行修复;丢失的编码块可以通过固定数目的编码模块进行修复,该固定数目只与***丢失了多少模块数有关,而与具体哪些模块丢失无关。同时,BMBR码修复后的节点存储的数据和失效节点是完全一致的,也就是精确修复,很大程度上减少了***操作复杂度(如元数据更新、更新后的数据广播等)。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (5)
1.一种最小带宽再生码的编码方法,其特征在于,包括如下步骤:
A)将大小为B的原始数据平均分为k(k+1)/2个数据块,每个数据块大小为L比特,得到第一数据包;所述第一数据包表示为ci=bi,1bi,2...bi,L,i=1,2,...,k(k+1)/2;
B)使用所述第一数据包构建尺寸为k×k的、对称的***矩阵S;其中,按照其编号依次取得第一数据包,并将取得的第一数据包按照所述***矩阵中元素所在列的顺序、逐行依次填入所述***矩阵S的上三角中,得到所述***矩阵S的上三角;将得到的***矩阵S的上三角沿其对角线对折而得到完整的***矩阵S;
C)构建k个编码标识码,每个编码标识码包括k个元素;分别将所述***矩阵的一列中的第一数据包按照一个标识编码中对应于该第一数据包编号的元素的值在该第一数据包的数据头或尾部加入设定数量的比特0,得到k个第二数据包,运算所述k个第二数据包得到一个编码数据包;对所述***矩阵中的该列使用不同的编码标识码重复上述步骤得到k个编码数据包;所述k个编码数据包按使用的编码数据包的编号排列而得到一个编码数据包集Pg=pg,1pg,2...pg,k,其中,g=1,2,..,n-k,pg,k是由所述第g个编码标识码和所述***矩阵的第k列得到的编码数据包;分别选择n-k个不同的***矩阵的列重复上述步骤,得到n-k个编码数据包集;
D)以所述编码数据包集Pg的编码标识码编号g为其列号,构建大小为(n-k)×k的校验矩阵P;
E)分别将所述***矩阵中的每一行包括的第一数据包存储到一个存储节点,得到k个***节点;分别将所述校验矩阵中的每一行存储到一个存储节点,得到n-k个校验节点,所述n是存储节点总数;
其中,所述步骤C)进一步包括如下步骤:
C1)得到k个编码标识码;
C2)取得一个编码标识码,选择所述***矩阵的一列,对所选择的列的k个第一数据包分别依据该编码标识码中元素的最大值和该列中第一数据包所在行数对应的编码标识码元素值在该列第一数据包的数据头部或尾部分别添加设定数量的比特0,得到k个第二数据包;对所述k个第二数据包进行运算,得到一个编码数据包;
C3)依次使用不同的编码标识码依次分别对所选择的***矩阵的列重复步骤C2),直到得到n-k个编码数据包;将得到的编码数据包依次排列得到一个编码数据包集;
C4)分别依次选择所述***矩阵中k个不同的列并使用所述编码标识码重复步骤C2)和C3),得到n-k个编码数据包集;
所述步骤C1)进一步包括:
C11)判断k是否素数,如是,执行步骤C12);否则,执行步骤C13);
C12)按照分别将a=1,2,...,n-k带入数列(0,a,2a,...,(k-1)a),并对得到的数列中的元素分别取k的模,得到n-k个编码标识码;
C13)取大于k的最小素数p,并按照分别将a=1,2,...,n-k带入数列(a-1,2a-1,2a,...,ka-1),并对得到的数列中的元素分别取p的模,得到n-k个编码标识码。
2.根据权利要求1所述的最小带宽再生码的编码方法,其特征在于,所述步骤C2)进一步包括:
C21)取得所述编码标识码中的最大值,即
C22)在该***矩阵被选择的列的第y个第一数据包的数据头部添加等于当前使用的编码标识码中第y个元素值的比特0,而在该第一数据包的数据尾部添加个比特0,得到一个第二数据包,其中,y=1,2,...,k;依次分别对该列的k-1个第一数据包按照其在该列的行数取相同的y值并重复上述步骤,得到k个第二数据包;g是被选择的***矩阵的列,g是1,2,..,n-k中的一个;
C23)将得到的k个第二数据包相加,得到由当前编码标识码产生的一个编码数据包pg,j,表示通过***矩阵的第g列数据和第j编码标识码运算得到的编码数据包。
3.根据权利要求2所述的最小带宽再生码的编码方法,其特征在于,所述步骤C4)中进一步包括:
C41)选择所述步骤C2)中编码标识码的相邻的下一个编码标识码;
C42)将所述取得的编码标识码作为当前使用的编码标识码,并重复步骤C2)和C3),直到所有的编码标识码均已使用。
4.根据权利要求3所述的最小带宽再生码的编码方法,其特征在于,所述步骤B)中进一步包括:
B1)将得到的第一数据包按照其编号取出,并按照所述***矩阵S中元素所在列的顺序、逐行依次填入所述***矩阵S的上三角部分,得到***矩阵的上三角其中,B=k(k+1)/2;
B2)将上述步骤中得到上三角部分沿其对角线对折而得到该***矩阵的下三角部分,***矩阵表示为:
所述校验矩阵表示为:其中,P1到Pn-k是上述步骤中每次重复步骤C3)时分别得到的编码数据包集;所述步骤D)中,还包括如下步骤:将所述***矩阵和所述校验矩阵排列为一个数据矩阵,并将该数据矩阵的每一行分别存储在各存储节点中;所述数据矩阵表示为:
5.一种修复如权利要求1所述的编码方法中存储节点的存储节点修复方法,其特征在于,包括如下步骤:
I)确认存储节点失效,判断失效存储节点的类型是否***节点,如是,执行下一步骤;否则,执行步骤K);
J)由剩余的每个正常的***节点中下载该存储节点存储的第f个数据,即该***节点位于***矩阵第f列的数据,得到该失效节点中存储的k-1个数据,所述f是失效的***节点位于***矩阵的行数;f=1,2,...,k;选择该列数据对应的校验节点下载其存储的数据,使用所述由校验节点下载的数据和编码标识码运算,并结合所得到所述失效***节点中存储的***矩阵中一列的数据;得到所述失效***节点中的全部数据;将得到的数据存储在新的存储节点并使存储节点取代失效的***节点;
K)取得产生失效校验节点所存储编码数据包集对应的***矩阵的列号,由所有***节点中分别下载一个数据,所述下载的数据是***矩阵中一个完整的、对应于所述取得列号的列;使用所有编码标识码对所述下载的数据进行编码,得到所述失效校验节点存储的数据,将其存储到新的存储节点并使其取代失效的校验节点;
所述步骤J)进一步包括:
J1)取得失效***节点在***矩阵中的行数f,对于剩余正常的每个***节点,分别下载其位于***矩阵的第f列的第一数据包;
J2)选择存储由所述***矩阵第f列产生编码数据包集的校验节点下载其存储的编码数据包,使用下载的编码数据包和编码标识码进行编码运算的逆运算,得到所述***矩阵第f列的第一数据包;
J3)由所述***矩阵的行、列间的对应关系得到所述失效的***节点存储的第一数据包;
所述步骤K)进一步包括:
K1)确定失效的校验节点在编码矩阵中行数e,e=1,2,..,n-k;取得k个编码标识码;
K2)分别下载k个***节点的第e个第一数据包,得到所述***矩阵的第e列数据;取得编码标识码中的最大值,即
K3)对于得到的***矩阵第e列数据,分别使用取得的编码标识码对其进行编码处理,得到存储在所述失效节点的数据;
所述步骤K3)进一步包括:
K32)在该***矩阵被选择的列的第y个第一数据包的数据头部添加等于当前使用的编码标识码中第y个元素值的比特0,而在该第一数据包的数据尾部添加个比特0,得到一个第二数据包,其中,y=1,2,...,k;依次分别对该列的k-1个第一数据包按照其在该列的行数取相同的y值并重复上述步骤,得到k个第二数据包;g是被选择的***矩阵的列,g是1,2,..,n-k中的一个;
K33)将得到的k个第二数据包相加,得到由当前编码标识码产生的一个编码数据包pg,j,表示通过***矩阵的第g列数据和第j编码标识码运算得到的编码数据包。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2013/073180 WO2014153716A1 (zh) | 2013-03-26 | 2013-03-26 | 一种最小带宽再生码的编码和存储节点修复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103688515A CN103688515A (zh) | 2014-03-26 |
CN103688515B true CN103688515B (zh) | 2016-10-05 |
Family
ID=50323345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380001964.1A Expired - Fee Related CN103688515B (zh) | 2013-03-26 | 2013-03-26 | 一种最小带宽再生码的编码和存储节点修复方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9722637B2 (zh) |
CN (1) | CN103688515B (zh) |
WO (1) | WO2014153716A1 (zh) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102624866B (zh) * | 2012-01-13 | 2014-08-20 | 北京大学深圳研究生院 | 一种存储数据的方法、装置及分布式网络存储*** |
US20150142863A1 (en) * | 2012-06-20 | 2015-05-21 | Singapore University Of Technology And Design | System and methods for distributed data storage |
US10187088B2 (en) * | 2014-04-21 | 2019-01-22 | The Regents Of The University Of California | Cost-efficient repair for storage systems using progressive engagement |
US8850108B1 (en) * | 2014-06-04 | 2014-09-30 | Pure Storage, Inc. | Storage cluster |
US10437525B2 (en) * | 2015-05-27 | 2019-10-08 | California Institute Of Technology | Communication efficient secret sharing |
CN105187160A (zh) * | 2015-09-07 | 2015-12-23 | 香港中文大学深圳研究院 | 一种用于代数交换引擎数据包分组重组的编码方法 |
CN105187159A (zh) * | 2015-09-07 | 2015-12-23 | 香港中文大学深圳研究院 | 一种用于代数交换引擎数据包分组重组的解码方法 |
WO2017041231A1 (zh) * | 2015-09-08 | 2017-03-16 | 广东超算数据安全技术有限公司 | 一种精确修复的二进制再生码编解码 |
CN105260259B (zh) * | 2015-09-16 | 2018-01-02 | 长安大学 | 一种基于***最小存储再生码的局部性修复编码方法 |
CN105353974B (zh) * | 2015-10-08 | 2018-02-02 | 华东交通大学 | 一种适用于磁盘阵列及分布式存储***的二容错编码方法 |
CN105245314B (zh) * | 2015-10-20 | 2019-07-30 | 北京中电普华信息技术有限公司 | 分布式存储***中的混合冗余容错编解码方法及*** |
CN105808170B (zh) * | 2016-03-22 | 2018-06-26 | 华东交通大学 | 一种能够修复单磁盘错误的raid6编码方法 |
CN106788891A (zh) * | 2016-12-16 | 2017-05-31 | 陕西尚品信息科技有限公司 | 一种适用于分布式存储的最优局部修复码构造方法 |
CN110268397B (zh) * | 2016-12-30 | 2023-06-13 | 日彩电子科技(深圳)有限公司 | 应用于数据仓库***的高效优化数据布局方法 |
CN107086870B (zh) * | 2017-03-16 | 2019-10-22 | 东莞理工学院 | 修复多节点失效的mds阵列码编码以及解码方法 |
US10579495B2 (en) | 2017-05-18 | 2020-03-03 | California Institute Of Technology | Systems and methods for transmitting data using encoder cooperation in the presence of state information |
WO2019008748A1 (ja) * | 2017-07-07 | 2019-01-10 | 株式会社Asj | データ処理システムおよびこれを用いた分散データシステム |
CN108199720B (zh) * | 2017-12-15 | 2021-02-19 | 深圳大学 | 一种减小存储开销和提高修复效率的节点修复方法及*** |
CN108512553B (zh) * | 2018-03-09 | 2022-09-27 | 哈尔滨工业大学深圳研究生院 | 一种降低带宽消耗的截短再生码构造方法 |
US11188404B2 (en) * | 2018-07-10 | 2021-11-30 | Here Data Technology | Methods of data concurrent recovery for a distributed storage system and storage medium thereof |
US11531593B2 (en) * | 2018-09-03 | 2022-12-20 | Here Data Technology | Data encoding, decoding and recovering method for a distributed storage system |
CN111971945A (zh) * | 2019-04-03 | 2020-11-20 | 东莞理工学院 | 一种用于数据中心的机架感知再生码 |
US11513898B2 (en) * | 2019-06-19 | 2022-11-29 | Regents Of The University Of Minnesota | Exact repair regenerating codes for distributed storage systems |
CN110750382B (zh) * | 2019-09-18 | 2020-10-30 | 华中科技大学 | 用于提高数据修复性能的最小存储再生码编码方法及*** |
CN110781024B (zh) * | 2019-09-29 | 2023-02-28 | 长安大学 | 对称部分重复码的矩阵构造方法及故障节点修复方法 |
CN111125014B (zh) * | 2019-11-19 | 2023-02-28 | 长安大学 | 一种基于u-型设计的柔性部分重复码的构造方法 |
CN110990375B (zh) * | 2019-11-19 | 2023-01-31 | 长安大学 | 一种基于调节矩阵的异构部分重复码的构造方法 |
CN111224747A (zh) * | 2019-12-19 | 2020-06-02 | 湖北大学 | 可降低修复带宽和磁盘读取开销的编码方法及其修复方法 |
CN111385200B (zh) * | 2020-03-04 | 2022-03-04 | 中国人民解放军国防科技大学 | 用于数据块修复的控制方法和装置 |
CN111475330B (zh) * | 2020-03-10 | 2023-03-28 | 长安大学 | 基于Harary图生成树的FRSH码的***、构造及故障节点修复方法 |
CN111585582B (zh) * | 2020-05-14 | 2023-04-07 | 成都信息工程大学 | 一种基于阵列运算且码距自由确定的编码方法 |
CN111585581B (zh) * | 2020-05-14 | 2023-04-07 | 成都信息工程大学 | 一种基于二元域运算且支持任意码距的编码方法 |
CN112732203B (zh) * | 2021-03-31 | 2021-06-22 | 中南大学 | 一种再生码构造方法、文件重构方法及节点修复方法 |
CN113315525B (zh) * | 2021-06-03 | 2024-02-27 | 深圳市正粤知识产权服务有限公司 | 基于超立方体的局部修复码的构造及故障码元修复方法 |
CN113391948B (zh) * | 2021-06-29 | 2022-10-21 | 西安电子科技大学 | 一种折叠式可扩展分布式存储编码及修复、扩展方法 |
CN113553212B (zh) * | 2021-07-28 | 2023-07-18 | 哈尔滨工业大学(深圳) | 用于卫星集群存储网络的混合再生编码修复方法及*** |
CN113708780B (zh) * | 2021-08-13 | 2024-02-02 | 上海映盛网络技术股份有限公司 | 一种基于shadow的部分重复码构造方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010033644A1 (en) * | 2008-09-16 | 2010-03-25 | File System Labs Llc | Matrix-based error correction and erasure code methods and apparatus and applications thereof |
CN101834898A (zh) * | 2010-04-29 | 2010-09-15 | 中科院成都信息技术有限公司 | 一种网络分布式编码存储方法 |
CN102624866A (zh) * | 2012-01-13 | 2012-08-01 | 北京大学深圳研究生院 | 一种存储数据的方法、装置及分布式网络存储*** |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8631269B2 (en) * | 2010-05-21 | 2014-01-14 | Indian Institute Of Science | Methods and system for replacing a failed node in a distributed storage network |
EP2413506A1 (en) * | 2010-07-26 | 2012-02-01 | Thomson Licensing | Method for adding redundancy data to a distributed data storage system and corresponding device |
US20120266044A1 (en) * | 2011-04-18 | 2012-10-18 | The Chinese University Of Hong Kong | Network-coding-based distributed file system |
EP2570925A1 (en) * | 2011-09-19 | 2013-03-20 | Thomson Licensing | Method of exact repair of pairs of failed storage nodes in a distributed data storage system and corresponding device |
WO2013164228A1 (en) * | 2012-05-04 | 2013-11-07 | Thomson Licensing | Method of storing a data item in a distributed data storage system, corresponding storage device failure repair method and corresponding devices |
US20150142863A1 (en) * | 2012-06-20 | 2015-05-21 | Singapore University Of Technology And Design | System and methods for distributed data storage |
US9271229B2 (en) * | 2012-07-20 | 2016-02-23 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for partial downloading in wireless distributed networks |
US9647698B2 (en) * | 2013-02-26 | 2017-05-09 | Peking University Shenzhen Graduate School | Method for encoding MSR (minimum-storage regenerating) codes and repairing storage nodes |
-
2013
- 2013-03-26 US US13/996,825 patent/US9722637B2/en active Active
- 2013-03-26 CN CN201380001964.1A patent/CN103688515B/zh not_active Expired - Fee Related
- 2013-03-26 WO PCT/CN2013/073180 patent/WO2014153716A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010033644A1 (en) * | 2008-09-16 | 2010-03-25 | File System Labs Llc | Matrix-based error correction and erasure code methods and apparatus and applications thereof |
CN101834898A (zh) * | 2010-04-29 | 2010-09-15 | 中科院成都信息技术有限公司 | 一种网络分布式编码存储方法 |
CN102624866A (zh) * | 2012-01-13 | 2012-08-01 | 北京大学深圳研究生院 | 一种存储数据的方法、装置及分布式网络存储*** |
Non-Patent Citations (1)
Title |
---|
分布式存储中的再生码综述;郝杰 等;《重庆邮电大学学报(自然科学版)》;20130228;第25卷(第1期);第30-37页 * |
Also Published As
Publication number | Publication date |
---|---|
US9722637B2 (en) | 2017-08-01 |
WO2014153716A1 (zh) | 2014-10-02 |
US20160006463A1 (en) | 2016-01-07 |
CN103688515A (zh) | 2014-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103688515B (zh) | 一种最小带宽再生码的编码和存储节点修复方法 | |
CN103688514B (zh) | 一种最小存储再生码的编码和存储节点修复方法 | |
US10146618B2 (en) | Distributed data storage with reduced storage overhead using reduced-dependency erasure codes | |
US9141679B2 (en) | Cloud data storage using redundant encoding | |
CN110178122B (zh) | 分布式存储***的数据同步修复方法及存储介质 | |
US11500725B2 (en) | Methods for data recovery of a distributed storage system and storage medium thereof | |
EP2357731A1 (en) | Systematic encoding and decoding of chain reaction codes | |
Cadambe et al. | Optimal repair of MDS codes in distributed storage via subspace interference alignment | |
CN105518996B (zh) | 一种基于二进制域里德所罗门码的数据编解码方法 | |
WO2012008921A1 (en) | Data encoding methods, data decoding methods, data reconstruction methods, data encoding devices, data decoding devices, and data reconstruction devices | |
CN105808170B (zh) | 一种能够修复单磁盘错误的raid6编码方法 | |
CN107003933A (zh) | 部分复制码的构建方法、装置及其数据修复的方法 | |
CN112000512B (zh) | 一种数据修复方法及相关装置 | |
CN103650462B (zh) | 基于同态的自修复码的编码、解码和数据修复方法及其存储*** | |
CN112130772A (zh) | 一种基于稀疏随机纠删码技术的区块链安全存储方法 | |
JP2001028549A (ja) | 衛星アプリケーション用の積符号によって、セルを符号化する方法 | |
WO2014059651A1 (zh) | 一种射影自修复码的编码、数据重构及修复方法 | |
US20170264317A1 (en) | Method of encoding data and data storage system | |
WO2014012246A1 (zh) | 用于分布式网络存储的自修复码的编码、重构和恢复方法 | |
WO2017041232A1 (zh) | 一种二进制循环码的编解码框架 | |
WO2018029212A1 (en) | Regenerating locally repairable codes for distributed storage systems | |
WO2017041233A1 (zh) | 一种功能修复再生码的编码和存储节点修复方法 | |
CN108512553B (zh) | 一种降低带宽消耗的截短再生码构造方法 | |
Chen et al. | A new Zigzag MDS code with optimal encoding and efficient decoding | |
CN106911793B (zh) | I/o优化的分布式存储数据修复方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161005 |