数据存储方法及系统 |
|||||||
申请号 | CN201280002942.2 | 申请日 | 2012-12-12 | 公开(公告)号 | CN103370113A | 公开(公告)日 | 2013-10-23 |
申请人 | 华为技术有限公司; | 发明人 | 陈国龙; 张烽; 许一震; | ||||
摘要 | 本 发明 实施例 提供一种数据存储方法及系统,包括:接收一个待存储数据的数据 块 ,所述数据块包括密钥和数据本身;采用所述待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值;确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理 硬盘 互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值;将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 | ||||||
权利要求 | 1.一种数据存储方法,其特征在于,包括: |
||||||
说明书全文 | 数据存储方法及系统技术领域[0001] 本发明涉及计算机存储技术领域,尤其涉及一种数据存储方法及系统。 背景技术[0002] 采用容删编码(Erasure code,EC)技术可以将待存储的原始数据分割成多个数据块,并新增一些数据块用于存放校验信息,这些存储有原始数据的数据块和存储有校验信息的数据块构成完整的待存储数据,并采用一定的存储方法存储到不同的存储位置。 [0003] 现有技术中,提供一种数据存储方法,每个数据块按照(密钥key,value)的格式进行存储,其中,key用于唯一标识一个数据块,value用于存储原始数据或者校验信息。分别对每个数据块中的key进行哈希运算得到哈希值,一个哈希值属于一个存储区间(partition),一个所述存储区间对应一段整数区间,如果所述哈希值落入所述存储区间对应的一段整数区间中,亦即该哈希值属于所述存储区间,之后,将每个数据块存储在各自得到的哈希值对应的存储区间中即可。 [0004] 为了提高数据存储的安全性,同一数据的各个数据块应该尽可能的分散在不同的存储区间中。然而,采用上述方法对多个数据块中的key进行哈希运算时,如果得到的哈希值对应的存储区间相同,将会导致多个数据块被存储在同一个存储区间中,因而降低了数据的安全性, 发明内容[0005] 本发明提供一种数据存储方法及系统,可以提高数据存储的安全性。 [0006] 为了达到上述发明目的,本发明采用如下技术方案: [0007] 第一方面,提供一种数据存储方法,包括: [0008] 接收一个待存储数据的数据块,所述数据块包括密钥和数据本身; [0009] 采用所述待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值; [0010] 确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值; [0011] 将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 [0012] 第一方面的第一种实现方式中,所述采用待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值包括: [0013] 采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0014] 结合第一方面的第一种实现方式,在第一方面的第二实现方式中,所述存储组的各个存储区间在逻辑上构成一个分布式哈希表DHT环,所述DHT环上的一个节点表示一个存储区间; [0015] 所述将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中包括: [0016] 从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上,其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0017] 第二方面,提供一种数据存储系统,包括: [0018] 接收模块,用于接收一个待存储数据的数据块,所述数据块包括密钥和数据本身; [0019] 运算模块,用于采用待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值; [0020] 确定模块,用于确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值; [0021] 存储模块,用于将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 [0022] 在第二方面的第一种实现方式中,所述运算模块,具体用于采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0023] 结合第二方面的第一种实现方式,在第二方面的第二种实现方式中,所述存储组的各个存储区间在逻辑上构成一个分布式哈希表DHT环,所述DHT环上的一个节点表示一个存储区间; [0024] 所述存储模块,具体用于从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上,其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0025] 第三方面,提供一种数据存储系统,包括: [0026] 接收器,用于接收一个待存储数据的数据块,所述数据块包括密钥和数据本身; [0027] 处理器,用于采用待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值; [0028] 所述处理器,还用于确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值; [0029] 存储器,用于将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 [0030] 在第三方面的第一种实现方式中,所述处理器,具体用于采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0031] 结合第三方面的第一种实现方式,在第三方面的第二种实现方式中,所述存储组的各个存储区间在逻辑上构成一个分布式哈希表DHT环,所述DHT环上的一个节点表示一个存储区间; [0032] 所述存储器,具体用于从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上,其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0033] 通过上述技术方案,可以将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,且所述存储组的一个存储区间存储所述待存储数据的一个数据块。也就是说,同一数据的各个数据块存储在所述存储组互不相同的存储区间中,而同一存储组中的各个存储区间各自所在的物理硬盘互不相同,亦即实现了将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,与现有技术同一数据的各个数据块可能被存储在同一个存储区间中相比,本发明提高了数据存储的安全性。 [0034] 同时,由于本发明实施例可以将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,使得数据的存储位置比较均衡,各个存储区间的存储压力也比较均衡。可以有效避免现有技术中同一数据的大量数据块集中存放在一个存储区间中导致该存储区间的存储压力过大的问题。附图说明 [0035] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。 [0036] 图1为本发明实施例提供的一种数据存储方法的流程示意图; [0037] 图2a为本发明实施例提供的一种存储区间在逻辑上构成的DHT环的第一种示意图; [0038] 图2b为本发明实施例提供的一种存储区间在逻辑上构成的DHT环的第二种示意图; [0039] 图2c为本发明实施例提供的一种存储区间在逻辑上构成的DHT环的第三种示意图; [0040] 图3为本发明实施例提供的数据存储系统的第一种结构示意图; [0041] 图4为本发明实施例提供的数据存储系统的第二种结构示意图。 具体实施方式[0042] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。 [0043] 本发明实施例提供一种数据存储方法,采用该方法存储数据时,可以使得同一待存储数据的数据块存储在互不相同的存储区间中,亦即一个存储区间仅存储同一待存储数据的一个数据块。可以理解的是,一个存储区间可以存储不同数据各自的一个数据块。 [0044] 其中,所述存储区间为物理硬盘上一块真实的存储区域。在整个存储系统进行初始化时,可以将所有物理硬盘上的存储区域均分成若干个容量大小相等的存储区间。每个存储区间的容量足够存放一定数量的数据块。 [0045] 如图1所示,本发明实施例提供的一种数据存储方法,包括如下步骤: [0046] 101、接收一个待存储数据的数据块,所述数据块包括密钥和数据。 [0047] 其中,所述待存储数据可以是通过将待存储的原始数据采用EC技术进行分割得到,具体过程如下:采用EC技术将待存储的原始数据分割成多个数据块,并新增一些数据块用于存放校验信息,这些存储有原始数据的数据块和存储有校验信息的数据块构成完整的待存储数据。 [0048] 每个数据块均采用(密钥key,value)形式进行存储,其中,key用于唯一标识所述数据块,value用于存储数据,例如,value存储的可以是原始数据本身,也可以是验证信息。 [0049] 102、采用所述待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值。 [0050] 其中,一个哈希值只属于一个存储区间。 [0051] 103、确定所述哈希值对应的存储区间所在的存储组。 [0052] 其中,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值。 [0053] 例如,在将存储系统中各个存储区间进行分组时,由于各个存储区间均有一个唯一的标识号,在系统进行初始化时,可以将位于同一物理硬盘上的各个存储区间的标识号设置为彼此间隔大于所述预设值,然后将存储系统中所有存储区间按照各自标识号进行排序,并将排序后的各个存储区间依次按照所述预设值划分为多个存储组,这样,可以得到位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同。 [0054] 104、将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 [0055] 本发明实施例中,可以将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,且所述存储组的一个存储区间存储所述待存储数据的一个数据块。也就是说,同一数据的各个数据块存储在所述存储组互不相同的存储区间中,而同一存储组中的各个存储区间各自所在的物理硬盘互不相同,亦即实现了将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,与现有技术同一数据的各个数据块可能被存储在同一个存储区间中相比,本发明提高了数据存储的安全性。 [0056] 同时,由于本发明实施例可以将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,使得数据的存储位置比较均衡,各个存储区间的存储压力也比较均衡。可以有效避免现有技术中同一数据的大量数据块集中存放在一个存储区间中导致该存储区间的存储压力过大的问题。 [0057] 进一步地,上述步骤102具体可以采用如下替代方式执行:采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0058] 本发明实施例中提到的存储系统中的各个存储区间在逻辑上可以构成一个分布式哈希表(Distributed Hash Table,DHT)环,如图2a所示,该DHT环中包括12个节点,每个节点表示一个存储区间。图2a中的每个节点存放的数字01-12分别表示相应存储区间的标识号。如果步骤103中所述预设值为6时,则可以将12个存储区间分成两个存储组,第一个存储组可以包括标识号为01-06的存储区间,第二个存储组包括标识号为07-12的存储区间,每个存储组的各个存储区间在逻辑上也是构成一个DHT环例如图2b表示第一个存储组构成的DHT环,图2c表示第二个存储组构成的DHT环。 [0059] 进一步地,上述步骤104具体可以采用如下替代方式执行:从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上。 [0060] 其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0061] 例如,有一个待存储数据包括4个数据块,所述4个数据块按照各自在所述待存储数据中的位置序号有序排列后的顺序为:数据块1、数据块2、数据块3、数据块4,数据块1即为所述待存储数据的第一个数据块。如果利用所述第一个数据块中的密钥进行哈希运算,得出的哈希值为11,那可以得知所述11表示的存储区间位于第二个存储组,之后,将数据块1、数据块2、数据块3、数据块4依次存放在图2c所示的11、12、07、08的节点中,或者,将数据块1、数据块2、数据块3、数据块4依次存放图2c所示的11、10、09、08中。 [0062] 由于同一个存储组的各个存储区间各自所在的物理硬盘互不相同,因而可以将所述待存储数据的4个数据块分散存储在不同的物理硬盘上。 [0063] 需要说明的是,步骤104的替代方式是一种有序存储方式,在数据恢复时,只需要按照存储区间的顺序依次读出数据既可以恢复各个数据块在整个待存储数据中的位置。当然,容易想到的是,也可以采用无序存储方式,但是需要保存各个数据块与存储区间的对应关系,以便于数据恢复时,可以恢复各个数据块在整个待存储数据中的位置,保证数据的连续性。 [0064] 可以理解的是,上述实施例是以一个待存储数据为例进行说明的,如果有多个不同的待存储数据时,由于利用不同的待存储数据各自的一个数据块中的密钥进行哈希运算时得到的哈希值可能会相同,则多个不同的待存储数据可能会存放于同一组中,亦即,同一个组的一个存储区间可能会存放多个不同待存储数据各自的一个数据块。 [0065] 如图3所示,本发明实施例提供一种数据存储系统,包括: [0066] 接收模块31,用于接收一个待存储数据的数据块,所述数据块包括密钥和数据本身; [0067] 有关待存储数据及其数据块的详细描述可以参见步骤101。 [0068] 运算模块32,用于采用待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值; [0069] 确定模块33,用于确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值; [0070] 有关存储组的详细描述可以参见步骤103。 [0071] 存储模块34,用于将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。有关具体的存储实现过程可以参见步骤104。 [0072] 本发明实施例中提供的存储系统,可以将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,且所述存储组的一个存储区间存储所述待存储数据的一个数据块。也就是说,同一数据的各个数据块存储在所述存储组互不相同的存储区间中,而同一存储组中的各个存储区间各自所在的物理硬盘互不相同,亦即实现了将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,与现有技术同一数据的各个数据块可能被存储在同一个存储区间中相比,本发明提高了数据存储的安全性。 [0073] 同时,由于本发明实施例可以将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,使得数据的存储位置比较均衡,各个存储区间的存储压力也比较均衡。可以有效避免现有技术中同一数据的大量数据块集中存放在一个存储区间中导致该存储区间的存储压力过大的问题。 [0074] 进一步地,所述运算模块,具体用于采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0075] 进一步地,所述存储组的各个存储区间在逻辑上构成一个DHT环,所述DHT环上的一个节点表示一个存储区间; [0076] 所述DHT环可以参见步骤104的替代实行方式中有关DHT环的描述。 [0077] 所述存储模块,具体用于从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上。 [0078] 其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0079] 如图4所示,本发明实施例还提供一种数据存储系统,包括:总线4000、驱动电路4001、接收器41,处理器42、存储器43 [0080] 接收器41,用于接收一个待存储数据的数据块,所述数据块包括密钥和数据本身; [0081] 有关待存储数据及其数据块的详细描述可以参见步骤101。 [0082] 处理器42,用于采用待存储数据的一个数据块中的密钥进行哈希运算,得到哈希值; [0083] 所述处理器42,还用于确定所述哈希值对应的存储区间所在的存储组,所述存储组为将存储系统中各个存储区间按照预设值进行均分得到,且位于同一存储组中的各个存储区间各自所在的物理硬盘互不相同,所述预设值为所有待存储数据各自的数据块个数中的最大值; [0084] 有关存储组的详细描述可以参见步骤103。 [0085] 存储器43,用于将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,其中,所述存储组的一个存储区间存储所述待存储数据的一个数据块。 [0086] 有关具体的存储实现过程可以参见步骤104。 [0087] 本发明实施例中提供的存储系统,可以将所述待存储数据的数据块依次存储在所述存储组的各个存储区间中,且所述存储组的一个存储区间存储所述待存储数据的一个数据块。也就是说,同一数据的各个数据块存储在所述存储组互不相同的存储区间中,而同一存储组中的各个存储区间各自所在的物理硬盘互不相同,亦即实现了将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,与现有技术同一数据的各个数据块可能被存储在同一个存储区间中相比,本发明提高了数据存储的安全性。 [0088] 同时,由于本发明实施例可以将同一数据的各个数据分散存储在不同物理硬盘上的存储区间中,使得数据的存储位置比较均衡,各个存储区间的存储压力也比较均衡。可以有效避免现有技术中同一数据的大量数据块集中存放在一个存储区间中导致该存储区间的存储压力过大的问题。 [0089] 需要说明的是,所述接收器41可以耦合到天线。 [0092] 其中,所述处理器42可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。这些指令可以通过其中的处理器以配合实现及控制,用于执行本发明实施例揭示的方法。上述处理器还可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(application specific integrated circuit)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。 [0093] 其中,上述通用处理器42可以是微处理器或者该处理器也可以是任何常规的处理器,解码器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。 [0094] 另外,存储系统中的各个硬件组件通过总线系统4000耦合在一起,其中总线系统4000除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起,在图4中将各种总线都标为总线系统4000。 [0095] 进一步地,所述处理器42,具体用于采用待存储数据的第一个数据块中的密钥进行哈希运算,得到哈希值,所述第一个数据块为在所述待存储数据中位置序号排在第一个的数据块。 [0096] 进一步地,所述存储组的各个存储区间在逻辑上构成一个DHT环,所述DHT环上的一个节点表示一个存储区间; [0097] 所述DHT环可以参见步骤104的替代实行方式中有关DHT环的描述。 [0098] 所述存储器43,具体用于从所述DHT环的第一节点开始,将所述待存储数据中各个数据块依次存储在所述DHT环中所述第一节点及所述第一节点在顺时针或者逆时针方向之后连续的节点上,其中,所述待存储数据的第一个数据块存储在所述第一节点,所述第一节点表示所述哈希值对应的存储区间,所述待存储数据中各个数据块是按照各自在所述待存储数据中的位置序号有序排列的。 [0099] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。 [0100] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。 |