基于迭代矩阵的部分重复码的构造方法及节点修复方法

文档序号:29492373发布日期:2022-04-06 13:50阅读:146来源:国知局
基于迭代矩阵的部分重复码的构造方法及节点修复方法

1.本发明属于计算机领域,具体涉及一种基于迭代矩阵的部分重复码的构造方法。


背景技术:

2.分布式存储系统常用的冗余技术包括复制策略和纠删码策略,复制策略存储开销过大,纠删码策略修复带宽开销过高。dimakis等人创造性地将网络编码技术应用于分布式存储,提出了再生码(再生码的研究主要分为两个方向:msr码和mbr码),进一步地,rashmi等人发现节点存储开销和修复带宽开销之间的最优折中曲线,达到曲线上两个极值点的再生码分别称为最小存储再生(minimum storage regenerating,msr)码和最小带宽再生(minimum bandwidth regenerating,mbr)码。再生码显著降低了故障节点的修复带宽开销,但是其在修复过程中涉及大量有限域运算,计算复杂度较高,且磁盘i/o开销过高。为此,在mbr码的基础上,rouayheb和ramchandran提出部分重复(fractional repetition,fr)码的概念,其结构由外部mds码和内部重复码组成,其中外部mds码用来确保分布式存储系统所需的mds属性,内部重复码用来保证有效的非编码修复过程。
3.现有fr码的大多数构造方法没有考虑实际分布式存储系统的需求,只能构造同构fr码,或者构造的异构fr码只能实现对单故障节点的未编码精确修复,构造算法较为单一。如使用hadamard矩阵构造fr码,可以降低修复局部性和修复带宽开销,但是其只能构造同构fr码。如使用正则图构造节点存储容量异构的fr码,只能实现单故障节点的未编码精确修复,且其算法复杂度较高。因此,为了更适用于实际分布式存储系统的需求,亟待研究一种能够修复单故障节点和多故障节点的修复效率高且易于扩展的构造方法。


技术实现要素:

