一种数据存储方法和装置、一种数据恢复方法和装置转让专利

申请号 : CN201610500318.5

文献号 : CN106201764B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张帅陈晓辉尹殷李凯

申请人 : 北京三快在线科技有限公司

摘要 :

本申请实施例提供了一种数据存储方法和装置、一种数据恢复方法和装置,其中的数据恢复方法具体包括:针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对所述待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中包括零元素;依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复。本申请实施例能够减少数据恢复过程中读取的数据量,进而能够大大降低数据恢复过程中的IO消耗。

权利要求 :

1.一种数据存储方法,其特征在于,包括:

依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中包括零元素;

利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据包括:与所述局部数据相关的局部校验数据;

存储所述局部校验数据及其对应的局部数据;

其中,所述依据待存储数据的局部数据,对整体生成矩阵的行进行拆分时,对所述待存储数据进行数据块划分;对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据;其中,当划分得到的数据块为多个分组时,若一个分组对应的列元素非零,则其它分组对应的列元素为零,且同一拆分行中各分组对应的列元素不同时为零或同时为非零。

2.根据权利要求1所述的方法,其特征在于,所述待存储数据的局部数据包括:依据所述待存储数据对应分组的局部数据,所述局部校验数据包括:单分组的局部数据对应的第一局部校验数据;和/或

分组组合的局部数据对应的第二局部校验数据。

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

存储单分组信息与第一局部校验数据的存储地址之间的映射关系;和/或存储分组组合信息与第二局部校验数据的存储地址之间的映射关系。

4.一种数据恢复方法,其特征在于,包括:

针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中包括零元素;

依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复;

其中,所述依据待存储数据的局部数据,对整体生成矩阵的行进行拆分时,对所述待存储数据进行数据块划分;对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据;其中,当划分得到的数据块为多个分组时,若一个分组对应的列元素非零,则其它分组对应的列元素为零,且同一拆分行中各分组对应的列元素不同时为零或同时为非零。

5.根据权利要求4所述的方法,其特征在于,所述依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复的步骤,包括:构造局部解码矩阵;所述局部解码矩阵包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵为方阵;

依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。

6.根据权利要求4或5所述的方法,其特征在于,所述针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤,包括:从所述待恢复数据中获取属于单目标分组的第一待恢复数据;

在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据为依据单分组的局部数据得到。

7.根据权利要求6所述的方法,其特征在于,所述从预先存储的数据中读取所述单目标分组对应的第一局部校验数据的步骤,包括:依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;

依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。

8.根据权利要求4或5所述的方法,其特征在于,所述针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤,包括:从所述待恢复数据中获取属于单目标分组的第一待恢复数据;

在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合包括:单目标分组;

在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;其中,所述第二局部校验数据为依据分组组合的局部数据得到。

9.根据权利要求8所述的方法,其特征在于,所述从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据的步骤,包括:依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;

依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。

10.一种数据存储装置,其特征在于,包括:

拆分模块,用于依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中包括零元素;

编码模块,用于利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据包括:与所述局部数据相关的局部校验数据;以及局部存储模块,用于存储所述局部校验数据及其对应的局部数据;

还包括:获取模块,用于获取所述待存储数据的局部数据:所述获取模块,包括:划分子模块,用于对所述待存储数据进行数据块划分;及分组子模块,用于对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据;其中,当划分得到的数据块为多个分组时,若一个分组对应的列元素非零,则其它分组对应的列元素为零,且同一拆分行中各分组对应的列元素不同时为零或同时为非零。

11.一种数据恢复装置,其特征在于,包括:

读取模块,用于针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中包括零元素;以及恢复模块,用于依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复;

其中,通过如下步骤获取所述预先存储数据中的局部数据:对所述预先存储数据进行数据块划分;对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据;其中,当划分得到的数据块为多个分组时,若一个分组对应的列元素非零,则其它分组对应的列元素为零,且同一拆分行中各分组对应的列元素不同时为零或同时为非零。

12.根据权利要求11所述的装置,其特征在于,所述恢复模块,包括:构造子模块,用于构造局部解码矩阵;所述局部解码矩阵包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵为方阵;

以及

解码子模块,用于依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。

13.根据权利要求11或12所述的装置,其特征在于,所述读取模块,包括:第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;

以及

第一读取子模块,用于在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据为依据单分组的局部数据得到。

14.根据权利要求13所述的装置,其特征在于,所述第一读取子模块,包括:第一地址获取单元,用于依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;

第一读取单元,用于依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。

15.根据权利要求11或12或14所述的装置,其特征在于,所述读取模块,包括:第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;

第二获取子模块,用于在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合包括:单目标分组;

第二读取子模块,用于在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;

其中,所述第二局部校验数据为依据分组组合的局部数据得到。

16.根据权利要求15所述的装置,其特征在于,所述第二读取子模块,包括:第二地址获取单元,用于依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;

以及

第二读取单元,用于依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。

说明书 :

一种数据存储方法和装置、一种数据恢复方法和装置

技术领域

[0001] 本申请涉及计算机信息技术领域,特别是涉及一种数据存储方法和装置、以及一种数据恢复方法和装置。

背景技术

