一种部分重复码的扩张构造方法

文档序号:26004019发布日期:2021-07-23 21:21阅读:110来源:国知局
一种部分重复码的扩张构造方法

本发明属于大数据处理领域,具体涉及一种部分重复码的扩张构造方法。



背景技术:

随着计算机技术的飞速发展和互联网应用的不断普及,网络信息量呈现出爆炸性的增长。在大数据时代,海量数据对存储系统提出了严峻的挑战。传统集中式的文件系统已经无法满足大数据的存储需求,建立支持海量数据存储的新型文件系统成了大数据领域的一个重要研究课题。近年来,分布式存储系统以其高可用性、高可扩展性等优势,日益成为海量数据存储的主流系统。然而,在大规模分布式系统部署中,存储数据的物理设备容易发生故障,如节点离线、突发断电等,使得系统的可靠性面临严峻考验。为了保证数据的可用性,分布式存储系统需要引入数据冗余。传统基于复制的方案简单易于管理,并且支持高效的数据恢复。但是,复制机制的缺点在于存储开销大、存储效率低。

在相同冗余的情况下,纠删码技术可以大幅提高系统的存储效率。目前商用分布式存储系统中,数据编码方法一般采用最大距离可分(maximumdistanceseparable,mds)编码,能够达到最佳的存储效率。一个参数为(n,k)的mds码将原数据文件划分成k个大小相等的数据块,并通过线性编码生成n个不同的编码块。如果将上述n个编码块分散存储到n个节点上,则系统n个节点中任意k个就能够重构出原文件。如图1为mds码的编解码方式示意图,该数据重构性质称为mds特性。这种编码技术在提供有效存储冗余中占有重要的地位,特别适合大文件存储以及档案数据备份应用。特别地,reed-solomon(rs)码是一种典型的满足mds码特性的码字。

当分布式存储系统中出现节点失效时,为了保持系统既定的冗余量,需要恢复该失效节点存储的数据并存储到一个新的节点中,该过程称为节点修复过程。对于传统的rs码,其节点修复过程需要首先从k个未失效节点下载数据并解码出原文件,重新编码进而再生出丢失的数据并存储到新引入的节点上,如图2为mds码的节点修复方式示意图。为了恢复一个失效节点丢失的数据而解码出整个原数据文件,对网络带宽来说是一种巨大的浪费。

为了节点降低修复过程中的带宽消耗,文[a.g.dimakis,p.b.godfrey,y.wu,m.wainwright,andk.ramchandran,“networkcodingfordistributedstoragesystems,”ieeetrans.inf.theory,vol.56,no.9,pp.4539–4551,sep.2010]利用网络编码的思想提出了再生码的概念。再生码保留了mds特性,即系统n个节点中任意k个节点存储的数据即可重构出原文件。传统的再生码修复过程中,替换节点需要在未失效的节点中随机选择d个并从这d个存储节点分别下载大小为β的数据,所以其修复带宽为dβ。再生码的节点修复过程中不需要重构出原文件,因此修复带宽优于rs码。特别地,当节点修复带宽等于存储容量时,该码字称为最小带宽再生码。

然而,传统再生码的节点修复计算复杂度比较高,通常涉及大量的有限域运算,即每个参与修复的节点需要对其存储的数据进行特定的线性网络编码操作。此外,为了保证所有编码块是相互独立的,再生码的运算需要在一个较大的有限域内完成。考虑到实际系统中节点的读写带宽小于网络带宽,因此读写带宽很容易成为系统性能瓶颈。为了降低节点修复过程中的运算复杂度,文[s.elrouayhebandk.ramchandran,“fractionalrepetitioncodesforrepairindistributedstoragesystems,”annualallertonconferenceoncommunication,control,andcomputing,oct.2010]在再生码的基础上提出了部分重复(fractionalrepetition,fr)码的概念。如图3为部分重复码的编码过程示意图,fr码包含两个部分:一个外部mds码和一个内部重复码。原数据文件经过mds编码后,输出的编码块均匀复制ρ倍再分散存储到各节点上。当系统中发生节点失效时,可以通过从其它未失效的节点直接下载数据并存储到替换节点来完成修复,而不需要额外的运算。相比传统的rs码和再生码,fr码大幅提升了节点失效修复速度,降低了修复时间。

随着网络数据量的不断增大,分布式存储系统需要根据实际需求动态调整参数。目前已经提出的fr码构造方法通常采用特定的正则图和组合设计,生成的码字参数固定,不能动态调整,因此并不适用于实际分布式存储环境。



技术实现要素:

