一种数据存储方法、装置及系统转让专利

申请号 : CN201610930966.4

文献号 : CN108008909B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈伟林起芊汪渭春

申请人 : 杭州海康威视数字技术股份有限公司

摘要 :

本申请实施例提供了一种数据存储方法、装置及系统,涉及计算机技术领域。其中,数据存储方法应用于数据存储系统中的主存储服务器,该数据存储系统包括管理服务器和存储服务器。该方法包括:接收待存储至第一条带的第一数据块;向管理服务器请求针对第一数据块的第一存储地址,将第一数据块存储至第一存储地址;在确定第一数据块存储成功时,判断第一数据块是否为第一条带中的最后一个数据块;如果是,则根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块;向管理服务器请求针对第一校验块的第二存储地址,将第一校验块存储至第二存储地址。应用本申请实施例,能够尽可能避免出现数据块和校验块不一致的问题。

权利要求 :

1.一种数据存储方法,其特征在于,应用于数据存储系统中的主存储服务器,其中,所述数据存储系统包括:管理服务器和存储服务器;所述存储服务器包括:主存储服务器和非主存储服务器;所述主存储服务器为所述存储服务器中的任意一个;所述方法包括:接收待存储至第一条带的第一数据块;

向所述管理服务器发送针对所述第一数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第一存储地址,将所述第一数据块存储至所述第一存储地址;

在确定所述第一数据块存储成功时,判断所述第一数据块是否为所述第一条带中的最后一个数据块;

如果是,则根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块;

向所述管理服务器发送针对所述第一校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第二存储地址,将所述第一校验块存储至所述第二存储地址。

2.根据权利要求1所述的方法,其特征在于,在将所述第一数据块存储至所述第一存储地址之后,所述方法还包括:当所述第一数据块未存储成功时,删除所述第一数据块的已存储数据,并返回执行所述根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块的步骤。

3.根据权利要求2所述的方法,其特征在于,在将所述第一校验块存储至所述第二存储地址之后,所述方法还包括:判断所述第一校验块是否存储成功;

如果否,则返回执行所述根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块的步骤。

4.根据权利要求2所述的方法,其特征在于,当判断出所述第一数据块不是所述第一条带中的最后一个数据块时,所述方法还包括:检测预设时间段内是否接收到待存储至所述第一条带的第二数据块;

如果未接收到,则根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第二校验块;

向所述管理服务器发送针对所述第二校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第三存储地址,将所述第二校验块存储至所述第三存储地址。

5.根据权利要求4所述的方法,其特征在于,所述第一条带中用于存储数据块的存储单元未存满时,在将所述第二校验块存储至所述第三存储地址之后,所述方法还包括:接收所述第二数据块;

向所述管理服务器发送针对所述第二数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第四存储地址,将所述第二数据块存储至所述第四存储地址;

在确定所述第二数据块存储成功时,判断所述第二数据块是否为所述第一条带中的最后一个数据块;

如果是,则根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第三校验块;

将所述第二校验块更新为所述第三校验块。

6.根据权利要求5所述的方法,其特征在于,在将所述第二数据块存储至所述第四存储地址之后,所述方法还包括:当所述第二数据块为存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据。

7.根据权利要求5所述的方法,其特征在于,在将所述第二数据块存储至所述第四存储地址之后,所述方法还包括:当所述第二数据块不是存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据,并返回执行所述根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第三校验块的步骤。

8.根据权利要求1~7任一项所述的方法,其特征在于,所述第一数据块中的数据来自一个文件。

9.一种数据存储装置,其特征在于,应用于数据存储系统中的主存储服务器,其中,所述数据存储系统包括:管理服务器和存储服务器;所述存储服务器包括:主存储服务器和非主存储服务器;所述主存储服务器为所述存储服务器中的任意一个;所述装置包括:第一接收模块,用于接收待存储至第一条带的第一数据块;

第一存储模块,用于向所述管理服务器发送针对所述第一数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第一存储地址,将所述第一数据块存储至所述第一存储地址;

第一判断模块,用于在确定所述第一数据块存储成功时,判断所述第一数据块是否为所述第一条带中的最后一个数据块;

第一计算模块,用于当所述第一判断模块的判断结果为是时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块;

第二存储模块,用于向所述管理服务器发送针对所述第一校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第二存储地址,将所述第一校验块存储至所述第二存储地址。

10.根据权利要求9所述的装置,其特征在于,在将所述第一数据块存储至所述第一存储地址之后,所述装置还包括:第一删除模块,用于当所述第一数据块未存储成功时,删除所述第一数据块的已存储数据,并返回执行所述第一计算模块。

11.根据权利要求10所述的装置,其特征在于,在将所述第一校验块存储至所述第二存储地址之后,所述装置还包括:第二判断模块,用于判断所述第一校验块是否存储成功,如果否,则返回执行所述第一计算模块。

12.根据权利要求10所述的装置,其特征在于,在所述第一判断模块之后,所述装置还包括:检测模块,用于当所述第一数据块不是所述第一条带中的最后一个数据块时,检测预设时间段内是否接收到待存储至所述第一条带的第二数据块;