[0002] 目前,随着信息技术产业的迅猛发展,出于成本、可靠性等多方面的考虑,越来越多的厂商选择在产品中部署分布式系统,使得分布式系统也因此得到了快速的发展。
[0003] 在现有的分布式系统架构中,文件一般都被分割成多个数据块进行存储;为了保证系统的健壮性及灾难恢复能力,数据块一般又会有多个副本,并分别存放于不同的物理位置。然而,上述多副本的容灾方法需要配置更多的存储设备,从而增加了存储设备的成本,以三副本为例,上述多副本的容灾方法将增加200%的存储冗余,以及增加200%的存储成本。
[0004] 相对于多副本的容灾方法,RS(里所,Reed-Solomon)方法可以依据指定的数据块生成对应的校验块,并在数据块失效时,可以依据未失效的数据块和校验块恢复出失效的数据块,因此能够以更小的数据冗余度获得更高数据可靠性。例如,在指定的数据块及其对应校验块的大小分别为100M和30M时,上述RS方法可以使用30%的冗余达到三副本的存储可靠性。
[0005] 然而,在失效的数据块的恢复过程中,上述RS方法通常需要读取全部未失效的数据块和校验块,也即,上述RS方法在数据恢复过程中无法有效利用IO(输入输出,Input Output),通常30%冗余的RS方法在数据恢复过程中需要读取100M的数据,这样将造成10倍的IO消耗。

发明内容

[0006] 本申请实施例所要解决的技术问题是提供一种数据存储方法和一种数据恢复方法,能够减少数据恢复过程中读取的数据量,进而能够大大降低数据恢复过程中的IO消耗。
[0007] 相应的,本申请实施例还提供了一种数据存储装置和一种数据恢复装置,用以保证上述方法的实现及应用。
[0008] 为了解决上述问题,本申请公开了一种数据存储方法,包括:
[0009] 依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中包括零元素;
[0010] 利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据包括:与所述局部数据相关的局部校验数据;
[0011] 存储所述局部校验数据及其对应的局部数据。
[0012] 可选地,通过如下步骤获取所述待存储数据的局部数据:
[0013] 对所述待存储数据进行数据块划分;
[0014] 对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据。
[0015] 可选地,所述待存储数据的局部数据包括:依据所述待存储数据对应分组的局部数据,所述局部校验数据包括:
[0016] 单分组的局部数据对应的第一局部校验数据;和/或
[0017] 分组组合的局部数据对应的第二局部校验数据。
[0018] 可选地,所述方法还包括:
[0019] 存储单分组信息与第一局部校验数据的存储地址之间的映射关系;和/或[0020] 存储分组组合信息与第二局部校验数据的存储地址之间的映射关系。
[0021] 另一方面,本申请公开了一种数据恢复方法,包括:
[0022] 针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对所述待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中包括零元素;
[0023] 依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复。
[0024] 可选地,所述依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复的步骤,包括:
[0025] 构造局部解码矩阵;所述局部解码矩阵包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵为方阵;
[0026] 依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。
[0027] 可选地,所述针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤,包括:
[0028] 从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0029] 在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据为依据单分组的局部数据得到。
[0030] 可选地,所述从预先存储的数据中读取所述单目标分组对应的第一局部校验数据的步骤,包括:
[0031] 依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;
[0032] 依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。
[0033] 可选地,所述针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤,包括:
[0034] 从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0035] 在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合包括:单目标分组;
[0036] 在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;其中,所述第二局部校验数据为依据分组组合的局部数据得到。
[0037] 可选地,所述从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据的步骤,包括:
[0038] 依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;
[0039] 依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。
[0040] 再一方面,本申请公开了一种数据存储装置,包括:
[0041] 拆分模块,用于依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中包括零元素;
[0042] 编码模块,用于利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据包括:与所述局部数据相关的局部校验数据;以及
[0043] 局部存储模块,用于存储所述局部校验数据及其对应的局部数据。
[0044] 可选地,所述装置还包括:
[0045] 获取模块,用于获取所述待存储数据的局部数据:
[0046] 所述获取模块,包括:
[0047] 划分子模块,用于对所述待存储数据进行数据块划分;及
[0048] 分组子模块,用于对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据。
[0049] 又一方面,本申请公开了一种数据恢复装置,包括:
[0050] 读取模块,用于针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对所述待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中包括零元素;以及
[0051] 恢复模块,用于依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复。
[0052] 可选地,所述恢复模块,包括:
[0053] 构造子模块,用于构造局部解码矩阵;所述局部解码矩阵包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵为方阵;以及
[0054] 解码子模块,用于依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。
[0055] 可选地,所述读取模块,包括:
[0056] 第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;以及
[0057] 第一读取子模块,用于在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据为依据单分组的局部数据得到。
[0058] 可选地,所述第一读取子模块,包括:
[0059] 第一地址获取单元,用于依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;
[0060] 第一读取单元,用于依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。
[0061] 可选地,所述读取模块,包括:
[0062] 第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0063] 第二获取子模块,用于在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合包括:单目标分组;
[0064] 第二读取子模块,用于在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;其中,所述第二局部校验数据为依据分组组合的局部数据得到。
[0065] 可选地,所述第二读取子模块,包括:
[0066] 第二地址获取单元,用于依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;以及
[0067] 第二读取单元,用于依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。
[0068] 与现有技术相比,本申请实施例包括以下优点:
[0069] 本申请实施例的局部校验数据是依据待存储数据的局部数据所对应的局部生成矩阵编码得到的,由于上述局部生成矩阵的拆分行中可以包括零元素,因此可以保证上述局部校验数据与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关,因此,可以在不依赖其他数据的情况下,依据上述局部校验数据实现相应局部数据的恢复,也即,本申请实施例在数据恢复过程中可以仅仅读取待恢复数据对应的局部校验数据和局部数据,因此,相对于现有方案在失效的数据块的恢复过程中、通常读取全部未失效的数据块和校验块的手段,由于本申请实施例减少数据恢复过程中读取的数据量,故能够大大降低数据恢复过程中的IO消耗。