本发明的目的在于提供一种部分重复码的扩张构造方法,该方法的构造过程简单并且参数选择灵活。

本发明提供了一种部分重复码的扩张构造方法,包括如下步骤:

s1.选择一个参数给定的基础部分重复码;

s2.确定选择的基础部分重复码的扩张参数,将其符号集分成两个部分;

s3.将步骤s2中两个部分的符号集和相应的副本分散存储到扩张后的区组中;

s4.从满足步骤s3要求的部分重复码中选择存储容量最大的码字,作为基础部分重复码的扩张。

步骤s1具体为,选择一个参数为(n’,α’,θ’,ρ’)的部分重复码c’=(ω’,φ’),作为基础部分重复码。

步骤s2具体为,记扩张后的部分重复码为c=(ω,φ),其码字参数为(n,α,θ,ρ),将扩张部分重复码的符号集ω划分成两个部分,记为ω’和ω-ω’,其中ω’为基础部分重复码的符号集,ω-ω’为扩张过程中新增的符号集合。

步骤s3具体为,首先将符号集ω’中元素的ρ-ρ’个新副本分散存放到新增加的n-n’个区组中,然后将符号集ω-ω’中元素的ρ个副本分散存放到所有的n个区组中,其中ρ为扩张部分重复码的复制倍数,ρ’为基础部分重复码的复制倍数;n为扩张部分重复码的节点个数,n’为基础部分重复码的节点个数。

步骤s4具体为,分别计算满足步骤s3要求的部分重复码的存储容量,并选择存储容量最大的码字作为上述基础部分重复码的扩张。

本发明提供的这种部分重复码的扩张构造方法参数选择灵活、构造方式简单,能够增加系统的存储容量、提高系统的容错性,具有很好的实用价值。

附图说明

图1为mds码的编解码方式示意图。

图2为mds码的节点修复方式示意图。

图3为部分重复码的编码过程示意图。

图4为本发明的部分重复码的扩张构造方法的流程示意图。

图5为本发明的部分重复码的扩张构造方法实施例的构造示意图。

具体实施方式

如图4为本发明的部分重复码的扩张构造方法的流程示意图:本发明提供的这种部分重复码的扩张构造方法,包括如下步骤:

s1.选择一个参数给定的基础部分重复码;具体为,选择一个参数为(n’,α’,θ’,ρ’)的部分重复码c’=(ω’,φ’),作为基础部分重复码。

s2.确定选择的基础部分重复码的扩张参数,将其符号集分成两个部分;具体为,记扩张后的部分重复码为c=(ω,φ),其码字参数为(n,α,θ,ρ),将扩张部分重复码的符号集ω划分成两个部分,记为ω’和ω-ω’,其中ω’为基础部分重复码的符号集,ω-ω’为扩张过程中新增的符号集合。

s3.将步骤s2中两个部分的符号集和相应的副本分散存储到扩张后的区组中;具体为,首先将符号集ω’中元素的ρ-ρ’个新副本分散存放到新增加的n-n’个区组中,然后将符号集ω-ω’中元素的ρ个副本分散存放到所有的n个区组中,其中ρ为扩张部分重复码的复制倍数,ρ’为基础部分重复码的复制倍数;n为扩张部分重复码的节点个数,n’为基础部分重复码的节点个数。

s4.从满足步骤s3要求的部分重复码中选择存储容量最大的码字,作为基础部分重复码的扩张;具体为,分别计算满足步骤s3要求的部分重复码的存储容量,并选择存储容量最大的码字作为上述基础部分重复码的扩张。

在具体实施方式中,一个参数为(n,α,θ,ρ)的部分重复码c=(ω,φ),是指特定的n个子集集合φ={v1,v2,…,vn},其中每个子集称为一个区组,每个区组中的元素均来自于符号集ω={1,2,…,θ},并且满足每个区组均包含α个元素,ω中的每个元素都属于φ中ρ个不同的区组。此外,参数n,α,θ,ρ之间满足如下数值关系:nα=θρ。

现取一个原数据文件,经过mds编码后生成θ个编码块。这些编码块可以通过一个参数为(n,α,θ,ρ)的部分重复码c=(ω,φ)分散存储到一个包含n个节点的存储系统中。具体来说,每个编码块对应符号集ω中的一个元素,每个存储节点对应集合φ中的一个区组,该节点存储区组中的元素对应的编码块。由于每个区组包含α个元素,所以每个节点存储α个编码块;由于每个元素出现在ρ个不同的区组中,所以每个编码块的复制倍数为ρ。

