一种低数据重建开销的纠删码方法技术

技术编号:17195881 阅读:51 留言:0更新日期:2018-02-03 22:40
本发明专利技术公开了一种低数据重建开销的纠删码方法,包括:数据分块步骤、数据编码步骤、检查数据块状态步骤、根据失效块进行修复划分步骤以及相应的失效修复步骤,本发明专利技术结合了网络编码中蝴蝶码优秀修复带宽性质和局部重建的组内重建方法,可减少系统中数据重建时需求的磁盘读取和网络带宽传输。在本发明专利技术中,每个组具有两个校验块并利用局部重建码的组内编码来维持组内的最优修复带宽,再以部分校验块编码所有数据块来保证系统可靠性。相比局部重建码,该方法的组内校验具有更高的可靠性,所以需要的全局校验个数较少,故而可以在相等的存储开销下具有更低的修复带宽。

【技术实现步骤摘要】
一种低数据重建开销的纠删码方法
本专利技术属于计算机存储
,更具体地,涉及一种低数据重建开销的纠删码方法。
技术介绍
纠删码是一种保证数据冗余的编码方法,它首先将原始数据分裂为等大的数据块,然后再将数据块编码为校验块。当若干个数据块或校验块丢失时,纠删码技术可以保证原始数据仍然可以恢复。该技术广泛地应用在分布式存储系统和云存储系统上来提高系统可靠性,以防止磁盘失效或数据丢失等导致的数据不可访问。传统的编码方法中,n是数据块和校验块的总个数,k是数据块个数,m=n-k是校验块个数。首先,将大小为M的原始数据等分为k个数据块:D0、D1、…、Dk-1,编码之后产生m个编码块:C0、C1、…、Cm-1,数据块、编码块会存储在n个不同的存储节点上。存储节点是存储设备的逻辑抽象,既可以是一个磁盘也可以是一个存储服务器。相比于传统的副本技术,纠删码技术可以在较低的存储开销下提供与之对等的系统可靠性。然而,纠删码在数据修复过程中需要读取并传输多个磁盘上的数据,占用大量的存储资源和网络资源,所以在性能方面不及副本策略。以(n,k)里德-所罗门编码为例,只要该数据可修复,都需要k块整块数据块或校验块进行重建,所需要的数据量都是M。为了减小修复时的带宽,局部重建码(LocalReconstructionCodes,LRC)首先用部分校验块编码所有数据块来维持系统可靠性,然后对数据块进行分组并使用组内相互独立的编码,从而可以将大部分单点失效的重建约束在组内进行,通过增加存储开销的方式减少了修复开销。最小存储再生码中的蝴蝶码(ButterflyCoes),由于将编码块进行指数性的细粒度划分,可以通过有选择性地选取可以重复使用的一些片段参与修复来实现最佳修复带宽。在单点失效时,通过网络连接除失效块之外的所有有效块,每个块上按照一定规则下载一半的数据量来修复损坏的数据,可以有效地提高磁盘IO效率并减小修复带宽。但因为该方式只能有两个校验块,所以具有较大的局限性。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种低数据重建开销的纠删码方法,由此解决现有的局部重建码存在的存储开销较大以及蝴蝶码中只能有两个校验块而具有较大局限性的技术问题。为实现上述目的,本专利技术提供了一种低数据重建开销的纠删码方法,包括:(1)将数据量为M的原始文件等分为k个数据块,将k个数据块分别保存在k个数据节点上,并将k个数据块分为l/2组;(2)根据各组内数据块的个数将各组内的每个数据块分为多个数据片段,由各组对应的数据片段的布尔矩阵得到各组对应的两个局部校验块,分别由各组对应的两个局部校验块组成各组的局部生成矩阵;(3)由所有k个数据块的线性组合生成全局生成矩阵,通过分别计算全局生成矩阵中各行向量的所有数据块的乘积,得到了m个全局校验块;(4)依次检查各数据节点上的数据块是否出错或丢失,是则执行步骤(5),否则不作处理;(5)获取所有出现错误的组中失效的数据信息,记录各出现错误的组编号与各出现错误的组的额外校验块需求个数,根据局部校验组的校验个数与所有额外校验块需求个数的关系,确定是采用组内校验参与修复还是采用组内校验与全局校验共同参与修复的方式;(6)若采用组内校验参与修复,则获取组内参与修复的片段内容以及组内生成矩阵中相关的行向量以生成中间矩阵,将中间矩阵进行重排得到修复矩阵,由修复矩阵进行数据修复;(7)若采用组内校验与全局校验共同参与修复,则根据需要全局修复参与的局部组编号与其对应的失效块序号,读取全局生成矩阵中与需要全局修复参与的局部组相关的全局校验子矩阵,然后基于需要全局修复参与的局部组的局部生成矩阵、单位矩阵以及全局校验子矩阵生成校验矩阵,进而由该校验矩阵得到修复矩阵,以完成数据修复。优选地,步骤(2)具体包括:(2.1)对于每个分组,若该组内数据块的个数为k1,则将该组内的每个数据块划分为个数据片段;(2.2)获取该组对应的数据片段的布尔矩阵其中,为行k1列的矩阵,将表示为a和b均是具有个元素的列向量,A和B均为行k1-1列的布尔矩阵;(2.3)若k1=2,则该组对应的校验块P0和校验块P1的编码规则如下:其中,表示布尔矩阵中的元素值;(2.4)若k1>2,则该组对应的校验块P0和校验块P1的编码规则如下:其中表示k1×k1阶的转置矩阵,在中的反对角线上的元素均为1,其它元素均为零;(2.5)由该组对应的校验块P0和校验块P1组成该组的局部生成矩阵Gl为:优选地,步骤(3)具体包括:(3.1)由所有k个数据块的线性组合生成全局生成矩阵Gg,其中,Gg为m行k列的矩阵;(3.2)通过分别计算全局生成矩阵Gg中各行向量的所有数据块的乘积,得到m个全局校验块Cg,i,i=0~m,其中,第i个校验块Cg,i为全局生成矩阵Gg的第i行子矩阵与k个数据块的乘积,表示为:其中,αi表示全局生成矩阵Gg在有限域下的系数,其中,D0,D1,...,Dk-1表示k个数据块。优选地,步骤(5)具体包括:(5.1)根据状态检查,获取出现错误的组中失效的数据块编号以及校验块编号,由失效的数据块编号以及校验块编号生成丢失块集合;(5.2)将丢失块集合进行分解,获取每个局部校验组中失效的数据信息;(5.3)启动局部修复预处理,在出现错误的组中,如果该组的错误个数大于局部校验组的校验块个数,则记录该组的编号与所需的额外校验块的个数;(5.4)在全局修复预处理中,统计所有出现错误的组中的额外校验块的个数之和,若该和值大于全局校验块个数,则执行步骤(5.6),否则执行步骤(5.5);(5.5)返回成功状态,表示该丢失块集合能够完全修复,则获取每组错误划分,进行局部修复,如果该组错误参数大于0,代表该修复需要组内校验与全局校验共同参与;(5.6)返回错误状态,表示该丢失块集合无法完全修复。优选地,步骤(6)具体包括组内单错修复与组内双错修复:其中,组内单错修复包括:(6.1)获取单点错误下参与修复的片段内容以及出现错误的组的局部生成矩阵中相关的行向量,生成中间矩阵M,其中,中间矩阵M为行向量的组合并在末尾插入相关校验块编号的列向量;(6.2)将中间矩阵M中失效块的相应编号增加,以大于所有编码块编号并按照原有顺序排列,将中间矩阵M的编号值根据中间矩阵M在整个矩阵中的大小排名重新编号,以获得最终修复矩阵Mr;(6.3)修复矩阵Mr中的编号与重新获取并整合后的参与修复的块编号相契合,并通过集合记录需求修复的编号,对Mr进行行向量遍历,如果该行向量内需求修复编号个数为1,则修复,并去掉需求修复编号集合中的相应值,当集合为空值时表明单点修复完成;组内双错修复包括:(6.4)通过完全获取出现错误的组的局部生成矩阵生成中间矩阵M',并在M'末尾插入相关校验块编号的列向量,将M'经过需修复片段编号重排方式得到修复矩阵Mr',由Mr'进行修复。优选地,步骤(7)具体包括:(7.1)若需要全局修复参与的局部组内的数据块个数为ki,则生成一个行,列的单位矩阵I;(7.2)根据需要全局修复参与的局部组编号与其对应的失效块序号,读取全局生成矩阵Gg中与需要全局修复参与的局部组相关的全局校验子矩阵,其中,该全局校验子矩阵为为X-2行ki列的矩阵,X表示需要全局修复参本文档来自技高网
...
一种低数据重建开销的纠删码方法