附图说明

[0070] 图1是本申请的一种数据存储方法实施例的步骤流程图;
[0071] 图2是本申请的一种数据恢复方法实施例的步骤流程图;
[0072] 图3是本申请的一种数据存储和恢复方法实施例的步骤流程图;
[0073] 图4是本申请的一种数据存储装置实施例的结构框图;以及
[0074] 图5是本申请的一种数据恢复装置实施例的结构框图。

具体实施方式

[0075] 为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
[0076] 存储方法实施例
[0077] 参照图1,示出了本申请的一种数据存储方法实施例的步骤流程图,具体可以包括如下步骤:
[0078] 步骤101、依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中可以包括零元素;
[0079] 步骤102、利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据具体可以包括:与所述局部数据相关的局部校验数据;
[0080] 步骤103、存储所述局部校验数据及其对应的局部数据。
[0081] 本申请实施例可以应用于多媒体领域、电子商务领域、搜索领域等任意领域的数据的存储,也即,上述待存储数据可以为任意领域的数据,另外,本领域技术人员可以根据实际应用需求,确定上述待存储数据的数据长度,本申请实施例对于具体的待存储数据及其数据长度不加以限制。
[0082] 本申请实施例中,局部数据可用于待存储数据的整体数据中的一部分。且由于本申请实施例的局部校验数据是依据待存储数据的局部数据所对应的局部生成矩阵编码得到的,由于上述局部生成矩阵的拆分行中可以包括零元素,因此可以保证上述局部校验数据与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关,因此,可以在不依赖其他数据的情况下,依据上述局部校验数据实现相应局部数据的恢复,也即,本申请实施例在数据恢复过程中可以仅仅读取待恢复数据对应的局部校验数据和局部数据,因此,相对于现有方案在失效的数据块的恢复过程中、通常读取全部未失效的数据块和校验块的手段,由于本申请实施例减少数据恢复过程中读取的数据量,故能够大大降低数据恢复过程中的IO消耗。
[0083] 在本申请的一种可选实施例中,可以通过如下步骤获取所述待存储数据的局部数据:对所述待存储数据进行数据块划分;对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据。也即,本申请实施例的局部数据可以包括:分组对应的至少一个数据块,进一步,本申请实施例的局部校验数据也可以包括:分组对应的至少一个校验块。例如,在待存储的数据块的数据长度为100M时,本申请实施例可以对上述100M的数据块进行分组,假设分组得到的第一组和第二组的数据长度均为50M,则本申请实施例可以针对上述第一组生成对应的第一校验块,以及,针对上述第二组生成对应的第二校验块,这样,在第一组的数据块失效时,本申请实施例可以读取第一组未失效的数据块和第一校验块进行相应的恢复,也即,本申请实施例可以读取50M的数据以实现数据恢复,因此,相对于现有方案读取100M的数据,可以降低50%的IO消耗。同理,在第二组的数据块失效时,本申请实施例可以读取第二组未失效的数据块和第二校验块进行相应的恢复,故可以降低50%的IO消耗。
[0084] 在本申请的一种可选实施例中,可以对待存储数据的局部数据进行编码,以得到对应的局部校验向量,该局部校验向量对应数据可以为局部数据对应的局部校验数据;由此能够保证得到的局部校验向量与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关;因此,可以在不依赖其他数据的情况下,依据上述局部校验向量实现相应局部数据的恢复。
[0085] 在本申请的一种应用示例中,可以首先以字节为单位对待存储数据进行拆分,以得到若干个数据块及该若干个数据块组成的数据向量;然后,可以对上述数据向量拆分为若干个子数据向量,上述子数据向量可以作为待存储数据的局部数据;最后,可以将上述子数据向量进行编码,以得到对应的局部校验向量。其中,上述数据块的数据长度可以是1,2,4,8等字节,本申请实施例对于上述数据块的具体数据长度不加以限制。
[0086] 在实际应用中,假设上述待存储数据的整体数据(也即数据向量)包括k个数据块,上述局部数据(也即子数据向量)包括k1个数据块,则可以对k1个数据块进行编码生成m1个校验块。
[0087] 在此提供通过(n,k)RS方法对k1个数据块进行编码的示例。n是待编码的数据块和校验块的总个数,k=k1是待编码的数据块个数,m1=n-k1是校验块个数,假设k1个数据块分别表示为:D0、D1、...、Dk1-1,每个数据块的大小为M/k1,则可以计算整体生成矩阵和k1个数据块的乘积,得到m1个校验块:C0、C1、…、Cm-1,每个校验块的大小也是M/k1。其中,上述整体生成矩阵可以是一个基于迦罗瓦域的m1行k1列的矩阵,该矩阵可以是变换后的范德蒙矩阵(Vandermonde matrix),也可以是柯西矩阵(Cauchy matrix)。应用上述(n,k1)RS方法,当一个数据块或校验块失效时,需要恢复数据块或校验块以保证可靠性。具体地,如果失效的是校验块,可以利用k1块数据块重新编码得到该失效的校验块;如果失效的是1个数据块,利用剩余n-1块数据块和校验块中的任意k块可恢复该数据块。其中,上述迦罗瓦域可以为基于(0,1)环的多项式域在x^8+x^4+x^3+x^2+1上的扩张,迦罗瓦域中包含0~255共256个元素,对应对应1个字节的所有取值.
[0088] 可以理解,上述对待存储数据的局部数据进行编码的过程只是作为示例,实际上,本领域技术人员可以根据实际应用需求,采用所需的编码过程,本申请实施例对于对待存储数据的局部数据进行编码的具体过程不加以限制。
[0089] 同样以上面描述的(n,k)RS方法为例,上述步骤101和步骤102可以计算整体生成矩阵和k个数据块的乘积,得到m个校验块:C0、C1、…、Cm-1,也即,上述m个校验块可以与整体校验向量中的元素相应。这样,在上述整体校验向量包括:与所述局部数据相关的元素的情况下,上述元素可以与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关;因此,可以在不依赖其他数据的情况下,依据上述局部校验向量实现相应局部数据的恢复。
[0090] 在本申请一种应用示例中,假设通过迦罗瓦域得到的整体生成矩阵为P,P为m行k列的矩阵:
[0091]
[0092] 则步骤101可以将所述整体生成矩阵P的第1行拆分成R行,以得到局部生成矩阵Q,其中,Q可以为m+R-1行k列的矩阵。
[0093] 假设m=5,k=4,R=2,则上述局部生成矩阵Q可以表示为:
[0094]
[0095] 可以看出,局部生成矩阵Q1的拆分行第一行和第二行中均包括零元素。
[0096] 在本申请的一种可选实施例中,步骤102可以将上述局部生成矩阵Q1与k个数据块组成的数据向量相乘,可以得到整体校验向量C1:
[0097]
[0098] 可以看出,上述整体校验向量C1中C0与局部数据D0和D1相关,上述整体校验向量C中C1与局部数据D2和D3相关,故可以依据局部数据和整体校验向量中部分元素实现数据恢复。例如,可以依据D0、D1和C0中的二者恢复出第三者,例如,在D0失效时,可以依据D1和C0恢复得到D0。
[0099] 在本申请的其他实施例中,还可以将整体生成矩阵P的第一行拆分为大于2的行,例如,可以将整体生成矩阵P的第一行拆分为3行,以得到局部生成矩阵Q2:
[0100]
[0101] 则将上述局部生成矩阵Q2与k个数据块组成的数据向量相乘,可以得到整体校验向量C2:
[0102]
[0103] 可以看出,上述整体校验向量C2中C0与局部数据D0相关,C1与局部数据D1相关,上述整体校验向量C2中C1与局部数据D2和D3相关,故可以依据局部数据和整体校验向量中部分元素实现数据恢复。例如,可以直接依据C0恢复出局部数据D0,直接依据C1恢复出局部数据D1,直接依据C1、、D2和D3中的二者恢复出第三者。
[0104] 在本申请的其他实施例中,还可以对整体生成矩阵P的其他行进行拆分。在此提供同时将所述整体生成矩阵P的第1行和第2行拆分成2行,以得到局部生成矩阵Q3的示例:
[0105]
[0106] 则将上述局部生成矩阵Q3与k个数据块组成的数据向量相乘,可以得到整体校验向量C3:
[0107]
[0108] 可以看出,上述整体校验向量C3中C0与局部数据D0和D1相关,上述整体校验向量C3中C2与局部数据D0和D1相关,上述整体校验向量C3中C1与局部数据D2和D3相关,上述整体校验向量C3中C3与局部数据D2和D3相关,故可以依据局部数据和整体校验向量中部分元素实现数据恢复。例如,可以依据D0、D1、C0和C2中的二者恢复出其余二者,例如,在D0和D1失效时,可以依据C0和C2恢复得到D0和D1。
[0109] 可以理解,上述对整体生成矩阵的行进行拆分的过程只是作为可选实施例,实际上,本领域技术人员可以根据实际应用需求,灵活地对整体生成矩阵的行进行拆分。例如,可以对D0、D1、D2和D3等4个数据块划分为两个分组,其中,第一分组包括D0、D1,第二分组包括D2和D3,则上述步骤A1可以将第一分组对应的列元素(如整体生成矩阵中第一列和第二列的元素)非零、同时将第二分组(如整体生成矩阵中第三列和第四列的元素)对应的列元素为零,以及,将第一分组对应的列元素(如整体生成矩阵中第一列和第二列的元素)为零、同时将第二分组(如整体生成矩阵中第三列和第四列的元素)对应的列元素非零,由此可以减轻第一分组和第二分组之间校验块的相关性,进而可以利用上述局部生成矩阵Q3分别实现第一分组和第二分组的局部恢复。同理,在上述待存储数据的分组数目G大于2时,也可以按照2个分组的拆分原理,减轻各分组之间校验块的相关性。可以理解,本申请实施例对于对整体生成矩阵的行进行拆分的具体过程不加以限制
[0110] 需要说明的是,上述公式(1)-公式(7)中m=5,k=4只是作为本申请的应用示例,实际上,本领域技术人员可以根据实际应用需求,采用其他m值和k值,例如,k=10,m=4等,可以理解,本申请实施例对于数据块和校验块的具体数量不加以限制。
[0111] 综上,在上述步骤102对应整体校验向量包括:与所述局部数据相关的元素的情况下,上述元素可以与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关;因此,可以在不依赖其他数据的情况下,依据上述局部校验向量实现相应局部数据的恢复。
[0112] 在本申请的再一种可选实施例中,所述待存储数据的局部数据具体可以包括:依据所述待存储数据对应分组的局部数据,则上述局部校验数据具体可以包括:
[0113] 单分组的局部数据对应的第一局部校验数据;和/或
[0114] 分组组合的局部数据对应的第二局部校验数据。
[0115] 相应的编码过程具体可以包括:
[0116] 步骤A1、针对单分组的局部数据,编码得到对应的第一局部校验数据;和/或[0117] 步骤A2、针对分组组合的局部数据,编码得到对应的第二局部校验数据。
[0118] 在实际应用中,可以根据实际应用需求,对上述待存储数据进行分组,例如,分组的数量可以为G,则步骤A1可以对G个分组中单分组的局部数据,编码得到对应的第一局部校验数据,也即,第一局部校验数据可以与单个的分组相应。步骤A2可以对G个分组中分组组合的局部数据,编码得到对应的第二局部校验数据,也即,第二局部校验数据可以与分组组合相应,其中,分组组合所覆盖的分组数量可以小于G。
[0119] 在步骤102编码得到局部校验数据后,步骤103可以存储所述局部校验数据及其对应的局部数据。在本申请的一种可选实施例中,假设上述局部数据包括k1个数据块,上述局部校验数据具体包括m1个校验块,则可以将这些数据分散存储在(k1+m1)个不同的存储节点;这里的存储节点是存储设备的逻辑抽象,既可以是一个磁盘也可以是一个存储服务器。也即,本申请实施例可以数据块或者校验块为单位进行所述局部校验数据及其对应的局部数据的分散存储,以分散数据丢失的风险,当然,本申请实施例对于局部校验数据及其对应的局部数据的具体存储方式不加以限制。
[0120] 在本申请的一种可选实施例中,为了方便不同局部校验数据的寻址,本申请实施例的方法还可以包括:
[0121] 存储单分组信息与第一局部校验数据的存储地址之间的映射关系;和/或[0122] 存储分组组合信息与第二局部校验数据的存储地址之间的映射关系。
[0123] 其中,上述单分组信息可用于标识单个分组,其具体可以包括:单个分组的ID(标识,Identity)、名称等信息。同理上述分组组合信息可用于表示组合的多个分组。在实际应用中,上述存储地址具体可以包括:存储节点对应的存储路径,通过该存储路径可以直接访问(包括读取)对应的局部校验数据。
[0124] 在本申请的一种可选实施例中,所述方法还可以包括:针对待存储数据的整体数据,生成对应的整体校验数据;存储所述整体校验数据。本可选实施例可以在存储局部校验数据的基础上,进行整体校验数据的存储,以在局部数据和局部校验数据不足以恢复待恢复数据的情况下,依据整体校验数据实现待恢复数据的恢复。
[0125] 综上,本申请实施例的局部校验数据是依据待存储数据的局部数据所对应的局部生成矩阵编码得到的,由于上述局部生成矩阵的拆分行中可以包括零元素,因此可以保证上述局部校验数据与上述局部数据相关,而可以与待存储数据中除上述局部数据外的其他数据不相关,因此,可以在不依赖其他数据的情况下,依据上述局部校验数据实现相应局部数据的恢复,也即,本申请实施例在数据恢复过程中可以仅仅读取待恢复数据对应的局部校验数据和局部数据,因此能够减少数据恢复过程中读取的数据量,进而能够大大降低数据恢复过程中的IO消耗。
[0126] 恢复方法实施例
[0127] 参照图2,示出了本申请的一种数据恢复方法实施例的步骤流程图,具体可以包括如下步骤:
[0128] 步骤201、针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对所述待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中可以包括零元素;
[0129] 步骤202、依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复。
[0130] 本申请实施例中,待恢复数据可用于表示存在恢复需求的数据,其通常与失效的数据块或者校验块相应。在实际应用中,可以通过数据块或校验块的标识来表示上述待恢复数据,例如,待恢复数据可以包括:编号为X的待恢复数据块Dx,和/或,编号为Y的待恢复校验块CY。其中,上述待恢复数据块或者待恢复校验块的数目可以大于等于1,可以理解,本申请实施例对于具体的待恢复数据不加以限制。
[0131] 在本申请的一种可选实施例中,上述局部数据也可以与整体数据的数据块分组相应,也即,本申请实施例的局部数据可以包括:分组对应的至少一个数据块,进一步,本申请实施例的局部校验数据也可以包括:分组对应的至少一个校验块。本申请实施例可以提供针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据的如下读取方案:
[0132] 读取方案1、
[0133] 读取方案1中,针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤201,具体可以包括:
[0134] 步骤C1、从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0135] 步骤C2、在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据可以为依据单分组的局部数据得到。
[0136] 读取方案1中,对于单目标分组的局部数据及其对应第一局部校验数据而言,其允许所述第一待恢复数据的最大数据长度为第一局部校验数据的数据长度。例如,单分组的局部数据包括k1个数据块,单分组的第一局部校验数据具体包括m1个校验块,则在数据块与校验块的数据长度一致的情况下,单分组对应的(k1+m1)个数据块和校验块最多允许m1个块(包括数据块和校验块)的失效和恢复。
[0137] 在实际应用中,可以预先存储数据块信息或校验块信息与单分组信息之间的映射关系,则步骤C1可以依据待恢复数据中待恢复数据块或者待恢复校验块的信息(如标识),在上述映射关系进行查找,以得到待恢复数据块或者待恢复校验块所属的单目标分组,并可以从待恢复数据中提取出属于单目标分组的第一待恢复数据。可以理解,本申请实施例对于步骤C1从所述待恢复数据中获取属于单目标分组的第一待恢复数据的具体过程不加以限制。
[0138] 在本申请的一种可选实施例中,可以对第一待恢复数据的数据长度与所述单目标分组对应第一局部校验数据的数据长度进行比较,在得到的比较结果为小于等于时,可以认为单目标分组的局部数据和第一局部校验数据足以实现第一待恢复数据的恢复,因此可以从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据。
[0139] 在本申请的另一种可选实施例中,所述从预先存储的数据中读取所述单目标分组对应的第一局部校验数据的步骤,具体可以包括:
[0140] 步骤C21、依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;
[0141] 步骤C22、依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。
[0142] 同理,也可以预先存储单分组信息与局部数据的存储地址之间的映射关系,并依据该映射关系读取上述单目标分组对应的局部数据,可以理解,本申请实施例对于单目标分组对应的局部数据和第一局部校验数据的具体读取过程不加以限制。
[0143] 读取方案2、
[0144] 读取方案2中,所述针对待恢复数据,从预先存储的数据中读取对应的局部校验数据的步骤201,具体可以包括:
[0145] 步骤D1、从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0146] 步骤D2、在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合具体可以包括:单目标分组;
[0147] 步骤D3、在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;其中,所述第二局部校验数据可以为依据分组组合的局部数据得到。
[0148] 读取方案2中,在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,例如,第一待恢复数据包括3个数据块,而第一局部校验数据包括2个校验块时,可以认为单目标分组的局部数据和局部校验数据不足以实现第一待恢复数据的恢复,此种情况下,可以利用目标分组组合对应第二局部校验数据和局部数据进行第二待恢复数据的恢复。
[0149] 相对于第一待恢复数据与单目标分组相应,第二待恢复数据可以目标分组组合相应,具体地,第二待恢复数据具体可以包括:第一待恢复数据,目标分组组合具体可以包括:单目标分组,也即,单目标分组为目标分组组合的子集。在本申请的一种应用示例中,G个单分组分别表示为G0、G1、…、GG-1,则分组组合具体可以包括上述G个单分组中的至少2个。假设第一待恢复数据包括:G0中的3个数据块,而G0的校验块的数目为2,则可以获取包括G0的目标分组组合,如{G0,G1}、{G0,G2}、{G0,G1、G2}等,需要说明的是,这些目标分组组合中除G0之外的单分组中可能存在失效的块,也可能不存在失效的块,故上述第二待恢复数据可能多于第一待恢复数据,也可能与第一待恢复数据一致。
[0150] 对于目标分组组合的局部数据及其对应第二局部校验数据而言,其允许所述第二待恢复数据的最大数据长度为第二局部校验数据的数据长度。例如,目标分组组合的局部数据包括(k1+k2)个数据块,目标分组组合的局部校验数据具体包括(m1+m2)个校验块,则在数据块与校验块的数据长度一致的情况下,目标分组组合对应的(k1+k2+m1+m2)个数据块和校验块最多允许(m1+m2)个块(包括数据块和校验块)的失效和恢复。
[0151] 在实际应用中,可以预先存储数据块信息或校验块信息与分组组合信息之间的映射关系,则步骤D2可以依据第一待恢复数据的信息(如标识),在上述映射关系进行查找,以得到第一待恢复数据所属的目标分组组合,并可以从待恢复数据中提取出属于目标分组组合的第二待恢复数据。可以理解,本申请实施例对于步骤D2从所述待恢复数据中获取属于目标分组组合的第二待恢复数据的具体过程不加以限制,例如,还可以依据单目标分组的信息,在单分组信息与分组组合信息之间的映射关系中间查找,以得到单目标分组对应的目标分组组合。
[0152] 在本申请的一种可选实施例中,可以对第二待恢复数据的数据长度与所述目标分组组合对应第二局部校验数据的数据长度进行比较,在得到的比较结果为小于等于时,可以认为目标分组组合的局部数据和第二局部校验数据足以实现第二待恢复数据的恢复,因此可以从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据。
[0153] 在本申请的另一种可选实施例中,所述从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据的步骤,具体可以包括:
[0154] 步骤D31、依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;
[0155] 步骤D32、依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。
[0156] 同理,也可以预先目标分组组合信息与局部数据的存储地址之间的映射关系,并依据该映射关系读取上述目标分组组合对应的局部数据,可以理解,本申请实施例对于目标分组组合对应的局部数据和第二局部校验数据的具体读取过程不加以限制。
[0157] 以上通过读取方案1和读取方案2对于针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据的过程进行了详细的介绍,可以理解,本领域技术人员可以根据实际应用需求,采用上述读取方案1和读取方案2中的任一或者组合,或者,还可以采用其他读取方案,本申请实施例对于针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据的具体过程不加以限制。
[0158] 在实际应用中,所述待恢复数据具体可以包括:待恢复数据块和/或待恢复校验块,其中,在所述待恢复数据中仅仅包括待恢复校验块时,可以重新对局部数据进行编码,以得到对应的待恢复校验块。本申请实施例主要对待恢复数据块的恢复过程进行说明。
[0159] 在本申请的一种可选实施例中,假设所读取的局部校验数据是对局部数据进行独立编码得到的,则对应的恢复过程具体可以包括:构造整体解码矩阵;所述整体解码矩阵具体可以包括:整体生成矩阵的行和单位矩阵的行,其中,该单位矩阵的行不包括所述待恢复数据对应行,整体生成矩阵的行与待恢复数据对应行的数量一致,所述整体解码矩阵为方阵;并依据所述整体解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。
[0160] 假设局部数据的原始数据包括k1个数据块,局部校验数据的原始数据包括m1个校验块,则对应的单位矩阵I1可以为k1×k1的方阵,假设有1个数据块失效,则可以从单位矩阵I1中去除失效的数据块对应的行,其中,去除的行可以与失效的数据块相应,如果失效的数据块原本位于单位矩阵的第i(0≤i≤k1-1)行,也可以从单位矩阵中去除第i行。需要说明的是,可以采用整体生成矩阵中的行补偿去除的第i行,以使上述整体解码矩阵为方阵。
[0161] 在本申请的一种应用示例中,假设k1=4,整体生成矩阵为公式(1)中的矩阵P,失效的数据块为第1个数据块D0,则可以从4×4的单位矩阵中去除第1行,并补上整体生成矩阵中未失效校验块对应的行,假设未失效校验块对应的行包括多个,则可以从中选取任一(例如第1行),在此提供一种上述示例对应的整体解码矩阵:
[0162]
[0163] 在本申请的一种可选实施例中,可以通过公式(9)利用整体解码矩阵S、局部数据块D1、D2和D3、以及局部校验块C0对失效的数据块D0进行解码:
[0164]
[0165] 由于公式(9)中矩阵S为可逆矩阵,故可以将公式(9)的两边乘以矩阵S的逆矩阵S’-1,以得到恢复后的原始数据:
[0166]
[0167] 在本申请的另一种可选实施例中,假设所读取的局部校验数据是对整体数据进行编码得到的,则所述依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复的步骤202,具体可以包括:
[0168] 步骤E1、构造局部解码矩阵;所述局部解码矩阵具体可以包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵可以为方阵;
[0169] 步骤E2、依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。
[0170] 在本申请的一种应用示例中,假设对D0、D1、D2和D3等4个数据块划分为两个分组,其中,第一分组包括D0、D1,第二分组包括D2和D3,且利用公式(6)的局部生成矩阵Q3对整体数据D0、D1、D2和D3进行了编码,则在D0失效时,可以利用未失效的数据块D1和校验块C0进行D0的恢复,相应的局部解码矩阵T可以表示为:
[0171]
[0172] 在本申请的一种可选实施例中,可以通过公式(11)利用局部解码矩阵T、局部数据块D1、以及局部校验块C0对失效的数据块D0进行解码:
[0173]
[0174] 由于公式(12)中矩阵T为可逆矩阵,故可以将公式(12)的两边乘以矩阵T的逆矩阵T’-1,以得到恢复后的原始数据:
[0175]
[0176] 在本申请的另一种应用示例中,在D0和D1同时失效时,可以利用未失效的校验块C0和C2进行D0和D1的恢复,相应的局部解码矩阵T可以表示为:
[0177]
[0178] 可以理解,本领域技术人员可以根据实际应用需求,灵活利用步骤E1和步骤E2进行待恢复数据的恢复,本申请实施例对于具体的恢复过程不加以限制。
[0179] 在本申请的一种可选实施例中,所述方法还可以包括:在所述第二待恢复数据的数据长度超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取对应的整体校验数据和整体数据;依据所读取的整体校验数据和整体数据,对所述待恢复数据进行恢复。本可选实施例在局部数据和第二局部校验数据不足以恢复待恢复数据的情况下,可以依据整体校验数据实现待恢复数据的恢复,因此可以保证数据存储的可靠性。
[0180] 为使本领域技术人员更好地理解本申请实施例,参照图3,示出了本申请的一种数据存储和恢复方法实施例的步骤流程图,具体可以包括如下步骤:
[0181] 步骤301、依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中可以包括零元素;
[0182] 步骤302、利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;其中,所述整体校验数据具体可以包括:与所述局部数据相关的局部校验数据;
[0183] 步骤303、存储所述与所述局部数据相关的元素及其对应的局部数据;
[0184] 步骤304、针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;
[0185] 步骤305、判断所述待恢复数据的数据长度是否超过对应局部校验数据的数据长度,若否,则执行步骤306,若是,则执行步骤308;
[0186] 步骤306、构造局部解码矩阵;所述局部解码矩阵具体可以包括:不包括所述待恢复数据对应行的单位矩阵和局部生成矩阵中的至少一种,所述局部解码矩阵为方阵;
[0187] 步骤307、依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据;
[0188] 步骤308、从预先存储的数据中读取对应的整体校验数据和整体数据;并依据所读取的整体校验数据和整体数据,对所述待恢复数据进行恢复。
[0189] 需要说明的是,步骤304可以采用上述读取方案1和读取方案2中的任一或者组合实现局部校验数据和局部数据的读取,步骤305可以采用步骤E1-步骤E2实现数据恢复,步骤308的恢复过程可以参照按照上述生成方案1对局部数据进行独立编码得到的局部校验数据的恢复过程,在此不作赘述。
[0190] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
[0191] 存储装置实施例
[0192] 参照图4,示出了本申请的一种数据存储装置实施例的结构框图,置具体可以包括如下模块:
[0193] 拆分模块401,用于依据待存储数据的局部数据,对整体生成矩阵的行进行拆分,以得到对应的局部生成矩阵;所述局部生成矩阵的拆分行中可以包括零元素;
[0194] 编码模块402,用于利用所述局部生成矩阵,对所述待存储数据的整体数据进行编码,以得到对应的整体校验数据;所述整体校验数据具体可以包括:与所述局部数据相关的局部校验数据;以及
[0195] 局部存储模块403,用于存储所述局部校验数据及其对应的局部数据。
[0196] 在本申请的一种可选实施例中,所述装置还可以包括:
[0197] 获取模块,用于获取所述待存储数据的局部数据:
[0198] 所述获取模块,具体可以包括:
[0199] 划分子模块,用于对所述待存储数据进行数据块划分;及
[0200] 分组子模块,用于对划分得到的数据块进行分组,并依据所述分组得到对应的局部数据。
[0201] 在本申请的另一种可选实施例中,所述待存储数据的局部数据具体可以包括:依据所述待存储数据对应分组的局部数据,所述局部校验数据具体可以包括:
[0202] 单分组的局部数据对应的第一局部校验数据;和/或
[0203] 分组组合的局部数据对应的第二局部校验数据。
[0204] 在本申请的再一种可选实施例中,所述装置还可以包括:
[0205] 第一关系存储模块,用于存储单分组信息与第一局部校验数据的存储地址之间的映射关系;和/或
[0206] 第二关系存储模块,用于存储分组组合信息与第二局部校验数据的存储地址之间的映射关系。
[0207] 在本申请的再一种可选实施例中,所述装置还可以包括:
[0208] 整体校验生成模块,用于针对待存储数据的整体数据,生成对应的整体校验数据;
[0209] 整体存储模块,用于存储所述整体校验数据。
[0210] 对于存储装置实施例而言,由于其与存储方法实施例基本相似,所以描述的比较简单,相关之处参见存储方法实施例的部分说明即可。
[0211] 恢复装置实施例
[0212] 参照图5,示出了本申请的一种数据恢复装置实施例的结构框图,置具体可以包括如下模块:
[0213] 读取模块501,用于针对待恢复数据,从预先存储的数据中读取对应的局部校验数据和局部数据;其中,所述局部校验数据为依据局部生成矩阵对所述待存储数据的整体数据进行编码得到,所述局部生成矩阵为对整体生成矩阵的行进行拆分得到,所述局部生成矩阵的拆分行中可以包括零元素;以及
[0214] 恢复模块502,用于依据所读取的局部校验数据和局部数据,对所述待恢复数据进行恢复。
[0215] 在本申请的一种可选实施例汇总,所述恢复模块502,具体可以包括:
[0216] 构造子模块,用于构造局部解码矩阵;所述局部解码矩阵具体可以包括:单位矩阵的行和局部生成矩阵的行,所述单位矩阵的行不包括所述待恢复数据对应行,所述局部解码矩阵为方阵;以及
[0217] 解码子模块,用于依据所述局部解码矩阵对所述局部校验数据和局部数据进行解码,以得到所述待恢复数据对应的原始数据。
[0218] 在本申请的一种可选实施例中,所述读取模块501,具体可以包括:
[0219] 第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;以及
[0220] 第一读取子模块,用于在所述第一待恢复数据的数据长度不超过所述单目标分组对应第一局部校验数据的数据长度时,从预先存储的数据中读取所述单目标分组对应的第一局部校验数据和局部数据,作为所述第一待恢复数据对应的局部校验数据和局部数据;其中,所述第一局部校验数据可以为依据单分组的局部数据得到。
[0221] 在本申请的一种可选实施例中,所述第一读取子模块,具体可以包括:
[0222] 第一地址获取单元,用于依据预先存储的单分组信息与第一局部校验数据的存储地址之间的映射关系,获取所述单目标分组对应第一局部校验数据的第一目标存储地址;
[0223] 第一读取单元,用于依据所述第一目标存储地址,从预先存储的数据中读取对应的第一局部校验数据。
[0224] 在本申请的一种可选实施例中,所述读取模块501,具体可以包括:
[0225] 第一获取子模块,用于从所述待恢复数据中获取属于单目标分组的第一待恢复数据;
[0226] 第二获取子模块,用于在所述第一待恢复数据的数据长度超过所述单目标分组对应第一局部校验数据的数据长度时,从所述待恢复数据中获取属于目标分组组合的第二待恢复数据;所述目标分组组合包括:单目标分组;
[0227] 第二读取子模块,用于在所述第二待恢复数据的数据长度不超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取所述目标分组组合对应的第二局部校验数据和局部数据,作为所述第二待恢复数据对应的局部校验数据和局部数据;其中,所述第二局部校验数据为依据分组组合的局部数据得到。
[0228] 在本申请的一种可选实施例中,所述第二读取子模块,具体可以包括:
[0229] 第二地址获取单元,用于依据预先存储的分组组合信息与第二局部校验数据的存储地址之间的映射关系,获取所述目标分组组合对应第二局部校验数据的第二目标存储地址;
[0230] 第二读取单元,用于依据所述第二目标存储地址,从预先存储的数据中读取对应的第二局部校验数据。
[0231] 在本申请的一种可选实施例中,所述装置还可以包括:
[0232] 整体读取模块,用于在所述第二待恢复数据的数据长度超过所述目标分组组合对应第二局部校验数据的数据长度时,从预先存储的数据中读取对应的整体校验数据和整体数据;
[0233] 整体恢复模块,用于依据所读取的整体校验数据和整体数据,对所述待恢复数据进行恢复
[0234] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0235] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0236] 本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0237] 在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitory media),如调制的数据信号和载波。
[0238] 本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0239] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0240] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0241] 尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
[0242] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0243] 以上对本申请所提供的一种数据存储方法和装置、以及一种数据恢复方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。