具体来说,一个参数为(n,α,θ,ρ)的部分重复码的存储容量,是指系统n个节点中任意k个所能解码的数据大小。由于系统存储的编码块是由mds编码得到的,因此根据mds特性,任意k个节点包含的不同编码块个数,即为系统的存储容量。

给定一个参数为(n’,α’,θ’,ρ’)的部分重复码c’=(ω’,φ’),如果存在一个参数为(n,α,θ,ρ)的部分重复码c=(ω,φ),并满足以下条件

(1)且|φ’|=n’<|φ|=n;

(2)对集合φ’中的任意一个子集v’,集合φ中都存在唯一的子集v,使得

那么称c是c’的扩张。为方便起见,称c’为基础部分重复码,c为扩张部分重复码。

根据定义,一个部分重复码的扩张,是指在基础部分重复码的基础上增加若干新的点和区组,从而构成扩张后的扩张部分重复码。

在本实施例中,通过码字扩张操作,基础部分重复码符号集ω’中的每个元素都需要增加ρ-ρ’个副本。此外,符号集ω-ω’中每个新增的元素需要存放ρ个副本。

对于一个参数给定的基础部分重复码,其扩张方式可能不止一种。因此,如果要提高扩张部分重复码的存储容量,根据定义需要将新增的编码块及副本尽可能分散地存储到系统中的节点上。另一方面,由于基础部分重复码的编码块存放方式已经确定,所以需要在新增加的节点上分散存储新引入的编码块和相应的副本。

基于上述考虑,本发明的部分重复码的扩张构造方法首先将基础部分重复码c’的符号集ω’中元素的ρ-ρ’个新副本分散存放到新增加的n-n’个区组中,同时放置方式需要满足如下条件:如果符号集ω’的部分符号组合已经出现在c’的区组中,那么ω’中元素的ρ-ρ’个新副本在新增加的n-n’个区组中要尽可能避免出现同样的放置方式,从而达到分散编码块的目的。

在码字扩张过程中新增的符号,即ω-ω’,由于这些符号并没有在基础部分重复码c’的现有区组中出现,因此可以在扩张部分重复码c的所有区组中分散存放这些符号以及副本。

值得注意的是,满足上述条件的符号集ω’和ω-ω’及其副本的放置方式可能不止一种,而不同的放置方式则对应不同的码字。因此,对每个满足上述条件构造出的部分重复码,分别计算其存储容量,选择存储容量最大的码字,作为最终的扩张部分重复码。

如图5为本发明的部分重复码的扩张构造方法实施例的构造示意图,具体说明如下:

选定一个参数为(6,3,9,2)的基础部分重复码c’=(ω’,φ’),其中ω’={1,2,…,9},φ’包含如下6个区组:{1,2,3},{4,5,6},{7,8,9},{1,4,7},{2,5,8},{3,6,9};

假设将c’扩张成一个参数为(9,4,12,3)的部分重复码c=(ω,φ),其中ω={1,2,…,12}。根据部分重复码的扩张构造方法,对φ中的9个区组做如下处理:

步骤一、将符号集ω’中的9个元素的一个额外副本分散存放到新增的三个区组上;

步骤二、由于基础部分重复码c’中的符号1和符号2、3及符号4、7已经出现在φ’的区组中,所以可以将符号1和ω’中的其它元素放置到新的区组中。例如,可以将符号1和符号5放到一个新的区组中;由于符号5和符号4、6及符号2、8已经出现在φ’的区组中,那么可以将符号9添加到存放符号1和5的新区组中;进一步可以将符号2、6、7存放到一个新增的区组中,同时将符号3、4、8存放到一个新增的区组中;

步骤三、考虑符号集ω-ω’中新增的3个符号10、11、12和副本的放置方式。由于符号10、11、12并未出现在基础部分重复码c’的任何区组中,因此可以将其分散存放到所有9个节点上;

步骤四、将符号10分别添加到如下三个区组{1,2,3},{4,5,6},{7,8,9}中,从而得到新的区组{1,2,3,10},{4,5,6,10},{7,8,9,10};将符号11分别添加到如下三个区组{1,4,7},{2,5,8},{3,6,9}中,从而得到新的区组{1,4,7,11},{2,5,8,11},{3,6,9,11};将符号12分别添加到如下三个区组{1,5,9},{2,6,7},{3,4,8}中,从而得到新的区组{1,5,9,12},{2,6,7,12},{3,4,8,12}。

通过上述步骤,一个扩张部分重复码构造完成,如图5所示,其中bi表示区组,1≤i≤9。

经过计算可得,上述步骤构造的扩张部分重复码的存储容量达到理论上的最大值。因此,图5中的部分重复码的扩张方式是最优的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1