发明内容
针对现有技术存在的问题,本发明的主要目的在于提供一种降低对丢失数据块进行恢复时给存储系统带来的网络带宽压力的针对二进制编码冗余存储系统的低带宽数据重构方法。
为实现上述目的,本发明提供一种针对二进制编码冗余存储系统的低带宽数据重构方法,该二进制编码冗余存储系统包含一编码矩阵和一数据校验矩阵,该数据校验矩阵包含行向量和列向量,当二进制编码冗余存储系统的存储节点发生损毁导致数据块丢失,对丢失的数据块进行恢复,该低带宽数据重构方法包括如下步骤(1)至步骤(4):
(1)建立该丢失的数据块与该数据校验矩阵行向量之间的对应关系,并根据二进制编码冗余存储系统中未丢失数据块所对应的数据校验矩阵的列向量所构成的子矩阵确定低带宽校验矩阵;
(2)判断低带宽校验矩阵是否多于一个;
(3)若低带宽校验矩阵多于一个,则判断利用各个低带宽校验矩阵对丢失数据块进行恢复所需要的未丢失数据块数量是否相同,即判断利用不同低带宽校验矩阵对丢失数据块进行恢复给二进制编码冗余存储系统各存储节点带来的I/O压力是否相同;
(4)若利用不同低带宽校验矩阵对丢失数据块进行恢复给二进制编码冗余存储系统各存储节点带来的I/O压力不相同,则选择所需重构数据块(未丢失的数据块)最少的,即对存储节点I/O压力影响最小的低带宽校验矩阵对丢失的数据块进行数据重构。
进一步地,当该步骤(2)判断低带宽校验矩阵只有一个,则利用该低带宽校验矩阵对丢失的数据块进行数据重构。
更进一步地,当该步骤(3)判断利用各个低带宽校验矩阵对丢失数据块进行恢复重构时,所需要的重构数据块(未丢失的数据块)的数据量相同,即对二进制编码冗余存储系统各存储节点的I/O压力影响相同,则任意选择一个低带宽校验矩阵对丢失的数据块进行数据重构。
更进一步地,利用低带宽校验矩阵和部分未丢失数据块对丢失的数据块进行数据重构。
更进一步地,该数据校验矩阵为H(k+r)m·rm,即该数据校验矩阵包含(k+r)·m个行向量和r·m个列向量,该损毁节点数为r′(1≤r′≤r),即系统丢失的数据块为r′,该丢失的数据块r′包含的微数据块为r′·m,该步骤(1)包含如下步骤(11)至步骤(12):
(11)从数据校验矩阵H(k+r)m·rm中选择r′·m个列向量,使r′·m个列向量所构成的矩阵与丢失的微数据块所对应的行向量组成的矩阵为(r′·m)×(r′·m)的满秩矩阵;
(12)该(r′·m)×(r′·m)的满秩矩阵H(r′m)·(r′m)为确定的低带宽校验矩阵。
更进一步地,该步骤(11)包含如下步骤(111)至步骤(115):
(111)计算数据校验矩阵H(k+r)m·rm的每一个列向量中元素“1”的个数;
(112)从数据校验矩阵H(k+r)m·rm中抽取出丢失数据块所对应的行向量,由抽取出的丢失数据块构成二进制矩阵H(r′m)·(rm),由数据校验矩阵H(k+r)m·rm中剩余的行向量构成二进制矩阵H(k+r-r′)m·rm,二进制矩阵H(k+r-r′)m·rm的最下端r·m个向量构成了一个单位矩阵,二进制矩阵H(k+r-r′)m·rm上部的k-r′个向量构成二进制矩阵H(k-r′)m·rm;
(113)依次确定该上部的k-r′个向量构成的二进制矩阵H(k-r′)m·rm行向量中元素“0”的个数,当该行向量中“0”的个数大于或等于r′·m时,记录每个“0”元素所在的列向量;
(114)在该记录的“0”元素所在的列向量中进一步寻找是否存在“0”元素个数大于或等于r′·m的行向量,若无,则记录步骤(113)所确定的列向量;若有,则记录新的列向量;
(115)根据步骤(114)记录的每一组列向量中“1”的个数,确定出“1”元素和为最小的r′·m个列向量,并确定与该“1”元素和最小的r′·m个列向量对应的H(r′m)·(r′m)的秩为满秩,构成(r′·m)×(r′·m)的满秩矩阵H(r′m)·(r′m)。
更进一步地,该步骤“利用低带宽校验矩阵和部分未丢失数据块对丢失的数据块进行数据重构”包含如下步骤:利用低带宽校验矩阵H(r′m)·(r′m)确定需要参与数据重构的微数据块;构成一个包含有r′·m个丢失的微数据块的r′·m个方程,利用该r′·m个方程构成的方程组求解出丢失的r′·m个数据块。
更进一步地,若该二进制矩阵H(k-r′)m·rm无行向量中“0”元素的个数皆小于r′·m时,则无法获得低带宽校验矩阵,即此时,系统在恢复丢失数据块时,无法获得降低系统存储节点I/O带宽的低带宽数据重构方法。
相对于现有技术,首先,本发明通过确定所需要重构数据量最小的低带宽校验矩阵对丢失数据块进行恢复,可减少数据块重构时对系统存储节点进行数据读取的网络带宽消耗,降低存储系统内部网络维护带宽的压力,即减少系统内部网络之间的数据传输量,降低系统对存储器件的读取次数;其次,本发明可以根据数据存储节点的运行情况,及网络带宽,I/O情况确定最优的数据重构策略,以实现系统调用最少的数据块,实现最小维护带宽的丢失数据块重构方法。在海量数据存储系统、传感系统网络等方面具有较好的应用价值。
具体实施方式
下面结合附图,详细说明本发明的具体实施方式。
如图1所示,为现有的将图形文件利用二进制编码冗余存储系统进行编码存储的示意图。将待存储的图形文件分为d1,1,d1,1,d1,3…个微数据块,对应D1,D2…个数据块,也可以称为宏数据块。每个宏数据块对应一个存储节点。宏数据块为微数据块的集合,微数据块是存储系统中最小的分块单元,针对存储文件而言,存储文件大小不同,则微数据块的大小也各异。每个宏数据块由m个微数据块构成,而每个宏数据块以一个整体存储在不同的存储节点中。在编码过程和译码过程中是以微数据块为单位进行的。在存储时,则以宏数据块为单位进行存储。
若存储节点1损毁时,那么数据块D1丢失,即对应的微数据块集合d1,1,d1,1,d1,3丢失,这时就需要对丢失数据块进行译码重构。其中,图1中最左侧为编码矩阵,通过现有的技术可将编码矩阵转换成数据校验矩阵,当文件编码存储完毕后,便确定了用于数据恢复的数据校验矩阵。编码矩阵用于对原始文件进行冗余编码,产生校验数据块(冗余数据块);当系统出现存储节点损毁,数据块丢失时,数据校验矩阵用于重构出丢失的数据块。
如图2所示,是本发明针对二进制编码冗余存储系统的低带宽数据重构方法系统流程图。该低带宽数据重构方法包括如下步骤:
S1、二进制编码冗余存储系统的存储节点发生损毁导致数据块丢失;
S2、确定存储系统的数据校验矩阵,根据数据存储的编码原理,当文件编码存储完毕后,便确定了用于数据恢复的数据校验矩阵,该数据校验矩阵包含行向量和列向量;
S3、判断是否可以确定低带宽校验矩阵,利用文件存储最初所用的编码矩阵所对应的数据校验矩阵与数据块之间的关系确定重构丢失数据块的全部低带宽校验矩阵。低带宽校验矩阵的确定方法为:建立该丢失的数据块与该数据校验矩阵行向量之间的对应关系,并根据二进制编码冗余存储系统中未丢失数据块所对应的数据校验矩阵的列向量所构成的子矩阵确定低带宽校验矩阵。若不能确定,进入步骤S4,若能确定,进入步骤S5;
S4、按照传统的方法进行数据重构;
S5、判断是否有多于一个低带宽校验矩阵,若否,进入步骤S6,若是,进入步骤S7;
S6、利用该低带宽校验矩阵和与该低带宽校验矩阵相对应的完好存储节点读取相应的数据块对丢失的数据块进行数据重构;
S7、判断判断利用各个低带宽校验矩阵对丢失数据块进行恢复所需要的未丢失数据块数量是否相同,即判断利用不同低带宽校验矩阵对丢失数据块进行恢复给二进制编码冗余存储系统各完好的存储节点带来的I/O压力是否相同,若是,进入步骤S8,若否,进入步骤S9;
S8、任意选择一个低带宽校验矩阵和与该低带宽校验矩阵相对应的完好存储节点读取相应的数据块对丢失的数据块进行数据重构;
S9、计算各个低带宽校验矩阵所对应的存储节点的I/O读取压力之和;
S10、选择整体I/O读取压力之和最小的存储节点组对应的低带宽校验矩阵作为最终的重构矩阵,利用该矩阵与其相对应的完好存储节点读取相应的数据块对丢失的数据块进行重构。
上述方法的原理为:从校验矩阵中根据丢失数据块的情况选择低带宽校验矩阵,低带宽校验矩阵确定了在重构丢失数据块的过程中所需要的未丢失数据块数量,进而在系统恢复过程中,因低带宽校验矩阵所需要的数据块少于原来方法所需要的数据块,因而,在数据恢复过程中会降低系统各个存储节点的I/O压力。
设该数据校验矩阵为H(k+r)m·rm,即该数据校验矩阵包含(k+r)·m个行向量和r·m个列向量,该损毁节点数为r′(1≤r′≤r),即系统丢失的数据块为r′,该丢失的数据块r′包含的微数据块为r′·m,一般地,损毁节点个数不能超过r个,即丢失的数据块个数不能超过r个,对应丢失的微数据块个数不能超过r×m个。由于当1≤r′<r时,从数据校验矩阵H(k+r)m·rm中选择r′·m个列向量构成恢复丢失数据块的低带宽校验矩阵具有多种选择方法。因而,研究是否存在更低维护带宽的方法,即如何选择出需要最少重构带宽的低带宽校验矩阵是本发明的创新点之一。上述步骤S3低带宽校验矩阵的确定方法包括如下步骤S31至步骤S32:
S31、从数据校验矩阵H(k+r)m·rm中选择r′·m个列向量,使r′·m个列向量所构成的矩阵与丢失的微数据块所对应的行向量组成的矩阵为(r′·m)×(r′·m)的满秩矩阵;
S32、该(r′·m)×(r′·m)的满秩矩阵H(r′m)·(r′m)为确定的低带宽校验矩阵。
该步骤S31包含如下步骤S311至步骤S315:
S311、计算数据校验矩阵H(k+r)m·rm的每一个列向量中元素“1”的个数;
S312、从数据校验矩阵H(k+r)m·rm中抽取出丢失数据块所对应的行向量,由抽取出的丢失数据块构成二进制矩阵H(r′m)·(rm),由数据校验矩阵H(k+r)m·rm中剩余的行向量构成二进制矩阵H(k+r-r′)m·rm,二进制矩阵H(k+r-r′)m·rm的最下端r·m个向量构成了一个单位矩阵,二进制矩阵H(k+r-r′)m·rm上部的k-r′个向量构成二进制矩阵H(k-r′)m·rm。由于该单位矩阵每一个列向量仅对应一个数据块,因此,该单位矩阵将不影响参与重构过程的数据块的个数。因此,本发明的使用范围可限于二进制矩阵H(k+r-r′)m·rm上部,即由k-r′个向量构建的二进制矩阵H(k-r′)m·rm。
S313、依次确定该上部的k-r′个向量构成的二进制矩阵H(k-r′)m·rm行向量中元素“0”的个数,当该行向量中“0”的个数大于或等于r′·m时,记录每个“0”元素所在的列向量;
S314、在该记录的“0”元素所在的列向量中进一步寻找是否存在“0”元素个数大于或等于r′·m的行向量,若无,则记录步骤S313所确定的列向量;若有,则记录新的列向量,如此循环,并记录下每次循环所确定的列向量。
S315、根据步骤S314记录的每一组列向量中“1”的个数,确定出“1”元素和为最小的r′·m个列向量,并确定与该“1”元素和最小的r′·m个列向量对应的H(r′m)·(r′m)的秩为满秩,构成(r′·m)×(r′·m)的满秩矩阵H(r′m)·(r′m)。
在确定低带宽校验矩阵后,利用低带宽校验矩阵和未丢失数据块对丢失的数据块进行数据重构,即利用低带宽校验矩阵H(r′m)·(r′m)确定需要参与数据重构的微数据块;构成一个包含有r′·m个丢失的微数据块的r′·m个方程,利用该r′·m个方程构成的方程组求解出丢失的r′·m个数据块。
另外,若该二进制矩阵H(k-r′)m·rm无行向量中“0”元素的个数皆小于r′·m时,则无法获得低带宽校验矩阵,只能按照传统的方法进行数据重构。
实施例一
当存储系统内部出现节点损毁时,对于一个由传统(n,k)MDS纠删码构造的存储系统,当系统中有≤n-k个节点出现损毁时,系统都需要调用k个节点上的数据对其进行恢复,而通常构造的纠删码都有n-k≤k。
若在二进制上构建的(6,3)范德蒙系统纠删码的校验矩阵如图3所示,由于β.H(k+r)·r=0,其中β表示存入存储系统的原始文件分块和校验数据分块,用[D1,D2,D3,D4,L,D10,L,D(k+r)·r]表示。若存储系统中第一个存储节点出现损毁,即存储文件分块[D1,D2,D3]出现丢失,则β=[X1,X2,X3,D4,L,D10,L,D18],其中[X1,X2,X3]对应的为已经丢失的数据块,而[D10,L,D18]为校验数据块。显然,不论选择数据校验矩阵——H矩阵中的任何三列向量作为恢复丢失数据块的依据,都会有三个校验数据块参与重构。因而,只能通过观察H矩阵的子矩阵[l4,l5,L,l9]T中“0”“1”的分布情况来确定低带宽的重构方法。
由H矩阵可知,若要重构出丢失的三个数据块,则需要从H矩阵的9个列向量中选择三列向量,并使得三列向量构成的矩阵的秩为3。近一步地,为获得最少重构带宽重构方法,且在译码过程中耗用最少的计算量,则有如下过程(如图3所示):
当重构过程不需要数据块D4参与运算,即H矩阵的列向量中对应第四个元素为“0”的列向量有:C2,C3,C5,C9;
其中列向量C2中有6个位上的元素为“1”,则可表示为C2(6);列向量C3中有4个位上的元素为“1”,则可表示为C3(4);列向量C5中有7个位上的元素为“1”,则可表示为C5(7);列向量C9中有7个位上的元素为“1”,则可表示为C9(7);
当重构过程不需要数据块D5参与运算时,即H矩阵的列向量中对应第五位元素为“0”的列向量有:C1,C3,C7,则列向量可分别表示为:C1(5),C3(4),C7(6);同样的,当重构过程不需要数据块D6参与运算时,即H矩阵的列向量中对应第六个元素为“0”的列向量有:C1,C2,C6,C8,C9,则列向量可分别表示为:C1(5),C2(6),C6(8),C8(5),C9(7);当重构过程不需要数据块D7参与运算时,即H矩阵的列向量中对应第七位元素为“0”的列向量有:C3,C4,C5,C6,C8,则列向量可分别表示为:C3(4),C4(8),C5(7),C7(6),C8(5);当重构过程不需要数据块D8参与运算时,即H矩阵的列向量中对应第八位元素为“0”的列向量有:C1,C5,C8,则列向量可分别表示为:C1(5),C5(7),C8(5);当重构过程不需要数据块D9参与运算时,即H矩阵的列向量中对应第九位元素为“0”的列向量有:C2,C3,则列向量可分别表示为:C2(6),C3(4)。由于该行向量中只有两个元素为零,即说明,当对宏数据块进行重构时,必有数据块D9参与恢复重构。
对于在二进制域上的(6,3)范德蒙系统码而言,可以很容易确定出可节约一个微数据块的低带宽重构算法。但却无可节约两个微数据块的重构算法,因为校验矩阵中并无在不同数据块上同时标记的相同三个列向量。即可以从搜索结果中任选一个恢复向量组,用来重构丢失的数据块。
对于本低带宽重构过程,由于原方法在重构一个宏数据块时需要调用3存储节点上的宏数据块,即9个微数据块,而利用本发明,则需要8个微数据块,即对于整个系统而言,则可以节约11.1%的重构带宽,这对于内部网络受限的存储系统而言,具有一定的实用意义。
实施例二
为了进一步说明本发明的有效性,本发明针对STAR码的译码过程按照本发明提出的方法进行低带宽优化,本实施例中STAR码的信息规模m=5,则校验列规模为3。根据STAR码的构建过程可得,当STAR码的信息规模m=5时,其生成矩阵可以表示为: 则P可表示为:
则由线性分组码的性质可以得到该编码的数据校验矩阵H,若H表示为: 则对Q进行标记,可得:
利用本发明提出的低带宽数据重构方法,可以得到系统在不同损毁情况下的低带宽数据重构方法。如当系统中第一个存储节点损毁时,即微数据块c0,0,c1,0,c2,0,c3,0丢失时,即其可用Q中的列向量C3,C4,C5,C6组成的子矩阵进行对丢失的数据块进行重构,在重构过程中c1,1,c0,2,c1,2,c0,3将不参加重构运算,即对于原重构方法而言,利用本方法重构第一个存储节点上的数据块时,系统可节约20%的网络数据传输带宽。如表1,为不同存储节点损毁时利用本发明的低带宽数据重构方法的达到的效果:
表1STAR码的低带宽重构算法性能
当系统中同时出现两个节点损毁时,每个文件将会有8个对应的数据块丢失,由数据校验矩阵可知,若要重构出每个文件丢失的8个数据块,需要数据校验矩阵中选择出8个列向量,且由这8个列向量构造的矩阵的秩为8,则可重构出丢失的数据块。由数据校验矩阵可知,对于系统中任意两个节点损毁,都可以选择出一个可以节约1个微数据块的重构方法。即在恢复两个存储节点中的数据块时,最少需要19个数据块,可节约一个数据块。
以上介绍了一种针对二进制编码冗余存储系统的低带宽数据重构方法。本发明根据数据校验矩阵中“0,1”分布特点,利用优化搜索方法,并根据各个存储节点的I/O读取压力,寻找最优低带宽校验矩阵并用于丢失数据块的重构过程,该方法可以减少系统在重构数据块时的重构带宽,减轻存储系统内部网络的带宽压力。本发明具有通用性,可以应用到所有利用二进制矩阵构造的编码存储系统中。本发明并不限定于以上实施例,任何未脱离本发明技术方案,即仅仅对其进行本领域普通技术人员所知悉的改进或变更,均属于本发明的保护范围之内。