第二计算模块,用于当所述检测模块的检测结果为否时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第二校验块;

第三存储模块,用于向所述管理服务器发送针对所述第二校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第三存储地址,将所述第二校验块存储至所述第三存储地址。

13.根据权利要求12所述的装置,其特征在于,所述第一条带中用于存储数据块的存储单元未存满时,所述装置还包括:第二接收模块,用于在将所述第二校验块存储至所述第三存储地址之后,接收所述第二数据块;

第四存储模块,用于向所述管理服务器发送针对所述第二数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第四存储地址,将所述第二数据块存储至所述第四存储地址;

第三判断模块,用于在确定所述第二数据块存储成功时,判断所述第二数据块是否为所述第一条带中的最后一个数据块;

第三计算模块,用于当所述第三判断模块的判断结果为是时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第三校验块;

更新模块,用于将所述第二校验块更新为所述第三校验块。

14.根据权利要求13所述的装置,其特征在于,在将所述第二数据块存储至所述第四存储地址之后,所述装置还包括:第二删除模块,用于当所述第二数据块为存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据。

15.根据权利要求13所述的装置,其特征在于,在将所述第二数据块存储至所述第四存储地址之后,所述装置还包括:第三删除模块,用于当所述第二数据块不是存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据,并返回执行所述第三计算模块。

16.一种数据存储系统,其特征在于,包括:管理服务器和存储服务器;所述存储服务器包括:主存储服务器和非主存储服务器,其中,所述主存储服务器为所述存储服务器中的任意一个;

所述主存储服务器,用于接收待存储至第一条带的第一数据块,向所述管理服务器发送针对所述第一数据块的存储地址获得请求;

所述管理服务器,用于接收所述主存储服务器发送的针对所述第一数据块的存储地址获得请求,按照条带存储机制确定第一存储地址,并将所述第一存储地址发送至所述主存储服务器;

所述主存储服务器,用于接收所述管理服务器发送的所述第一存储地址,将所述第一数据块存储至所述第一存储地址;在确定所述第一数据块存储成功时,判断所述第一数据块是否为所述第一条带中的最后一个数据块,如果是,则根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块;向所述管理服务器发送针对所述第一校验块的存储地址获得请求;

所述管理服务器,用于接收所述主存储服务器发送的针对所述第一校验块的存储地址获得请求,按照条带存储机制确定第二存储地址,并将所述第二存储地址发送至所述主存储服务器;

所述主存储服务器,用于接收所述管理服务器发送的所述第二存储地址,并将所述第一校验块存储至所述第二存储地址。

17.根据权利要求16所述的系统,其特征在于,

所述管理服务器,还用于当检测到所述第一数据块未存储成功,且当检测到所述主存储服务器发生异常时,删除所述第一数据块的已存储数据,从所述非主存储服务器中选择新的主存储服务器,将所述主存储服务器切换为所述新的主存储服务器,并向所述主存储服务器发送针对所述第一校验块的计算指令,其中,所述计算指令携带所述第一条带中已存储成功的所有数据块的存储地址;

所述主存储服务器,用于接收所述管理服务器发送的所述计算指令,并根据所述计算指令中携带的存储地址,获得数据块,根据所获得的数据块,计算所述第一条带中的第一校验块。

说明书 :

一种数据存储方法、装置及系统

技术领域

[0001] 本申请涉及计算机技术领域,特别涉及一种数据存储方法、装置及系统。

背景技术

[0002] 随着计算机技术的发展,需要存储的数据量呈几何级数增长。为了提高数据存储时的存储性能,目前常用的存储模式为RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)模式中的RAID5和RAID6。其中,RAID5是一种采用块交叉访问及校验信息均匀分布的模式。RAID5读写操作是以条带为基本单位的,条带被划分为多个存储单元,这些存储单元用于存储数据块和校验块。图1a为条带的一种结构示意图,其中,该条带包含n个数据块(D1、D2、…、Dn)和m个校验块(P1、P2、…、Pm),每个数据块和校验块均分布在不同的磁盘上。在分布式存储系统中,磁盘可以位于不同的服务器上。作为一个例子,当n取3,m取1时,条带对应着4个服务器,图1b所示即为该例中条带与服务器的逻辑关系示意图。其中,包括4个相互独立的服务器,每个服务器中存储有3个数据块和1个校验块,图1b中横向的3个数据块和1个校验块组成一个条带,表1为具体的各个条带的组成。这样,每个条带中的数据块和校验块均分别位于不同的服务器上。
[0003] 表1
[0004]
[0005] 在一个条带中,校验块是根据数据块中的数据计算得到的,即数据块D1~Dn与校验块P满足以下关系:D1 xor D2 xor…Dn xor P=0。其中xor为异或运算符。当数据块更新时,对应的校验块也会重新计算并更新。通常,当数据块与校验块符合上述关系时,即称数据块与校验块之间存在一致性。当数据块和校验块之间存在一致性时,从其中任取个数不少于n的数据块或校验块,即能根据上述关系得到其他数据块或校验块。也就是说,当一个服务器发生故障时,该服务器上的数据可以通过其他服务器上的数据进行恢复。
[0006] 现有技术中,存储数据的方法通常是满条带写入服务器中的磁盘,即根据数据块获得校验块,然后将条带中的数据块和校验块同时写入磁盘。但是,在将数据块和校验块同时写入磁盘的过程中,如果系统突然遭遇断电事故,条带数据可能没有完全写入成功。当系统重启之后,条带中的数据可能是不完整的,数据块中的有效数据和校验块中的数据可能存在不一致性。
[0007] 此时,如果某个磁盘失效,则利用未失效磁盘上的数据块和校验块恢复出的数据将是错误的。这种现象也被称为Write Hole(写漏洞)现象。

