纠删码数据的快速编解码方法和系统的制作方法_2

文档序号:9579052阅读:来源:国知局
,还同时提供一种纠删码数据的快速解码系统,包括:
[0048] 生成矩阵第二初始化模块,用于根据分片数η和冗余数m初始化编码器,通过对范 德蒙德矩阵或柯西矩阵的变换,得到第一行和第一列元素均为1的生成矩阵;
[0049] 编码缓存表第二初始化模块,用于初始化编码乘法缓存表;
[0050] 解码矩阵模块,用于获取m+n个纠删码数据中的至少η个作为待解码数据,其中所 述待解码数据中有n-k个原数据及k个校验码,根据数据获取情况生成k阶解码矩阵;
[0051] 解码缓存表初始化模块,用于根据所述解码矩阵的逆矩阵初始化解码乘法缓存 表;
[0052] 恢复码模块,用于根据所述待解码数据中的k个校验码、n-k个原数据以及所述生 成矩阵,利用编码乘法缓存表计算出k个恢复码;
[0053] 还原模块,用于根据所述k个恢复码和所述解码矩阵的逆矩阵,利用解码乘法缓 存表计算恢复丢失的k个原数据,将恢复的原数据和所述待解码数据中的n-k个原数据组 成解码数据。
[0054] 本发明中提供了一种纠删码数据的快速编解码方法和系统,其技术方案使用的被 称为Sun矩阵的生成矩阵不同于现有范德蒙德矩阵和柯西矩阵,其特征为第1行和第1列 全为1,这使得无论在编码还是解码时,都能够减少伽罗瓦域乘法运算数量,且兼容副本算 法,大幅提高了纠删码数据的处理速度,从而在不牺牲数据处理效率及不增大硬件成本的 情况下保证了分布式系统尤其是云存储系统中数据的可靠性和有效性。
【附图说明】
[0055] 图1是本发明的一实施例中纠删码数据的快速编码方法的流程示意图;
[0056] 图2为本发明的另一实施例中纠删码数据的快速解码方法的流程示意图;
[0057] 图3为本发明的再一优选实施例中纠删码数据的快速编码方法的详细机器处理 流程示意图;
[0058] 图4为本发明的又一优选实施例中纠删码数据的快速解码方法的详细机器处理 流程示意图。
【具体实施方式】
[0059] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述。显然,所描述的实施例为实施本发明的较佳实施方式,所述描述是以说明本发明 的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围应当以权利要求所界 定者为准,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下 所获得的所有其他实施例,都属于本发明保护的范围。
[0060] 传统范德蒙德码和柯西码的编解码效率主要受伽罗瓦域计算量影响,导致算法复 杂度较高。本发明中改进的编解码方式可利用现有通用硬件实现快速高效的纠删码数据存 取,大幅提高了海量数据处理系统、尤其是云存储系统的工作效率。
[0061] 如图1所示,在本发明的一个实施例中,纠删码数据的快速编码方法包括步骤:
[0062] S11,根据分片数η和冗余数m初始化编码器,通过对范德蒙德矩阵或柯西矩阵的 变换,得到第一行和第一列元素均为1的生成矩阵(或将其称为Sun矩阵);
[0063] S12,初始化编码乘法缓存表;
[0064] S13,将待编码数据分为η个原数据,根据所述η个原数据和所述生成矩阵,利用编 码乘法缓存表计算出m个校验码;
[0065] S14,将所述η个原数据和得到的m个校验码分别存储和/或传输。
[0066] 相应地,如图2所示,在本发明的一个实施例中,与前述编码方法对应的纠删码数 据的快速解码方法包括步骤:
[0067] S21,根据分片数η和冗余数m初始化编码器,通过对范德蒙德矩阵或柯西矩阵的 变换,得到第一行和第一列元素均为1的生成矩阵;
[0068] S22,初始化编码乘法缓存表;
[0069] S23,获取m+n个纠删码数据中的至少η个作为待解码数据,其中所述待解码数据 中有n-k个原数据及k个校验码,根据数据获取情况生成k阶解码矩阵;
[0070] S24,根据所述解码矩阵的逆矩阵初始化解码乘法缓存表;
[0071] S25,根据所述待解码数据中的k个校验码、n-k个原数据以及所述生成矩阵,利用 编码乘法缓存表计算出k个恢复码;
[0072] S26,根据所述k个恢复码和所述解码矩阵的逆矩阵,利用解码乘法缓存表计算恢 复丢失的k个原数据,将恢复的原数据和所述待解码数据中的n-k个原数据组成解码数据。
[0073] 实施例1
[0074] 在本发明的优选实施例中,编码码方法的步骤SI1 (或编码方法的步骤S21)中,生 成矩阵为mXn矩阵。由于任何数乘以1均为它自身,因此在生成矩阵中尽可能多的使用1, 可以减少乘法数量。对范德蒙德矩阵变换得到生成矩阵时,只需令第一行元素为1即可,t匕 如对于上文【背景技术】中的范德蒙德矩阵61,令&1 = 1即可得到第一生成矩阵(或将其称为Vandermond-Sun矩阵):
[0075
其中各个ai互不相同且不为0,一个典型的示例如
[0076]
[0077] 对柯西矩阵变换得到生成矩阵时,要对柯西矩阵进行两次行和列的变换,使得第 一行和第一列均为1 :第一次行列变换,对所有行乘以该行第一列元素的倒数;第二次行列 变换,对所有列乘以该列第一行元素的倒数。以【背景技术】中的柯西矩阵G2为例,具体变换 方法如下所示:
[0078] 第一次变换,各行元素对应乘以(Xl+yi),得到
[0079]
[0080] 第二次变换,各行元素对应乘以(Xl+yj)AXl+yi),得到
[0081]
[0082];为进一步简化,可以令Xi+yi= 1,得到第二生成矩阵G4(或将其称为Cauchy-Sun矩阵):
[0083]
[0086] 步骤S12 (或步骤S22)中,针对生成矩阵中每个元素(第i行第j列元素),计 算出它对0x00至OxOf的伽罗瓦域乘法结果,存放在连续内存中,共计16字节;再计算它对 0x00、0xl0、0x20、"'OxfO的伽罗瓦域乘法结果,存放在后续16字节内存。于是对于整个 mXn的生成矩阵,共需mXnX32字节内存,该块内存称为编码乘法缓存表。编码乘法缓存 表(以及解码时使用的解码乘法缓存表)是用来加快后续的伽罗瓦域乘法计算速度。
[0087] 步骤S13中,假定待编码数据D被分为η个原数据Di到Dn,即有DQ^Dz,…,DJ。 在本发明的优选实施例中,当应用于云存储系统文件编码时,一般云存储系统的文件以分 块(Chunk)为单位,一个Chunk通常为64MB,将其除以n,得到η个小的数据块(block),例 如η= 8时,每个block大小为8MB。对于分块无法整除η的最后的block需要补0。
[0088] 利用η个原数据和生成矩阵计算第j个校验码的公式为
:;其中, GlS为本发明中生成矩阵(第一生成矩阵G3或第二生成矩阵G4均可)第i行第j列元素。
[0089] 由于本发明中生成矩阵的第一行和第一列元素均为1,对于第一个校验码Pi的计 算,无需伽罗瓦域乘法操作,直接计算啲异或和即可,因而首先就可省 略一部分的伽罗瓦域乘法操作的消耗。
[0090] 对于其余m-1个校验码,第一个原数据01直接用于计算异或和(因其对应系数Gn 总为1,可省略乘法计算),利用编码乘法缓存表计算时,将参与计算的其他每个原数据^ 拆分为高字节部分和低字节部分,分别乘以对应矩阵元素以计算伽罗瓦域乘法,随后再 计算对应的异或和以得到校验码。其中,所述伽罗瓦域乘法数据存放在所述编码乘法缓存 表中。
[0091] 举例来说,在编码方法中,对于每个字节数据X,可看成是由高字节4位hi和低字 节4位low组成,即:
[0092] X=hi XOR low;
[0093] 当计算X与某个值Y的伽罗瓦域乘法时,根据乘法分配率有:
[0094] X*Y= (hi XOR low)*Y= (hi*Y)X0R(low*Y);亦即其结果为高字节部分和低字节 部分分别计算伽罗瓦域乘法后的异或和。
[0095] 对于每个原数据Di的block,在做伽罗瓦域乘法时,例如计算校验数据PjUM)时, Di中的所有数据总是和相乘,在j确定时,对Di而言,也是生成矩阵中确定的值。因 此,当计算某个原数据Di乘以时,只要把其block中的高字节部分和低字节部分分别计 算出来,再计算异或(X0R)和即可。
[0096] 在本发明的实施例中,高字节部分和低字节部分分别乘以&的伽罗瓦域乘法结 果可以通过查找前述编码乘法缓存表得到,该方式可以进一步减少系统的实时运算需求, 从而加快编码速度。
[0097] 其中,使用SIMD (Single Instruction Multiple Data,单指令多数据流)指令可 以实现伽罗瓦域乘法和异或和的并行计算。比如Intel SSE或AVX指令集提供了基于128 位的并行查表计算伽罗瓦域乘法功能。以下是SSE指令集示例代码:
[0098] movups xmm4, xmmO;寄存器xmm4复制xmmO内容
[0099] pand xmmO, xmml;获取16字节的全部low部分放在xmmO
[0100] pshufb xmm2, xmmO;获取16字节的low乘法结果放在x_2
[0101] psraw xmm4, 4;所有数据右移4位,高4位到低4位
[0102]pand xmm4, xmml ;获取16字节hi部分放在xmm4
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1