【技术保护点】
一种低数据重建开销的纠删码方法,其特征在于,包括:(1)将数据量为M的原始文件等分为k个数据块,将k个数据块分别保存在k个数据节点上,并将k个数据块分为l/2组;(2)根据各组内数据块的个数将各组内的每个数据块分为多个数据片段,由各组对应的数据片段的布尔矩阵得到各组对应的两个局部校验块,分别由各组对应的两个局部校验块组成各组的局部生成矩阵;(3)由所有k个数据块的线性组合生成全局生成矩阵,通过分别计算全局生成矩阵中各行向量的所有数据块的乘积,得到了m个全局校验块;(4)依次检查各数据节点上的数据块是否出错或丢失,是则执行步骤(5),否则不作处理;(5)获取所有出现错误的组中失效的数据信息,记录各出现错误的组编号与各出现错误的组的额外校验块需求个数,根据局部校验组的校验个数与所有额外校验块需求个数的关系,确定是采用组内校验参与修复还是采用组内校验与全局校验共同参与修复的方式;(6)若采用组内校验参与修复,则获取组内参与修复的片段内容以及组内生成矩阵中相关的行向量以生成中间矩阵,将中间矩阵进行重排得到修复矩阵,由修复矩阵进行数据修复;(7)若采用组内校验与全局校验共同参与修复,则根据需要全局修复参与的局部组编号与其对应的失效块序号,读取全局生成矩阵中与需要全局修复参与的局部组相关的全局校验子矩阵,然后基于需要全局修复参与的局部组的局部生成矩阵、单位矩阵以及全局校验子矩阵生成校验矩阵,进而由该校验矩阵得到修复矩阵,以完成数据修复。...