发明内容

[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] 也就是说,本申请实施例中,先存储数据块,在条带中的所有数据块均存储成功时,根据条带中存储成功的数据块计算校验块,再存储校验块。而现有技术中,先根据数据块计算出校验块,在条带中的数据块和校验块均具备的情况下,将数据块和校验块同时进行存储。如果存储过程中遭遇断电事故,数据块和校验块均有可能出现存储不成功的情况,这时将导致数据块和校验块不一致,出现Write Hole问题。应用本申请实施例的方案,在第一条带中的数据块均存储成功的情况下,再计算并存储校验块,即便存储过程中遭遇断电事故,也能够尽可能避免出现数据块和校验块不一致的问题。

附图说明

[0069] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0070] 图1a为条带的一种结构示意图;
[0071] 图1b为条带与服务器的逻辑关系的一种示意图;
[0072] 图2为本申请实施例提供的一种实施方式中的数据存储系统的结构示意图;
[0073] 图3为本申请实施例提供的数据存储方法的一种流程示意图;
[0074] 图4为本申请实施例提供的数据存储方法的另一种流程示意图;
[0075] 图5a为已存储数据后的条带的一种结构示意图;
[0076] 图5b为已存储数据后的条带的另一种结构示意图;
[0077] 图5c为已存储数据后的条带的再一种结构示意图;
[0078] 图6为本申请实施例提供的数据存储装置的一种结构示意图;
[0079] 图7为本申请实施例提供的数据存储装置的另一种结构示意图;
[0080] 图8为本申请实施例提供的数据存储系统的一种结构示意图。

具体实施方式