4.本发明的目的在于,提供一种基于迭代矩阵的部分重复码的构造方法,用以解决现有技术通常只能构造同构fr码及构造算法不易扩展的问题,同时也解决现有技术构造的异构fr码只能修复单故障节点的问题。
5.为了实现上述任务,本发明采用以下技术方案:
6.一个方面,本发明提供了一种基于迭代矩阵的部分重复码的构造方法,该方法利用迭代矩阵构造重复度ρ=2的fr码,具体包括如下步骤:
7.步骤1,将原始文件分为m个原始数据块,对其采用(θ,m)mds码编码,m=θ-1,得到θ个编码块;
8.步骤2,构造迭代矩阵am:将作为迭代的原始矩阵,构造迭代矩阵
9.步骤3,通过迭代矩阵am构造fr码:令迭代矩阵am中的第i行表示分布式存储系统中
的第i个节点,第j列表示第j个编码块,若迭代矩阵am中第i行第j列的值为1,则将第j个编码块存储到分布式存储系统中的第i个节点中,依次类推,直至迭代矩阵被遍历,得到重复度ρ=2的同构fr码;
10.步骤4,向迭代矩阵am中增加一列s
m+1
,得到新的迭代矩阵am;其中,s
m+1
是大小为m+1的列向量,s
m+1
中只有两个元素为1,其余m-1个元素均为0;执行步骤3,得到重复度ρ=2的存储容量异构fr码;
11.步骤5,删除迭代矩阵am中的任意一列得到新的迭代矩阵am;执行步骤3,得到重复度ρ=2的存储容量异构fr码。
12.进一步的,所述步骤2中,构造的迭代矩阵满足:
13.1)迭代矩阵am中任意不同的两行最多有一个相同的元素,m≥1;
14.2)迭代矩阵am的列重为2;
15.其中:a
m-1
为am的上一级迭代矩阵。
16.另一个方面,本发明提供了一种基于迭代矩阵的部分重复码的构造方法,其特征在于,该方法利用迭代矩阵构造重复度ρ》2的fr码,具体包括如下步骤:
17.步骤1,将原始文件分为m个原始数据块,m=θ-1,对其采用(θ,m)mds码编码,得到θ个编码块;
18.步骤2,构造迭代矩阵am:将a1作为迭代的原始矩阵,a1是大小为ρ的全1列向量;构造迭代矩阵
19.步骤3,通过迭代矩阵am构造fr码:令迭代矩阵am中的第i行表示分布式存储系统中的第i个节点,第j列表示第j个编码块,若迭代矩阵am中第i行第j列的值为1,则将第j个编码块存储到分布式存储系统中的第i个节点上,依次类推,直至迭代矩阵被遍历,得到重复度ρ》2的同构或异构fr码;
20.进一步的,所述步骤2中,构造的迭代矩阵满足:
21.矩阵am的列重为ρ;
22.其中:a
m-1
为am的上一级迭代矩阵,p
ρ+m-2
是列重为ρ-1的ρ+m-2阶0-1矩阵。
23.进一步的,所述步骤3中,当步骤2中的矩阵p
ρ+m-2
的列为其0-1元素的全排列时,构造得到的是重复度ρ》2的同构fr码;当矩阵p
ρ+m-2
的列为其0-1元素的部分排列时,构造得到的是重复度ρ》2的节点存储容量异构fr码。
24.第三个方面,本发明提供了一种故障节点修复方法,该方法利用本发明的上述方法构造的fr码对待修复文件进行修复,包括如下步骤:
25.步骤1,判断故障为单点故障还是多点故障,若为单点故障则进入步骤2或者步骤3进行修复,若为多点故障则进入步骤3;
26.步骤2,单节点故障修复方法:当fr码中的单节点i故障,则对应于迭代矩阵am的第i行,找到迭代矩阵am的其余行中对应于第i行值为1处的列索引,然后依次从其余行中分别下载各列索引对应的编码块存入节点i,从而恢复故障节点i;
27.步骤3,设故障节点数目为l,如果l《ρ,进入步骤31;如果l≥ρ,执行步骤32;
28.步骤31,此时可实现故障节点的未编码精确修复;具体操作如下:分别对于每个故障节点采用步骤2的单节点故障的修复方法进行修复,直至所有故障节点修复完成;
29.步骤32,若fr码中的多个节点i1,...,i
l
故障,判断迭代矩阵am的剩余行中是否包含故障节点对应行i1,...,i
l
中的值为1处的所有列索引:是则可实现故障节点的未编码精确修复;具体操作如下:分别对于每个故障节点采用步骤2的单节点修复方法进行修复,直至所有故障节点修复完成;否则,即迭代矩阵am的剩余行中只包含部分列索引,则不能实现故障节点的未编码精确修复。
30.本发明与现有技术相比具有以下技术效果:
31.(1)本发明可构造同构和节点存储容量异构的fr码,对迭代矩阵增加或删除列,能够很容易地将同构fr码转换为异构fr码,算法复杂度降低;
32.(2)本发明不仅能够实现对单故障节点的未编码精确修复,也能够实现对多故障节点的未编码精确修复,且算法复杂度低;同时修复效率高,修复时只需找到矩阵剩余行中对应于故障行中值为1处的列索引,其就是恢复故障节点所需的编码块,即可实现故障节点的修复;
33.(3)本发明构造算法灵活,易于扩展,更适用于实际的分布式存储系统。
附图说明
34.图1是本发明实施例1中构造的重复度ρ=2的同构(n=5,α=4,θ=10,ρ=2)fr码,其中,(a)是迭代矩阵a4,(b)是由迭代矩阵a4构造的fr码节点存储结构图;
35.图2是本发明实施例2中构造的重复度ρ=2的异构(n=5,α=(4,5),θ=11,ρ=2)fr码,其中,(a)是向原a4中增加一列s5所得到的新矩阵,(b)是由新矩阵构造的fr码节点存储结构图;
36.图3是本发明构造的重复度ρ=2的异构(n=5,α=(3,4),θ=9,ρ=2)fr码,其中,(a)是删除原a4中的最后一列所得到的新矩阵,(b)是由新矩阵构造的fr码节点存储结构图;
37.图4是本发明构造的重复度ρ=3的同构(n=4,α=3,θ=4,ρ=3)fr码,其中,(a)是子矩阵p3和迭代矩阵a2,(b)是由迭代矩阵a2构造的fr码节点存储结构图;
38.图5是本发明构造的重复度ρ=3的异构(n=5,α=(4,5,6),θ=8,ρ=3)fr码,其中,(a)是子矩阵p4和迭代矩阵a3,(b)是由迭代矩阵a3构造的fr码节点存储结构图。
具体实施方式
39.首先对本发明中出现的技术词语进行解释:
40.原始文件:指将要存储的未被编码的文件,由多个数据组成。常见大小多为mb、gb等。
41.待修复文件:是原始文件损坏后的文件。
42.数据块:原始文件经过简单分割得到的一定大小的数据串。
43.编码块:利用纠删码算法,通过计算数据块而得到的存储原始信息和冗余信息的数据串。
44.存储节点:用于存储编码块,总的存储节点数用n表示。
45.节点存储容量:存储节点所包含的编码块的数量,用α表示。
46.重复度:编码块被复制的次数,用ρ表示。
47.同构fr码:节点存储容量α和重复度ρ都相等的fr码。
48.异构fr码:节点存储容量α或重复度ρ不相等的fr码。
49.mds码:指极大距离可分码。
50.在本实施例中公开了一种基于迭代矩阵的部分重复码的构造方法,该方法用于构造重复度ρ=2和重复度ρ》2的部分重复码,且该方法可构造同构和节点存储容量异构的fr码,构造算法灵活。
51.实施方式1:利用迭代矩阵构造重复度ρ=2的fr码。具体步骤如下:
52.步骤1,将原始文件分为m个原始数据块,m=θ-1,对其采用(θ,m)mds码编码,得到θ个编码块;
53.步骤2,构造迭代矩阵am:将作为迭代的原始矩阵,构造的迭代矩阵满足:
54.1)迭代矩阵am中任意不同的两行最多有一个相同的元素,m≥1;
55.2)迭代矩阵am的列重为2;
56.其中:a
m-1
为am的上一级迭代矩阵;
57.步骤3,通过迭代矩阵am构造fr码:令迭代矩阵am中的第i(1≤i≤n)行表示分布式存储系统中的第i个节点,第j(1≤j≤θ)列表示第j个编码块,若迭代矩阵am中第i行第j列的值为1,则将第j个编码块存储到分布式存储系统中的第i个节点中,依次类推,直至迭代矩阵被遍历,使得θ个编码块按照对应于迭代矩阵am的行列关系进行排列组合,然后存储到n个节点中,得到重复度ρ=2的同构fr码;
58.步骤4,向迭代矩阵am中增加一列s
m+1
,得到新的迭代矩阵am;其中,s
m+1
是大小为m+1的列向量,s
m+1
中只有两个元素为1,其余m-1个元素均为0;执行步骤3,得到重复度ρ=2的存储容量异构fr码;
59.步骤5,删除迭代矩阵am中的任意一列得到新的迭代矩阵am;执行步骤3,得到重复度ρ=2的存储容量异构fr码。
60.实施方式2:利用迭代矩阵构造重复度ρ》2的fr码。具体步骤如下:
61.步骤1,将原始文件分为m个原始数据块,m=θ-1,对其采用(θ,m)mds码编码,得到θ个编码块;
62.步骤2,构造迭代矩阵am:将a1作为迭代的原始矩阵,a1是大小为ρ的全1列向量。构造的迭代矩阵满足:
63.矩阵am的列重为ρ;
64.其中:a
m-1
为am的上一级迭代矩阵,p
ρ+m-2
是列重为ρ-1的ρ+m-2阶0-1矩阵;
65.步骤3,通过迭代矩阵am构造fr码:令迭代矩阵am中的第i(1≤i≤n)行表示分布式
存储系统中的第i个节点,第j(1≤j≤θ)列表示第j个编码块,若迭代矩阵am中第i行第j列的值为1,则将第j个编码块存储到分布式存储系统中的第i个节点上,依次类推,直至迭代矩阵被遍历,使得θ个编码块按照对应于迭代矩阵的行列关系进行排列组合,然后存储到n个节点中,得到重复度ρ》2的同构或异构fr码;
66.情况31,当矩阵p
ρ+m-2
的列为其0-1元素的全排列时,构造得到的是重复度ρ》2的同构fr码;
67.情况32,当矩阵p
ρ+m-2
的列为其0-1元素的部分排列时,构造得到的是重复度ρ》2的节点存储容量异构fr码。
68.在本发明中公开了一种故障节点修复方法,采用上述方法所构造的重复度ρ=2的fr码可以实现单故障节点的未编码精确修复,所构造的重复度ρ》2的fr码可以实现单故障节点和多故障节点的未编码精确修复。
69.本发明还给出了一种故障节点修复方法,该方法利用上述本发明的基于迭代矩阵的部分重复码的构造方法得到的fr码对待修复文件进行修复,包括如下步骤:
70.步骤1,判断故障为单点故障还是多点故障,若为单点故障则进入步骤2或者步骤3进行修复,若为多点故障则进入步骤3;
71.步骤2,单节点故障修复方法:当fr码中的单节点i故障,则对应于迭代矩阵am的第i行,找到迭代矩阵am的其余行中对应于第i行值为1处的列索引(即迭代矩阵的列序号,列序号对应fr码的编码块),然后依次从其余行(即fr码的其余节点)中分别下载各列索引对应的编码块存入节点i,从而恢复故障节点i;
72.步骤3,设故障节点数目为l,如果l《ρ,进入步骤31;如果l≥ρ,执行步骤32;
73.步骤31,此时可实现故障节点的未编码精确修复;具体操作如下:分别对于每个故障节点采用步骤2的单节点故障的修复方法进行修复,直至所有故障节点修复完成;
74.步骤32,若fr码中多个节点i1,...,i
l
故障,判断迭代矩阵am的剩余行(即fr码的剩余节点)中是否包含故障节点对应行i1,...,i
l
中的值为1处的所有列索引(即为修复fr码中故障节点所用到的全部编码块):是则可实现故障节点的未编码精确修复;具体操作如下:分别对于每个故障节点采用步骤2的单节点修复方法进行修复,直至所有故障节点修复完成;否则,即迭代矩阵am的剩余行中只包含部分列索引,则不能实现故障节点的未编码精确修复。
75.以下给出具体实施例,需要说明的是本发明中的实施例是根据不同的迭代矩阵所构造的重复度不同情况下的同构和异构fr码,其中n表示分布式存储系统的节点数,α表示节点的存储容量,θ表示编码块的数量且可表示为[θ]={1,2,...,θ},ρ表示重复度。规定迭代矩阵的行代表分布式存储系统的节点,迭代矩阵中不同的列代表不同的编码块。另外,提供了一种故障节点的修复方法。
[0076]
实施例1
[0077]
给定m=4,由实施方式1的方法可构造重复度ρ=2的同构(n=5,α=4,θ=10,ρ=2)fr码,如图1所示。具体地,迭代矩阵a4的一行对应分布式存储系统中的一个存储节点,故存储节点数为n=5。迭代矩阵a4的列代表不同的编码块,故总的编码块个数为θ=10。将迭代矩阵a4中值为1位置处的列索引作为编码块存储到对应的行索引(存储节点)上,可得每个存储节点存储α=m=4个编码块。
[0078]
修复过程:若节点1故障,只需从迭代矩阵α4的剩余2到5行中找到对应于第1行值为1处的列索引,分别为列索引1、2、4、7,然后从节点2下载编码块1,从节点3下载编码块2,从节点4下载编码块4,从节点5下载编码块7,实现节点1的未编码精确修复。
[0079]
实施例2
[0080]
给定迭代矩阵a4,由实施方式1的方法可构造重复度ρ=2的异构(n=5,α=(4,5),θ=11,ρ=2)fr码,如图2所示。具体地,向迭代矩阵a4中增加一列s5,选取s5=[0 0 1 0 1]
t
,可得存储节点数为n=5,总的编码块个数为θ=11。将矩阵中值为1位置处的列索引作为编码块存储到对应的行索引(存储节点)上,可得每个存储节点存储α=m=4或α=m+1=5个编码块。
[0081]
实施例3
[0082]
给定迭代矩阵a4,由实施方式1的方法可构造重复度ρ=2的异构(n=5,α=(3,4),θ=9,ρ=2)fr码,如图3所示。具体地,删除迭代矩阵a4的最后一列,可得存储节点数为n=5,总的编码块个数为θ=9。然后将迭代矩阵a4中值为1位置处的列索引作为编码块存储到对应的行索引(存储节点)上,可得每个存储节点存储α=m=4或α=m-1=3个编码块。
[0083]
实施例4
[0084]
给定m=2、ρ=3,由实施方式2的方法可构造重复度ρ=3的同构(n=4,α=3,θ=4,ρ=3)fr码,如图4所示。具体地,根据子矩阵p3可得迭代矩阵a2,迭代矩阵a2的行代表分布式存储系统中的一个存储节点,故存储节点数为n=4。迭代矩阵a2的列代表不同的编码块,故总的编码块个数为θ=4。将迭代矩阵a2中值为1位置处的列索引作为编码块存储到对应的行索引(存储节点)上,可得每个存储节点存储α=m+1=3个编码块。
[0085]
实施例5
[0086]
给定m=3、ρ=3,由实施方式2的方法可构造重复度ρ=3的异构(n=5,α=(4,5,6),θ=8,ρ=3)fr码,如图5所示。具体地,选取子矩阵p4可得迭代矩阵a3,迭代矩阵a3的行代表分布式存储系统中的一个存储节点,故存储节点数为n=5。迭代矩阵a3的列代表不同的编码块,故总的编码块个数为θ=8。将迭代矩阵a3中值为1位置处的列索引作为编码块存储到对应的行索引(存储节点)上,可得每个存储节点存储异构数量的编码块。
[0087]
采用实施例5构造的异构fr码进行多节点故障的修复过程:
[0088]
1)如节点2、3故障(l《ρ),执行步骤31,具体是:对应于迭代矩阵α3中的第2行和第3行。修复节点2时,需从节点1中下载编码块1、2、5,从节点4下载编码块4,从节点5下载编码块8;修复节点3时,需从节点1中下载编码块1、3、6,从节点4下载编码块4,从节点5下载编码块8。
[0089]
2)如节点3、4、5故障(l≥ρ),执行步骤32,具体是:对应于迭代矩阵α3中的后3行(第3、4、5行),其遍历了所有的列索引(迭代矩阵的第3、4、5行遍历了所有列索引1-8,即节点3、4、5存储了所有的8个编码块),而剩余的是第1行和第2行同样遍历了所有列索引,(矩阵的第1、2行同样遍历了所有列索引1-8,就是节点1和2存储了所有的8个编码块)因此可通过节点1和节点2修复节点3、4、5。如节点1、2、3故障时,对应于迭代矩阵α3中的前3行,其遍历了所有列索引,而剩余的第4行和第5行不能遍历到列索引1,即不能获取到编码块1,因此不能实现故障节点的未编码精确修复。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1