【技术特征摘要】
1.一种低数据重建开销的纠删码方法,其特征在于,包括:(1)将数据量为M的原始文件等分为k个数据块,将k个数据块分别保存在k个数据节点上,并将k个数据块分为l/2组;(2)根据各组内数据块的个数将各组内的每个数据块分为多个数据片段,由各组对应的数据片段的布尔矩阵得到各组对应的两个局部校验块,分别由各组对应的两个局部校验块组成各组的局部生成矩阵;(3)由所有k个数据块的线性组合生成全局生成矩阵,通过分别计算全局生成矩阵中各行向量的所有数据块的乘积,得到了m个全局校验块;(4)依次检查各数据节点上的数据块是否出错或丢失,是则执行步骤(5),否则不作处理;(5)获取所有出现错误的组中失效的数据信息,记录各出现错误的组编号与各出现错误的组的额外校验块需求个数,根据局部校验组的校验个数与所有额外校验块需求个数的关系,确定是采用组内校验参与修复还是采用组内校验与全局校验共同参与修复的方式;(6)若采用组内校验参与修复,则获取组内参与修复的片段内容以及组内生成矩阵中相关的行向量以生成中间矩阵,将中间矩阵进行重排得到修复矩阵,由修复矩阵进行数据修复;(7)若采用组内校验与全局校验共同参与修复,则根据需要全局修复参与的局部组编号与其对应的失效块序号,读取全局生成矩阵中与需要全局修复参与的局部组相关的全局校验子矩阵,然后基于需要全局修复参与的局部组的局部生成矩阵、单位矩阵以及全局校验子矩阵生成校验矩阵,进而由该校验矩阵得到修复矩阵,以完成数据修复。2.根据权利要求1所述的方法,其特征在于,步骤(2)具体包括:(2.1)对于每个分组,若该组内数据块的个数为k1,则将该组内的每个数据块划分为个数据片段;(2.2)获取该组对应的数据片段的布尔矩阵其中,为行k1列的矩阵,将表示为a和b均是具有个元素的列向量,A和B均为行k1-1列的布尔矩阵;(2.3)若k1=2,则该组对应的校验块P0和校验块P1的编码规则如下:其中,表示布尔矩阵中的元素值;(2.4)若k1>2,则该组对应的校验块P0和校验块P1的编码规则如下:其中表示k1×k1阶的转置矩阵,在中的反对角线上的元素均为1,其它元素均为零;(2.5)由该组对应的校验块P0和校验块P1组成该组的局部生成矩阵Gl为:3.根据权利要求1所述的方法,其特征在于,步骤(3)具体包括:(3.1)由所有k个数据块的线性组合生成全局生成矩阵Gg,其中,Gg为m行k列的矩阵;(3.2)通过分别计算全局生成矩阵Gg中各行向量的所有数据块的乘积,得到m个全局校验块Cg,i,i=0~m,其中,第i个校验块Cg,i为全局生成矩阵Gg的第i行子矩阵与k个数据块的乘积,表示为:其中,αi表示全局生成矩阵Gg在有限域下的系数,其中,D0,D1,...,Dk-1表示k个数据块。4.根据权利要求1至3任意一项所述的方法,其特征在于,步骤(5)具体包括:(5.1)根据状态检查,获取出现错误的组中失效的数据块编号以及校验块编号,由失效的数据块编号以及校验块编号生成丢失块集合;(5.2)将丢失块集...

【专利技术属性】
技术研发人员:冯丹叶柳青胡燏翀柳青魏学亮
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1