[0081] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0082] 本申请实施例提供了一种数据存储方法、装置及系统,能够尽可能避免出现数据块和校验块不一致的问题。本申请可以应用于数据存储系统中的主存储服务器。该数据存储系统可以包括管理服务器和存储服务器。存储服务器又可以包括主存储服务器和非主存储服务器,主存储服务器可以为存储服务器中的任意一个。
[0083] 图2为本申请实施例的一种实施方式中的数据存储系统的结构示意图。这种数据存储系统也可以称为分布式存储系统。该系统可以包括管理服务器21、存储服务器22和客户端23。其中,管理服务器21(Master Data Services,MDS)又称为元数据服务器,用于组织、管理存储服务器22中的存储空间信息。存储服务器22,又称为对象服务器、存储节点等,可以接收客户端23下发的待存储的数据以及向自身和其他存储服务器下发存储任务,承担部分计算任务等。客户端23,用于向存储服务器下发待存储数据。
[0084] 下面通过具体实施例,对本申请进行详细说明。
[0085] 图3为本申请实施例提供的数据存储方法的一种流程示意图,应用于数据存储系统中的主存储服务器,其中,数据存储系统包括:管理服务器和存储服务器。存储服务器包括:主存储服务器和非主存储服务器。主存储服务器为存储服务器中的任意一个。具体的,该方法包括如下步骤:
[0086] 步骤S301:接收待存储至第一条带的第一数据块。其中,第一数据块的数量为一个。
[0087] 主存储服务器接收的第一数据块,可以是第一条带的第一个数据块,也可以是第一条带的最后一个数据块。
[0088] 当第一数据块为第一条带的第一个数据块时,作为执行主体的主存储服务器并不知道第一条带是哪个条带。这时,主存储服务器可以向管理服务器发送条带获得请求,管理服务器接收到主存储服务器发送的条带获得请求后,按照条带分配机制确定第一条带,并将第一条带发送至主存储服务器,主存储服务器接收并记录第一条带。管理服务器确定第一条带,可以包括确定第一条带的标识。
[0089] 其中,上述条带分配机制,可以理解为条带分配规则,其可以采用现有技术中的条带分配规则,本实施例对此不再细述。另外,该条带获得请求中可以携带所要获取的条带的格式,该格式可以包括条带中用于存储数据块的存储单元的第一数量、用于存储校验块的存储单元的第二数量。
[0090] 例如,作为执行主体的主存储服务器所要获取的条带中包括4个存储数据块的存储单元和1个存储校验块的存储单元。
[0091] 当第一数据块不为第一条带的第一个数据块时,作为执行主体的主存储服务器已经确定第一条带是哪个条带了。具体的,当第一数据块不为第一条带的第一个数据块时,主存储服务器可以根据保存的第一条带的标记,确定第一数据块对应的第一条带。其中,第一条带的标记可以是当第一数据块为第一条带的第一个数据块时主存储服务器接收管理服务器确定的第一条带后保存的。
[0092] 需要说明的是,当客户端将待存储的文件发送至主存储服务器时,主存储服务器可以根据自身存储的条带中每个用于存储数据块的存储单元的大小,对文件数据进行划分,一一获得多个数据块。
[0093] 例如,待存储的文件A的大小为1.6MB,条带中每个用于存储数据块的存储单元的大小为1MB,那么主存储服务器可以将该文件A划分成2个数据块,一个是1MB,一个是0.6MB。步骤S301中接收到的第一数据块,可以是第一个数据块,也可以是第二个数据块。
[0094] 步骤S302:向管理服务器发送针对第一数据块的存储地址获得请求,并获得管理服务器按照条带存储机制确定的第一存储地址,将第一数据块存储至所述第一存储地址。
[0095] 其中,条带存储机制,也可以理解为条带存储规则,其中包括条带中各个数据块和各个校验块的存储地址分配规则。本实施例中的条带存储机制可以采用现有技术中的存储机制,本实施例不再对其细述。
[0096] 具体的,当第一数据块为第一条带中的第一个数据块时,作为执行主体的主存储服务器,可以同时向管理服务器发送针对第一数据块的条带获得请求和针对第一数据块的存储地址获得请求,也可以先后向管理服务器发送针对第一数据块的条带获得请求和针对第一数据块的存储地址获得请求。
[0097] 管理服务器确定的用于存储第一数据块的第一存储地址,可以包括:用于存储第一数据块的第一存储服务器以及其中的磁盘。第一存储服务器可以为数据存储系统中所有存储服务器中的任意一个,包括主存储服务器自身。也就是说,第一存储地址可以位于主存储服务器自身,也可以位于该数据存储系统中的其他存储服务器上。
[0098] 当第一存储地址位于主存储服务器自身时,将第一数据块存储至第一存储地址,可以包括:主存储服务器直接将第一数据块存储至第一存储地址。
[0099] 当第一存储地址位于该数据存储系统中的其他存储服务器上时,将第一数据块存储至第一存储地址,可以包括:主存储服务器将第一数据块发送至所述其他存储服务器,以使其他存储服务器将第一数据块存储至第一存储地址。
[0100] 步骤S303:在确定第一数据块存储成功时,判断第一数据块是否为第一条带中的最后一个数据块,如果是,则执行步骤S304。
[0101] 具体的,本步骤可以包括:判断第一数据块是否已存储成功,如果是,则判断第一数据块是否为第一条带中的最后一个数据块。
[0102] 在判断第一数据块是否已存储成功时,为了提高判断结果的准确性,主存储服务器在将待存储的文件分割成数据块时,可以按照一个数据块对应同一个文件的方式来划分。也就是说,第一数据中的数据来自一个文件。当一个文件的大小小于条带中用于存储数据的存储单元的大小时,这个文件被当作一个数据块来存储,而不再将其他文件的数据填充在该数据块中。这样,可以避免下述情况:当一个数据块的数据来自至少两个文件时,如果一个文件的数据存储成功,另一个文件的数据存储失败,最终可能无法确定该数据块是否存储成功。
[0103] 判断第一数据块是否已存储成功,可以包括以下实施方式:
[0104] 当第一存储地址位于主存储服务器自身时,主存储服务器可以直接判断第一数据块是否已存储成功。
[0105] 当第一存储地址位于该数据存储系统中的其他存储服务器上时,主存储服务器可以检测预设时间段内是否接收到其他存储服务器发送的第一数据块存储成功的确认信息,如果接收到,则确定第一数据块已存储成功。
[0106] 判断第一数据块是否为第一条带中的最后一个数据块,可以包括:主存储服务器根据自身记录的第一条带中已存储的数据块的数量以及第一条带中用于存储数据块的存储单元的总数量,判断第一数据块是否为第一条带中的最后一个数据块。
[0107] 当判断出第一数据块不为第一条带中的最后一个数据块时,当第一数据块已存储成功时,主存储服务器可以继续接收待存储至第一条带的下一个第一数据块,向管理服务器发送针对该下一个第一数据块的存储地址获得请求,并获得管理服务器按照条带存储机制确定的下一个第一存储地址,将该下一个第一数据块存储至该下一个第一存储地址。直到将第一条带中用于存储数据块的存储单元存满数据,然后再执行步骤S304。
[0108] 也就是说,第一条带中的每个数据块是顺序存储的,并且,在第一个数据块存储成功之后,才继续存储第二个数据块,直至第一条带中的最后一个数据块存储成功,才计算并存储校验块。
[0109] 可以理解的是,对于按照本实施例的方式存储的数据块,当第一条带中的最后一个数据块存储成功时,说明该第一条带中的所有数据块均存储成功。
[0110] 步骤S304:根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块。
[0111] 具体的,由于通常情况下条带中的各个数据块存储在不同的存储服务器上,因此,根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块,可以包括以下实施方式:
[0112] 当主存储服务器缓存第一条带中已存储成功的所有数据块时,主存储服务器获得自身缓存的第一条带中已存储成功的所有数据块,并根据获得的数据块,计算第一条带中的第一校验块。
[0113] 当主存储服务器不缓存第一条带中已存储成功的所有数据块时,主存储服务器分别向各个第一存储服务器发送第一条带数据块的获得请求,其中,第一存储服务器为存储第一条带数据块的服务器。主存储服务器获得各个第一存储服务器发送的第一条带中的数据块,并根据获得的数据块,计算第一条带中的第一校验块。
[0114] 需要说明的是,根据数据块计算校验块的方法可以采用现有技术中对应的方法,其具体过程此处不再细述。
[0115] 步骤S305:向管理服务器发送针对第一校验块的存储地址获得请求,并获得管理服务器按照条带存储机制确定的第二存储地址,将第一校验块存储至第二存储地址。
[0116] 需要说明的是,步骤S305与步骤S302基本类似,因此步骤S305可以参照步骤S302中的相关内容,其具体过程不再细述。
[0117] 由上述内容可知,本实施例中,作为执行主体的主存储服务器在接收到待存储至第一条带的第一数据块时,向管理服务器请求第一数据块的第一存储地址,在获得第一存储地址后将第一数据块存储至第一存储地址。在确定第一数据块存储成功时,判断该第一数据块是否为第一条带中的最后一个数据块,如果是,则根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块。然后,向管理服务器请求第一校验块的第二存储地址,在获得第二存储地址后将第一校验块存储至第二存储地址。
[0118] 也就是说,本申请实施例中,先存储数据块,在条带中的所有数据块均存储成功时,根据条带中存储成功的数据块计算校验块,再存储校验块。而现有技术中,先根据数据块计算出校验块,在条带中的数据块和校验块均具备的情况下,将数据块和校验块同时进行存储。如果存储过程中遭遇断电事故,数据块和校验块均有可能出现存储不成功的情况,这时将导致数据块和校验块不一致,出现Write Hole问题。应用本申请实施例的方案,在第一条带中的数据块均存储成功的情况下,再计算并存储校验块,即便存储过程中遭遇断电事故,也能够尽可能避免出现数据块和校验块不一致的问题。
[0119] 作为一种具体的实施方式,在图3所示实施例中,为了进一步保证数据块和校验块的一致性,在步骤S302之后,即在将第一数据块存储至第一存储地址之后,当第一数据块未存储成功时,所述方法还可以包括:
[0120] 删除第一数据块的已存储数据,并返回执行步骤S304,即返回执行根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块的步骤。
[0121] 需要说明的是,第一数据块未存储成功,可能是第一数据块的数据只存储了一部分,另一部分没有存储成功;也可能是第一数据块的全部数据均已存储,但是其中部分数据发生错误。
[0122] 具体的,当第一数据块未存储成功时,删除第一数据块的已存储数据,可以包括如下实施方式:
[0123] 当第一存储地址位于主存储服务器自身时,即第一数据块存储于主存储服务器自身时,主存储服务器可以直接删除第一数据块的已存储数据。
[0124] 当第一存储地址位于该数据存储系统中的其他存储服务器上时,即第一数据块存储于第一存储服务器时,主存储服务器可以向第一存储服务器发送删除第一数据块的删除指令,第一存储服务器在接收到主存储服务器发送的删除指令之后删除第一数据块的已存储数据。其中,第一存储服务器为存储第一数据块的服务器。
[0125] 当然,删除第一数据块的已存储数据的步骤,也可以由主存储服务器来执行。即,主存储服务器可以判断预设时间段内是否接收到第一存储服务器发送的第一数据块存储成功的确认信息,如果未接收到,则确定第一数据块未存储成功,向第一存储服务器发送删除第一数据块的删除指令,第一存储服务器在接收到管理服务器发送的删除指令之后删除第一数据块的已存储数据。其中,第一存储服务器为存储第一数据块的服务器。在这种实施方式中,第一存储服务器可以是主存储服务器,也可以是非主存储服务器。
[0126] 需要说明的是,当第一数据块为第一条带中的第一个数据块时,删除第一数据块的已存储数据之后,该第一条带中不存在已存储成功的数据块,也就不需要执行计算第一校验块的步骤。当第一数据块不为第一条带中的第一个数据块时,删除第一数据块的已存储数据之后,该第一条带中存在已存储成功的数据块,可以继续执行计算第一校验块的步骤。
[0127] 可见,在这种实施方式中,当第一条带中的某个数据块未存储成功时,删除该数据块的已存储数据,根据第一条带中已存储成功的所有数据块计算校验块,并存储校验块。这样,能够避免未存储成功的数据块污染该条带,进一步保证条带中数据块与校验块之间的一致性。
[0128] 作为一种具体的实施方式,在图3所示实施例中,为了进一步保证数据块和校验块的一致性,在步骤S305之后,即在将第一校验块存储至第二存储地址之后,所述方法还可以包括:
[0129] 判断第一校验块是否存储成功,如果否,则返回执行步骤S304。
[0130] 具体的,判断第一校验块是否存储成功,可以包括以下实施方式:
[0131] 当第二存储地址位于主存储服务器自身时,主存储服务器可以直接判断第一校验块是否已存储成功。
[0132] 当第二存储地址位于该数据存储系统中的其他存储服务器上时,主存储服务器可以检测预设时间段内是否接收到其他存储服务器发送的第一校验块存储成功的确认信息,如果接收到,则确定第一校验块已存储成功。
[0133] 当第一校验块未存储成功时,主存储服务器重新根据第一条带中已存储成功的所有数据块,计算第一条带中的第一校验块;重新向管理服务器发送针对第一校验块的存储地址获得请求,并重新获得管理服务器按照条带存储机制确定的第二存储地址,将第一校验块存储至第二存储地址。
[0134] 需要说明的是,第一校验块未存储成功,可能是由于存储第一校验块的存储服务器发生异常,因此需要重新获取第一校验块的存储地址。
[0135] 当然,当判断出第一校验块未存储成功时,还可以删除第一校验块的已存储数据,以节省存储空间。
[0136] 在本申请的另一实施例中,在图3所示实施例的基础上,当第一条带中用于存储数据块的存储单元未存满时,如果长时间接收不到其他文件数据,则为了保证数据的安全性,这种情况下仍然要计算并存储校验块。因此,在步骤S303的判断结果为否时,所述方法还可以包括如图4所示的步骤:
[0137] 步骤S306:当第一数据块不是第一条带中的最后一个数据块时,检测预设时间段内是否接收到待存储至第一条带的第二数据块,如果未接收到,则执行步骤S307。
[0138] 需要说明的是,如果主存储服务器在预设时间段内未接收到待存储至第一条带的第二数据块,为了避免第一条带长期处于可写入状态,无法计算校验块,可以在第一条带未存满时,计算并存储校验块。这样,管理服务器在检测到校验块存储成功时,可以将第一条带的状态暂时设置为不可写入。
[0139] 步骤S307:根据第一条带中已存储成功的所有数据块,计算第一条带中的第二校验块。
[0140] 步骤S308:向所述管理服务器发送针对第二校验块的存储地址获得请求,并获得管理服务器按照条带存储机制确定的第三存储地址,将第二校验块存储至第三存储地址。
[0141] 需要指出的是,图4所示实施例中的步骤S307和S308分别与图3所示实施例中的步骤S304和S305类似,因此,可以参照图3所示实施例中的相关描述。
[0142] 可见,在本实施例中,当第一条带中用于存储数据块的存储单元未存满时,如果预设时间段内主存储服务器没有接收到待存储至第一条带的新的数据块,则直接计算并存储校验块,从而可以避免条带长时间处于可写入状态,进一步保证条带中已存储数据的安全性。
[0143] 作为一种具体的实施方式,在图4所示实施例中,第一条带中用于存储数据块的存储单元未存满时,在将第二校验块存储至第三存储地址之后,如果接收到了第二数据块,还可以将第二数据块再存储至第一条带。因此,所述方法还可以包括:
[0144] 步骤1:接收所述第二数据块。
[0145] 步骤2:向管理服务器发送针对第二数据块的存储地址获得请求,并获得管理服务器按照条带存储机制确定的第四存储地址,将第二数据块存储至第四存储地址。
[0146] 步骤3:在确定第二数据块存储成功时,判断第二数据块是否为第一条带中的最后一个数据块,如果是,则执行步骤4。
[0147] 步骤4:根据第一条带中已存储成功的所有数据块,计算第一条带中的第三校验块。
[0148] 步骤5:将第二校验块更新为第三校验块。
[0149] 下面以一个具体的实例来详细说明上述过程。
[0150] 在图5a所示条带A中,包括4个用于存储数据块的存储单元和1个用于存储校验块的存储单元。已知该条带A中存储了数据块D1、数据块D2以及校验块P。当接收到待存储至该条带A中的数据块D3时,向管理服务器发送数据块D3的存储地址获得请求,并获得管理服务器按照条带存储机制确定的存储地址,将数据块D3存储至该存储地址。
[0151] 在确定数据块D3存储成功时,判断数据块D3不为条带A中的最后一个数据块,继续针对接收的待存储至条带A的数据块D4,向管理服务器发送数据块D4的存储地址获得请求,并获得管理服务器按照条带存储机制确定的存储地址,将数据块D4存储至该存储地址。
[0152] 在确定数据块D4存储成功时,判断出数据块D4为条带A中的最后一个数据块,此时,根据条带A中已存储成功的数据块D1~D4,计算条带A中的校验块P′,并将校验块P更新为P′。此时条带A变为图5b所示的形式,其中包含数据块D1~D4以及校验块P′。
[0153] 可见,在本实施方式中,在条带中用于存储数据块的存储单元未存满的情况下,当校验块已被存储之后,主存储服务器再次接收到待存储至该条带的数据块时,存储这些数据块,当该条带中用于存储数据块的存储单元存满时,并且最后一个数据块也存储成功时,重新根据该条带中的数据块计算并更新校验块。
[0154] 作为一种具体的实施方式,在图4所示实施例中,为了进一步保证数据块和校验块的一致性,在上述步骤2之后,即在将第二数据块存储至第四存储地址之后,所述方法还可以包括:
[0155] 当第二数据块为存储第二校验块后接收到的第一个数据块,且第二数据块未存储成功时,删除第二数据块的已存储数据。
[0156] 仍然以图5a和图5b所示的条带为例来说明。图5a所示的条带A中已经存储了数据块D1和D2以及校验块P,当接收到数据块D3时,数据块D3是存储校验块P之后接收到的待存储至条带A的第一个数据块,如果数据块D3在存储过程中发生异常,未存储成功,则直接删除D3的已存储数据即可,从而可以保证条带A中数据块和校验块的一致性。即直接删除数据块D3之后,条带A恢复成了图5a的形式,回退到了未写入数据块D3时的版本。
[0157] 作为一种具体的实施方式,在图4所示实施例中,为了进一步保证数据块和校验块的一致性,在上述步骤2之后,在将第二数据块存储至第四存储地址之后,所述方法还可以包括:
[0158] 当第三数据块不是存储第二校验块后接收到的第一个数据块,且第二数据块未存储成功时,删除第二数据块的已存储数据,并返回执行根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第三校验块的步骤,即返回执行步骤4。
[0159] 仍然以图5a和图5b所示的条带为例来说明。图5a所示的条带A中已经存储了数据块D1和D2以及校验块P,当接收到数据块D3时,可以判断出数据块D3是存储校验块P之后接收到的待存储至条带A的第一个数据块。当数据块D3存储成功时,继续存储数据块D4,数据块D4不是存储校验块P之后接收到的待存储至条带A的第一个数据块。当数据块D4未存储成功时,主存储服务器在删除数据块D4的同时,还要根据条带A中已存储成功的D1、D2和D3计算校验块P〞,将校验块P更新为校验块P〞。这时,条带A变成了图5c所示的形式,其中包含数据块D1、D2、D3和校验块P〞。
[0160] 在该实施方式中,存储成功的数据块D3已经改变了条带A中的数据块与校验块的一致性,因此,应重新计算并更新校验块,以保证数据块与校验块的一致性。
[0161] 作为一种具体的实施方式,在图4所示实施例中,为了进一步保证数据块和校验块的一致性,所述方法还可以包括:
[0162] 判断第三校验块是否更新成功,如果否,则返回执行根据第一条带中已存储成功的所有数据块,计算第一条带中的第三校验块的步骤,即返回执行步骤4。
[0163] 仍然以图5a和图5b所示的条带为例来说明。图5a所示的条带A中已经存储了数据块D1和D2以及校验块P,图5b所示的条带A中又添加了数据块D3和D4,并且将校验块P更新为了校验块P′。当检测到更新过程中发生了异常,P′未更新成功时,则可以重新根据数据块D1~D4计算校验块P0,将校验块P′更新为P0,以保证校验块更新成功。
[0164] 图6为本申请实施例提供的数据存储装置的一种结构示意图,与图3所示方法实施例相对应,应用于数据存储系统中的主存储服务器,其中,数据存储系统包括:管理服务器和存储服务器;所述存储服务器包括:主存储服务器和非主存储服务器;所述主存储服务器为所述存储服务器中的任意一个。
[0165] 具体的,所述装置包括:
[0166] 第一接收模块601,用于接收待存储至第一条带的第一数据块;
[0167] 第一存储模块602,用于向所述管理服务器发送针对所述第一数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第一存储地址,将所述第一数据块存储至所述第一存储地址;
[0168] 第一判断模块603,用于在确定所述第一数据块存储成功时,判断所述第一数据块是否为所述第一条带中的最后一个数据块;
[0169] 第一计算模块604,用于当所述第一判断模块603的判断结果为是时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块;
[0170] 第二存储模块605,用于向所述管理服务器发送针对所述第一校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第二存储地址,将所述第一校验块存储至所述第二存储地址。
[0171] 作为一种具体的实施方式,在图6所示实施例中,在将所述第一数据块存储至所述第一存储地址之后,所述装置还可以包括:
[0172] 第一删除模块(图中未示出),用于当所述第一数据块未存储成功时,删除所述第一数据块的已存储数据,并返回执行所述第一计算模块604。
[0173] 作为一种具体的实施方式,在图6所示实施例中,在将所述第一校验块存储至所述第二存储地址之后,所述装置还可以包括:
[0174] 第二判断模块(图中未示出),用于判断所述第一校验块是否存储成功,如果否,则返回执行所述第一计算模块604。
[0175] 在本申请的另一实施方式中,在图6所示实施例中,在所述第一判断模块603之后,所述装置还可以包括以下模块,这些模块可以如图7所示,图7所示实施例与与图4所示方法实施例相对应。
[0176] 检测模块606,用于当所述第一数据块不是所述第一条带中的最后一个数据块时,检测预设时间段内是否接收到待存储至所述第一条带的第二数据块;
[0177] 第二计算模块607,用于当所述检测模块的检测结果为否时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第二校验块;
[0178] 第三存储模块608,用于向所述管理服务器发送针对所述第二校验块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第三存储地址,将所述第二校验块存储至所述第三存储地址。
[0179] 作为一种具体的实施方式,在图7所示实施例中,所述第一条带中用于存储数据块的存储单元未存满时,所述装置还可以包括:
[0180] 第二接收模块(图中未示出),用于在将所述第二校验块存储至所述第三存储地址之后,接收所述第二数据块;
[0181] 第四存储模块(图中未示出),用于向所述管理服务器发送针对所述第二数据块的存储地址获得请求,并获得所述管理服务器按照条带存储机制确定的第四存储地址,将所述第二数据块存储至所述第四存储地址;
[0182] 第三判断模块(图中未示出),用于在确定所述第二数据块存储成功时,判断所述第二数据块是否为所述第一条带中的最后一个数据块;
[0183] 第三计算模块(图中未示出),用于当所述第三判断模块的判断结果为是时,根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第三校验块;
[0184] 更新模块(图中未示出),用于将所述第二校验块更新为所述第三校验块。
[0185] 作为一种具体的实施方式,在图7所示实施例中,在将所述第二数据块存储至所述第四存储地址之后,所述装置还可以包括:
[0186] 第二删除模块(图中未示出),用于当所述第二数据块为存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据。
[0187] 作为一种具体的实施方式,在图7所示实施例中,在将所述第二数据块存储至所述第四存储地址之后,所述装置还可以包括:
[0188] 第三删除模块(图中未示出),用于当所述第三数据块不是存储所述第二校验块后接收到的第一个数据块,且所述第二数据块未存储成功时,删除所述第二数据块的已存储数据,并返回执行所述第三计算模块。
[0189] 图8为本申请实施例提供的数据存储系统的一种结构示意图,该系统包括:管理服务器81和存储服务器82;所述存储服务器82包括:主存储服务器821和非主存储服务器822,其中,所述主存储服务器为所述存储服务器中的任意一个;
[0190] 所述主存储服务器821,用于接收待存储至第一条带的第一数据块,向所述管理服务器81发送针对所述第一数据块的存储地址获得请求;
[0191] 所述管理服务器81,用于接收所述主存储服务器821发送的针对所述第一数据块的存储地址获得请求,按照条带存储机制确定第一存储地址,并将所述第一存储地址发送至所述主存储服务器821;
[0192] 所述主存储服务器821,用于接收所述管理服务器81发送的所述第一存储地址,将所述第一数据块存储至所述第一存储地址;在确定所述第一数据块存储成功时,判断所述第一数据块是否为所述第一条带中的最后一个数据块,如果是,则根据所述第一条带中已存储成功的所有数据块,计算所述第一条带中的第一校验块;向所述管理服务器81发送针对所述第一校验块的存储地址获得请求;
[0193] 所述管理服务器81,用于接收所述主存储服务器821发送的针对所述第一校验块的存储地址获得请求,按照条带存储机制确定第二存储地址,并将所述第二存储地址发送至所述主存储服务器821;
[0194] 所述主存储服务器821,用于接收所述管理服务器81发送的所述第二存储地址,并将所述第一校验块存储至所述第二存储地址。
[0195] 作为一种具体的实施方式,在图8所示实施例中,所述管理服务器81,还用于当检测到所述第一数据块未存储成功,且当检测到所述主存储服务器821发生异常时,删除所述第一数据块的已存储数据,从所述非主存储服务器822中选择新的主存储服务器,将所述主存储服务器切换为所述新的主存储服务器,并向所述主存储服务器发送针对所述第一校验块的计算指令,其中,所述计算指令携带所述第一条带中已存储成功的所有数据块的存储地址;
[0196] 所述主存储服务器,用于接收所述管理服务器81发送的所述计算指令,并根据所述计算指令中携带的存储地址,获得数据块,根据所获得的数据块,计算所述第一条带中的第一校验块。
[0197] 可以理解的是,第一数据块未存储成功可能是由多种原因造成的,可以是存储该第一数据块的存储服务器发生了异常,也可以是主存储服务器发生了异常。当管理服务器检测到主存储服务器发生了异常时,可以从存储服务器中重新选择新的存储服务器作为主存储服务器。
[0198] 由于上述装置实施例和系统实施例是基于方法实施例得到的,与该方法具有相同的技术效果,因此装置实施例和系统实施例的技术效果在此不再赘述。
[0199] 对于装置实施例和系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
[0200] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0201] 本领域普通技术人员可以理解,上述实施方式中的全部或部分步骤是能够通过程序指令相关的硬件来完成的,所述的程序可以存储于计算机可读取存储介质中。这里所称存储介质,是指ROM/RAM、磁碟、光盘等。
[0202] 以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本申请的保护范围内。