发明内容
本发明的实施例提供一种数据存储方法、装置及系统,能够提高数据安全性。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种数据存储方法,应用于存储装置,包括:
在待存储数据块中提取一个数据块作为基准块,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识;
获取所述基准块的哈希值;
根据所述基准哈希值在所述DHT环上获取对应的基准存储节点标识;
以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识;
将所述待存储数据块中的每个数据块分别存储至所获取的存储节点标识对应的存储节点上。
结合第一方面,在第一种可实现方式中,所述存储节点标识为物理存储节点标识,且所述待存储数据块共m个,所述m为大于等于2的整数,
所述以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识包括:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上依次获取m个不同的物理存储节点标识;
其中,所述基准块分配在所述基准存储节点上,所述m个不同的物理存储节点中每两个相邻的物理存储节点在所述DHT环上间隔n个物理存储节点,所述n为大于等于0的整数;
所述将所述待存储数据块中的每个数据块分别存储至所述获取的存储节点标识对应的存储节点上,包括:
将所述m个待存储数据块分别存储到所获取的m个不同的物理存储节点上。
结合第一方面,在第二种可实现方式中,在所述在待存储数据块中提取一个数据块作为基准块之前,所述方法还包括:
将每个物理存储节点在逻辑上划分为至少一个虚拟存储节点,所述虚拟存储节点与所述物理存储节点存在映射关系,所述虚拟存储节点为逻辑上的存储空间;
获取所述虚拟存储节点的虚拟存储节点标识;
根据所述虚拟存储节点标识建立DHT环,所述DHT环的存储节点标识为虚拟存储节点标识。
结合第二种可实现方式,在第三种可实现方式中,当所述每个物理存储节点在逻辑上划分为t个虚拟存储节点,所述t大于等于2,且所述待存储数据块共m个,所述m为大于等于2的整数;
所述以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识包括:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上获取m个不同的虚拟存储节点标识,且所述m个不同的虚拟存储节点标识对应的虚拟存储节点中不存在两个以上虚拟存储节点与同一个物理存储节点存在映射关系;
其中,所述基准块分配在所述基准存储节点上,所述m个不同的虚拟存储节点中每两个相邻的虚拟存储节点在所述DHT环上间隔n个虚拟存储节点,所述n为大于等于0的整数;
所述将所述待存储数据块中的每个数据块分别存储至所述获取的存储节点标识对应的存储节点上,包括:
将所述m个待存储数据块分别存储到所获取的m个不同的虚拟存储节点上。
结合第一方面、第一至三种可实现方式,在第四种可实现方式中,在所述在待存储数据块中提取一个数据块作为基准块之前,所述方法还包括:
判断子数据块和校验块的个数之和是否大于所述DHT环中存储节点标识的个数;
当所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块;
当所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。
第二方面,提供一种存储装置,包括:
第一提取单元,用于在待存储数据块中提取一个数据块作为基准块,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识;
第一获取单元,用于获取所述第一提取单元提取的基准块的哈希值;
处理单元,用于根据所述第一获取单元获取的基准哈希值在所述DHT环上获取对应的基准存储节点标识;
分配单元,用于以所述处理单元得到的基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识;
存储单元,用于将所述待存储数据块中的每个数据块分别存储至所述分配单元获取的存储节点标识对应的存储节点上。
结合第二方面,在第一种可实现方式中,所述存储节点标识为物理存储节点标识,且所述待存储数据块共m个,所述m为大于等于2的整数,
所述分配单元具体用于:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上依次获取m个不同的物理存储节点标识;
将所述待存储数据块分别依次分配在所述m个不同的物理存储节点标识上;
所述存储单元具体用于:
将所述m个待存储数据块分别存储到所获取的m个不同的物理存储节点上。
结合第二方面,在第二种可实现方式中,
所述存储装置还包括:
划分单元,用于为每个物理存储节点在逻辑上划分为至少一个虚拟存储节点,所述虚拟存储节点与所述物理存储节点存在映射关系,所述虚拟存储节点为逻辑上的存储空间;
第二获取单元,用于获取所述虚拟存储节点的虚拟存储节点标识;
建立单元,用于根据所述虚拟存储节点标识建立DHT环,所述DHT环的存储节点标识为虚拟存储节点标识。
结合第二种可实现方式,在第四种可实现方式中,
当所述每个物理存储节点在逻辑上划分为t个虚拟存储节点,所述t大于等于2,且所述待存储数据块共m个,所述m为大于等于2的整数;
所述分配单元,具体用于:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上获取m个不同的虚拟存储节点标识,且所述m个不同的虚拟存储节点标识对应的虚拟存储节点中不存在两个以上虚拟存储节点与同一个物理存储节点存在映射关系;
其中,所述基准块分配在所述基准存储节点上,所述m个不同的虚拟存储节点中每两个相邻的虚拟存储节点在所述DHT环上间隔n个虚拟存储节点,所述n为大于等于0的整数;
所述存储单元具体用于:
将所述m个待存储数据块分别存储到所获取的m个不同的虚拟存储节点上。
结合第二方面,第一至三种可实现方式,在第四种可实现方式中,所述存储装置还包括:
判断单元,用于在所述在待存储数据块中提取一个数据块作为基准块之前,判断子数据块和校验块的个数之和是否大于所述DHT环中存储节点标识的个数;
第二提取单元,用于在所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数时,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块;
第三提取单元,用于在所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数时,在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。
第三方面,提供一种数据存储系统,包括:
以上任意所述的存储装置。
本发明的实施例提供一种数据存储方法、装置及系统,所述数据存储方法,应用于存储装置,包括:在待存储数据块中提取一个数据块作为基准块,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识;获取所述基准块的哈希值;根据所述基准哈希值在所述DHT环上获取对应的基准存储节点标识;以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识;将所述待存储数据块中的每个数据块分别存储至所获取的存储节点标识对应的存储节点上。这样一来,通过获取基准存储节点标识,然后以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识,使得所述数据块最终存储至不同存储节点上,与现有技术相比,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,减少了数据存储的随机性,有效降低了多个数据块存储到同一个存储节点上的可能性,因此提高了数据安全性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种数据存储方法,如图1所示,应用于存储装置,包括:
101、在待存储数据块中提取一个数据块作为基准块。
需要说明的是,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,DHT环上具有逻辑地址和逻辑上的存储节点标识的对应关系。所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识。所述一个数据块是按照预设规则指定的数据块,如,待存储数据块中的第一个数据块或最后一个数据块。
在步骤101之前,所述方法还包括:判断子数据块和校验块中未存储的数据块的个数是否大于DHT环中存储节点标识的个数;当所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块;当所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。这样可以保证特定数据块的个数小于等于DHT环上的存储节点标识的个数。特别的,由于在实际应用中,子数据块和校验块中未存储的数据块的个数通常小于所述DHT环中存储节点标识的个数,大于所述DHT环中存储节点标识的个数的情况较为少见,上述判断过程一般可以省略。
102、获取所述基准块的哈希值。
哈希计算,也称散列计算,就是把任意长度的输入,又叫做预映射(pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,输出的散列值占用的空间通常远小于输入占用的空间,不同的输入可能会散列成相同的输出,因此不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。在对数据块进行哈希计算时,通常输入该数据块对应的序列数据,输出的为一个较为简短的数值。
103、根据所述基准哈希值在所述DHT环上获取对应的基准存储节点标识。
通常的,哈希值与DHT环上的存储节点标识存在对应关系,每个存储节点标识对应一定范围的哈希值,因此,本发明实施例中可以根据该基准计算得到的哈希值在DHT环上每个存储节点标识对应的哈希值范围进行查询,例如,若该哈希值落入第一存储节点标识对应的哈希值范围,则所述第一存储节点标识作为基准存储节点标识。
104、以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识。
105、将所述待存储数据块中的每个数据块分别存储至所述获取的存储节点标识对应的存储节点上。
这样一来,通过获取基准存储节点标识,然后以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识,使得所述数据块最终存储至不同存储节点上,与现有技术相比,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,减少了数据存储的随机性,有效降低了多个数据块存储到同一个存储节点上的可能性,因此提高了数据安全性。
需要说明的是,DHT是一种分布式存储方法,所述DHT环是由DHT网络中所有或多个存储节点组成的虚拟的封闭的圆环。现有技术中,所述存储节点仅为物理存储节点,而在本发明实施例中,所述存储节点既可以为物理存储节点,也可以为虚拟存储节点,所述物理存储节点为具有独立运算功能及存储功能的单元,可以为服务器,也可以为设置有CPU(CentralProcessingUnit,中央处理器)的磁盘等等。所述虚拟存储节点为逻辑上的存储空间,可以分布在至少一个磁盘或存储器上。通常的,所述DHT环可以为由物理存储节点标识组成的DHT环,如图2所示,假设通过EC技术将一个大的数据块分解成6小的子数据块,分别为子数据块A1,A2,A3,A4,A5和A6,并根据这些子数据块生成2个校验块,分别为校验块B1和B2,现有技术中,需要对由6个子数据块和2个校验块中的各个数据块分别进行哈希计算,得到8个哈希值,哈希值是比较大的值,通常情况是二进制的32位数,可以为十六进制中0~0XFFFFFFFF的任意一个值;每个物理存储节点标识对应一定范围的哈希值,例如物理存储节点标识N1对应的哈希值范围为0~0X10000000;N2对应的哈希值范围为0X10000001~0X20000000等等。如果某个数据块通过哈希计算得到的哈希值正好落在某个存储节点负责的哈希值范围内,这个数据块就存储在这个节点上。假设子数据块A1,A2,A3,A4,A5和A6通过哈希计算得到的数值分别为0X10000001,0X20000001,0X20000010,0X200001002,0X30000002和0X30000010,校验块B1和B2通过哈希计算得到的数值分别为0X30000010和0X40000100,如图2所示,假设所述DHT环为由物理存储节点标识N1,N2,N3,N4,N5,N6和N7在逻辑上组成的,每个存储节点对应一定的哈希值范围,其中,N1对应的哈希值范围为0~0X10000000;N2对应的哈希值范围为0X10000001~0X20000000;N3对应的哈希值范围为0X20000001~0X30000000;N4对应的哈希值范围为0X30000001~0X40000000;N5对应的哈希值范围为0X40000001~0X50000000;N6对应的哈希值范围为0X50000001~0X60000000;N7对应的哈希值范围为0X60000001~0X70000000,如图2中的DHT环,物理存储节点标识N1和N2之间的哈希值范围与N1对应,物理存储节点N2和N3之间的哈希值范围与N2对应,由于子数据块A1,A2,A3,A4,A5和A6通过哈希计算得到的数值分别为0X00000001,0X10000001,0X10000010,0X100001002,0X20000002和0X20000010,因此获取用于存储A1的存储节点的存储节点标识为N1,获取用于存储A2,A3和A4的存储节点的存储节点标识为N2,获取用于存储A5和A6的存储节点的存储节点标识为N3。同理,由于校验块B1和B2通过哈希计算得到的数值分别为0X30000010和0X40000100,因此获取用于存储B1的存储节点的存储节点标识为N4上,获取用于存储B2的存储节点的存储节点标识为N5上,然后,将每个数据块存储至所获取的存储节点标识对应的存储节点上。
但是,由于哈希计算的结果是随机的,子数据块和校验块存在多个数据块存储到同一个物理存储节点标识上的可能性,如A2,A3和A4同时存储在物理存储节点N2上,这样,如果物理存储节点N2出现故障,存储在该物理存储节点N2上的数据块A2,A3和A4就会损毁,由于损毁的数据块个数大于校验块个数2,就无法进行数据的恢复。
本发明实施例中,仅对基准块进行哈希计算,如图3所示,首先判断子数据块和校验块中未存储的数据块的个数是否大于DHT环中存储节点标识的个数;由于图3中存在子数据块A1,A2,A3,A4,A5和A6以及校验块B1和B2共8个未存储的数据块,DHT环上存在物理存储节点标识N1,N2,N3,N4,N5,N6和N7共7个存储节点标识,分别为N1对应的哈希值范围为0~0X10000000;N2对应的哈希值范围为0X10000001~0X20000000;N3对应的哈希值范围为0X20000001~0X30000000;N4对应的哈希值范围为0X30000001~0X40000000;N5对应的哈希值范围为0X40000001~0X50000000;N6对应的哈希值范围为0X50000001~0X60000000;N7对应的哈希值范围为0X60000001~0X70000000,因此,子数据块和校验块的个数之和大于DHT环中存储节点标识的个数,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块,即提取7个数据块作为待存储数据块,本实施例假设提取子数据块A1,A2,A3,A4,A5和A6以及校验块B1作为待存储数据块,并且在待存储数据块中提取一个子数据块A1作为基准块,假设子数据块A1通过哈希计算得到的基准哈希值为0X00000001,则可以根据基准哈希值获取基准存储节点标识N1,然后以所述基准存储节点标识N1为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识;即根据预设规则将所述待存储数据块中的数据块分配在存储节点标识上,需要说明的是,所述预设规则可以有多种,如在所述DHT环上以所述起始的存储节点标识为中心,在所述起始的存储节点标识上分配基准块,然后分别向两侧依次分配待存储数据块中其他的数据块,或者先在所述DHT环上的起始的存储节点标识上分配基准块,然后分别顺时针或逆时针依次分配待存储数据块中其他的数据块,本发明对此不作限制。
例如,所述DHT环为由物理存储节点标识组成的DHT环,且所述待存储数据块共m个,所述m为大于等于2的整数,首先,以所述基准存储节点标识为起始存储节点标识,在所述DHT环上依次获取m个不同的物理存储节点标识;将所述待存储数据块分别依次分配在所述m个不同的物理存储节点上;其中,所述基准块分配在所述基准存储节点标识上,所述m个不同的物理存储节点中每两个相邻的物理存储节点在所述DHT环上间隔n个物理存储节点,所述n为大于等于0的整数;将所述m个待存储数据块分别存储到所获取的m个不同的物理存储节点上,即将数据块存储在所获取的物理存储节点标识对应的物理存储节点上。在本实施例中,可以根据预设规则获取存储子数据块A1的物理存储节点的物理存储节点标识为N1,获取用于存储除子数据块A1之外的其他数据块在所述DHT环的不同物理存储节点对应的物理存储节点标识,本实施例假设按照预设规则以基准存储节点标识N1为起始存储节点标识,将其他数据块分别顺时针依次分配在所述DHT环的不同且相邻的存储节点标识上,那么,各个已获取的存储节点标识的标识号为在所述基准存储节点标识N1的标识号1的基础上依次加1,即获取用于存储子数据块A2的物理存储节点的标识为N2,获取用于存储子数据块A3的物理存储节点的标识为N3,获取用于存储子数据块A4的物理存储节点的标识为N4,直到获取用于存储校验块B1的物理存储节点的标识为N7。由于未获取物理存储节点标识的数据块还存在校验块B2,因此可以重复上述步骤,再次进行子数据块和校验块中未存储的数据块的个数是否大于DHT环中存储节点标识的个数的判断,以及基准块的获取等步骤,进行新一轮的存储节点标识的获取。此时,只剩下校验块B2未分配,确定校验块B2为基准块,计算校验块B2的哈希值为0X40000100,落到物理存储节点标识N5对应的哈希值范围内,因此校验块B2可以存储至物理存储节点标识N5上。然后,将所述待存储数据块中的每个数据块分别存储至所获取的存储节点标识对应的存储节点上,即子数据块A1存储在物理存储节点N1上,将子数据块A2存储在物理存储节点N2上,将子数据块A3存储在物理存储节点N3上,将子数据块A4存储在物理存储节点N4上,直到将校验块B1存储在物理存储节点N7上,最终将校验块B2存储在物理存储节点N5上。
需要说明的是,为了简化物理存储节点标识的获取步骤,在进行第二轮物理存储节点标识的获取,在本实施例中即校验块B2的分配时,若判断得到子数据块和校验块中未存储的数据块的个数小于DHT环中存储节点标识的个数,可以仍然按照上一轮物理存储节点标识的获取的顺序依次进行物理存储节点标识的获取,由于存储校验块B1的物理存储节点的物理存储节点标识为N7,那么在DHT环上顺时针获取存储校验块B2的物理存储节点的物理存储节点标识为N1。
采用本发明实施例提供的数据存储方法,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,降低了数据存储的随机性,由于待存储数据块中的数据块分配在不同的存储节点标识上,有效减少了多个数据块存储到同一个存储节点上的情况,因此提高了数据安全性,即使子数据块和校验块的总个数大于存储节点的个数,最终进行数据存储后,被存储的数据块的分布也较为均匀,子数据块存在多个数据块存储到同一个存储节点上的情况发生的概率减小。例如,图3较图2仅出现一组多个数据块分配到同一个存储节点标识上的情况,相应的,物理存储节点标识为N5的物理存储节点上存储了子数据块A5和校验块B2,即使物理存储节点N5出现故障,存储在该物理存储节点上的子数据块A5和校验块B2被损毁,由于损毁的数据块个数等于校验块个数2,因此进行数据的恢复。所以本发明实施例提供的数据存储方法有效提高了数据安全性。
特别的,当所述DHT环为由虚拟存储节点标识组成的DHT环时,如图4所示,本发明实施例提供另一种数据存储方法,应用于存储装置,包括:
401、生成子数据块和校验块。执行步骤402。
将一个大的数据块分解成子数据块和校验块通常采用EC技术,具体的过程与现有技术相同,本发明对此不再赘述。需要说明的是,根据所述大的数据块的数据重要性的不同,子数据块和校验块可以选择不同的比例,例如:8+2,4+4,数据越重要,校验块所占比重越大。
本实施例假设通过EC技术将一个大的数据块分解成6小的子数据块,分别为子数据块A1,A2,A3,A4,A5和A6,并采用EC技术根据这些子数据块生成2个校验块,分别为校验块B1和B2。
402、为每个物理存储节点设置在逻辑上划分为至少一个虚拟存储节点,所述虚拟存储节点与所述物理存储节点存在映射关系。执行步骤403。
在本实施例中,所述DHT环由虚拟存储节点标识在逻辑上组成。所述虚拟存储节点为逻辑上的存储空间,可以分布在至少一个磁盘或存储器上。
在实际应用中,可以为每个物理存储节点在逻辑上划分几个、几十、上百甚至更多的虚拟存储节点,建立所述虚拟存储节点与所述物理存储节点的映射关系,所述虚拟存储节点到物理存储节点的映射没有固定的规则,所述映射关系可以根据具体情况实时设置,示例的,如表1所示,假设数据存储系统中存在物理存储节点标识为N1至N10的共10个物理存储节点,每个物理存储节点在和逻辑上划分为3个虚拟存储节点,即每个物理存储节点都有3个虚拟存储节点与其存在映射关系,示例的,物理存储节点标识为N1的物理存储节点分别与虚拟存储节点标识为P1、P11和P21的虚拟存储节点存在映射关系,物理存储节点标识为N2的物理存储节点分别与虚拟存储节点标识为P2、P12和P22的虚拟存储节点存在映射关系。根据表1所示的虚拟存储节点对应的虚拟存储节点标识可以建立如图4所示的DHT环。
虚拟存储节点的存在可以方便物理存储节点的故障恢复,同时可以保证数据存储系统中数据分布的均衡。示例的,假设子数据块A1应该分配在虚拟存储节点标识P1上,如表1所示,由于虚拟存储节点标识为P1的虚拟存储节点与物理存储节点标识为N1的物理存储节点存在映射关系,实际存储过程中,子数据块A1应该存储在物理存储节点N1中,但当物理存储节点N1出现故障时,若子数据块A1依然存储在物理存储节点N1中,会形成无效的存储,子数据块A1会损毁或丢失,在该情况下,可以调整物理存储节点与虚拟存储节点的映射关系,如终止P1与N1之间的映射关系,建立P1与N2之间的映射关系,这样,在数据存储过程中,子数据块A1实际存储在了物理存储节点N2,保证了数据的安全,同时也便于对物理存储节点N1的修复。示例的,如表1所示,假设虚拟存储系统中,子数据块A1分配在虚拟存储节点标识P1上,子数据块A2分配在虚拟存储节点标识P11上,则子数据块A1和子数据块A2均存储在物理存储节点N1中,而物理存储节点N2中为空闲,为了保证数据的均衡分布,可以如终止P1与N1之间的映射关系,建立P1与N2之间的映射关系,使得子数据块A2存储在物理存储节点N1中,子数据块A1存储在物理存储节点N2中。
表1
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
P8 |
P9 |
P10 |
P11 |
P12 |
P13 |
P14 |
P15 |
P16 |
P17 |
P18 |
P19 |
P20 |
P21 |
P22 |
P23 |
P24 |
P25 |
P26 |
P27 |
P28 |
P29 |
P30 |
403、判断子数据块和校验块中未存储的数据块的个数是否大于DHT环中存储节点标识的个数。
当所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数,执行步骤408,当所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数,执行步骤404。
所述判断过程确保每次进行数据分配时,待存储数据块的个数小于等于存储节点标识的个数,有效地保证了各个节点的负载均衡。
本实施例中,由于数据块分解成6小的子数据块,分别为子数据块A1,A2,A3,A4,A5和A6,并采用EC技术根据这些子数据块生成2个校验块,分别为校验块B1和B2,因此最终子数据块与校验块共8个,而本实施例中的存储系统中的虚拟存储节点标识个数如表1所示共30个,由于8小于30,因此可以执行步骤404。
404、在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。执行步骤405。
在本实施例中,直接提取子数据块A1,A2,A3,A4,A5和A6,以及校验块B1和B2作为待存储数据块。
405、在待存储数据块中提取数据块作为基准块。执行步骤406。
本实施例假设提取子数据块A1作为基准块。特别的,作为基准块的特定数据块也可以为除首个子数据块A1之外的其他数据块,如首个校验块B1,或者最后一个数据块A6,或者最后一个校验块B2。本发明对此不做限定。
406、根据所述基准块获取基准存储节点标识。执行步骤407。
首先对所述基准块A1进行哈希计算得到基准哈希值,本实施例假设基准哈希值为0X10000001,然后根据所述基准哈希值在DHT环上获取基准存储节点标识,最终得到的基准存储节点标识为P1。
407、以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识。执行步骤409。
假设所述待存储数据块共m个,具体的,可以以所述基准存储节点为起始的存储节点标识,在所述DHT环上获取m个不同的虚拟存储节点标识,且所述m个不同的虚拟存储节点标识对应的虚拟存储节点中不存在两个以上虚拟存储节点与同一个物理存储节点存在映射关系;将所述待存储数据块分别依次分配在所述m个不同的虚拟存储节点标识上,其中,所述基准块分配在所述基准存储节点上,所述m个不同的虚拟存储节点中每两个相邻的虚拟存储节点在所述DHT环上间隔n个虚拟存储节点,所述n为大于等于0的整数;即待存储数据块中每个数据块在DHT环的虚拟存储节点标识上分配时,可以存在固定的间隔,所述间隔数可以根据具体情况设定,如0、1或2等等,所述待存储数据块分配至m个不同虚拟存储节点标识的过程可以看做是待存储数据块中的数据块与所述m个不同虚拟存储节点对应的虚拟存储节点标识建立映射关系的过程,数据块到虚拟存储节点标识的映射的规则可以有多种,本发明对此不做限制,如从基准存储节点位置顺时针顺序往后分配,即每两个相邻的数据块分配的虚拟存储节点标识在DHT环上相邻。
本实施例中,待存储数据块共8个,如图5中,8个不同的存储节点中每两个相邻的存储节点的存储节点在所述DHT环上的间隔为0,即分别依次在所述DHT环获取用于存储8个数据块中每个数据块的不同且相邻的存储节点的存储节点标识:获取用于存储子数据块A1的虚拟存储节点的虚拟存储节点标识为P1,获取用于存储子数据块A2的虚拟存储节点的虚拟存储节点标识为P2,获取用于存储子数据块A3的虚拟存储节点的虚拟存储节点标识为P3,获取用于存储子数据块A4的虚拟存储节点的虚拟存储节点标识为P4,直到获取用于存储校验块B2的虚拟存储节点的虚拟存储节点标识为P8,特别的,所述分别依次获取用于存储所述8个数据块中每个数据块的存储节点的存储节点标识在实际应用中可以看作8个数据块分别依次分配在所述DHT环的不同且相邻的存储节点标识上。
408、在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块。执行步骤405。
409、将所述待存储数据块中的每个数据块分别存储至所述获取的存储节点标识对应的存储节点上。执行步骤403。
将所述m个待存储数据块分别存储到所获取的m个不同的虚拟存储节点上,即将分配在所述m个不同的虚拟存储节点标识上的数据块存储至相应的m个不同的虚拟存储节点上,由于步骤402中建立了所述虚拟存储节点与所述物理存储节点的映射关系,当所述数据块存储至所述m个不同的虚拟存储节点上时,便映射至相应的m个不同的物理存储节点上,因此所述存储至所述m个不同的虚拟存储节点标识上的数据块实际存储在m个不同的物理存储节点上。
由于所述虚拟存储节点到物理存储节点的映射没有固定的规则,虚拟存储节点到物理存储节点的映射关系是和数据块到虚拟存储节点的映射相关的,例如,数据块到虚拟存储节点的映射规则可以是从基准存储节点位置顺时针顺序往后分配,即每两个相邻的数据块分配的虚拟存储节点标识在DHT环上相邻。数据块到虚拟存储节点的映射规则也可以是从基准存储节点标识往后每间隔一个虚拟存储节点标识分配一个数据块,例如将数据块A1~A6分别分配在虚拟存储节点标识P1,P3,P5,P7,P9,P11上,即获取用于存储数据块A1~A6的虚拟存储节点的虚拟存储节点标识P1,P3,P5,P7,P9,P11,那么虚拟存储节点到物理存储节点的映射规则就要保证虚拟存储节点标识对应的虚拟存储节点P1,P3,P5,P7,P9,P11映射到不同的物理存储节点,如P1映射至N1,P3映射至N2,P5映射至N3,P7映射至N4,P9映射至N5,P11映射至N6,根据所述映射关系将分配在不同的虚拟存储节点标识的数据块实际上存储至相应的不同的物理存储节点上。
示例的,假设数据块到虚拟存储节点的映射规则为从基准存储节点位置顺时针顺序往后分配,即每两个相邻的数据块分配的虚拟存储节点标识在DHT环上相邻,若数据存储系统中共t个物理存储节点,每个物理存储节点在逻辑上划分为r个虚拟存储节点,所述t为大于等于2的整数,所述r为大于等于2的整数,任意一个物理存储节点对应的虚拟存储节点的虚拟存储节点标识中相邻的虚拟存储节点标识在所述DHT环相隔t个存储节点标识。如表1所示,数据存储系统中共10个物理存储节点,每个物理存储节点划分为3个虚拟存储节点,则任意一个物理存储节点对应的虚拟存储节点的虚拟存储节点标识中相邻的虚拟存储节点标识在所述DHT环相隔10个存储节点标识。示例的,如图5所示,物理存储节点N1对应的虚拟存储节点的虚拟存储节点标识中相邻的虚拟存储节点标识P1和P11相隔10个存储节点。
特别的,在具体的数据存储过程中,需要对存储的数据块及该数据块的存储位置进行记录,以便于在后续数据提取过程中有效地提取该数据块。
需要说明的是,本发明中术语“多个”表示至少两个。本发明实施例提供的数据存储方法步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化的方法,因此不再赘述。
本发明实施例提供的数据存储方法,通过获取基准存储节点标识,然后以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识,使得所述数据块最终存储至不同存储节点上,与现有技术相比,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,减少了数据存储的随机性,有效降低了多个数据块存储到同一个存储节点上的可能性,因此提高了数据安全性。同时还为数据的均分和装置的故障恢复提供了便利。
本发明实施例提供一种存储装置60,如图6所示,包括:
第一提取单元601,用于在待存储数据块中提取一个数据块作为基准块,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识。
第一获取单元602,用于获取所述第一提取单元601提取的基准块的哈希值。
处理单元603,用于根据所述第一获取单元602获取的基准哈希值在所述DHT环上获取对应的基准存储节点标识。
分配单元604,用于以所述处理单元603得到的基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识。
存储单元605,用于将所述待存储数据块中的每个数据块分别存储至所述分配单元获取的存储节点标识对应的存储节点上。
这样一来,通过处理单元获取基准存储节点标识,然后分配单元以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识,使得所述数据块最终由存储单元存储至不同存储节点上,与现有技术相比,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,减少了数据存储的随机性,有效降低了多个数据块存储到同一个存储节点上的可能性,因此提高了数据安全性。
进一步的,所述存储节点标识为物理存储节点标识,且所述待存储数据块共m个,所述m为大于等于2的整数,
所述分配单元604具体用于:以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上依次获取m个不同的物理存储节点标识;将所述待存储数据块分别依次分配在所述m个不同的物理存储节点标识上。
所述存储单元605具体用于:将所述m个待存储数据块分别存储到所获取的m个不同的物理存储节点上。
如图7所示,所述存储装置60还包括:
划分单元606,用于为每个物理存储节点在逻辑上划分为至少一个虚拟存储节点,所述虚拟存储节点与所述物理存储节点存在映射关系,所述虚拟存储节点为逻辑上的存储空间。
第二获取单元607,用于获取所述虚拟存储节点的虚拟存储节点标识。
建立单元608,用于根据所述虚拟存储节点标识建立DHT环,所述DHT环的存储节点标识为虚拟存储节点标识。
当所述每个物理存储节点在逻辑上划分为t个虚拟存储节点,所述t大于等于2,且所述待存储数据块共m个,所述m为大于等于2的整数;所述分配单元604,具体用于:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上获取m个不同的虚拟存储节点标识,且所述m个不同的虚拟存储节点标识对应的虚拟存储节点中不存在两个以上虚拟存储节点与同一个物理存储节点存在映射关系;
其中,所述基准块分配在所述基准存储节点上,所述m个不同的虚拟存储节点中每两个相邻的虚拟存储节点在所述DHT环上间隔n个虚拟存储节点,所述n为大于等于0的整数。
所述存储单元604具体用于:
将所述m个待存储数据块分别存储到所获取的m个不同的虚拟存储节点上。
特别的,如图8所示,所述存储装置60还包括:
判断单元609,用于在所述在待存储数据块中提取一个数据块作为基准块之前,判断子数据块和校验块的个数之和是否大于所述DHT环中存储节点标识的个数;
第二提取单元610,用于在所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数时,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块;
第三提取单元611,用于在所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数时,在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。
本发明实施例提供一种数据存储系统,包括:本发明任意实施例所述的存储装置。所述存储装置可以为一个或多个服务器。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例提供一种存储装置70,如图9所示,包括:
处理器701,用于在待存储数据块中提取一个数据块作为基准块,所述待存储数据块中的数据块的个数小于分布式哈希表DHT环中存储节点标识的个数,所述DHT环包含有存储节点标识,所述存储节点标识为物理存储节点标识,或所述存储节点标识为虚拟存储节点标识。
获取所述基准块的哈希值。
根据所述基准哈希值在所述DHT环上获取对应的基准存储节点标识。
以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识。
存储器702,用于将所述待存储数据块中的每个数据块分别存储至所获取的存储节点标识对应的存储节点上。
这样一来,处理器通过获取基准存储节点标识,然后以所述基准存储节点标识为起始的存储节点标识,按照预设规则在DHT环上分别获取用于存储所述待存储数据块中的每个数据块的存储节点的存储节点标识,使得所述数据块最终存储至不同存储节点上,与现有技术相比,无需通过对所有数据块都进行哈希计算得到的结果来分配数据块,减少了数据存储的随机性,有效降低了多个数据块存储到同一个存储节点上的可能性,因此提高了数据安全性。
所述存储节点标识为物理存储节点标识,且所述待存储数据块共m个,所述m为大于等于2的整数,
所述处理器701具体用于:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上依次获取m个不同的物理存储节点标识;
其中,所述基准块分配在所述基准存储节点上,所述m个不同的物理存储节点中每两个相邻的物理存储节点在所述DHT环上间隔n个物理存储节点,所述n为大于等于0的整数。
所述存储器702具体用于:
将所述m个待存储数据块分别存储到所获取的m个不同的物理存储节点上。
所述处理器701还用于将每个物理存储节点在逻辑上划分为至少一个虚拟存储节点,所述虚拟存储节点与所述物理存储节点存在映射关系,所述虚拟存储节点为逻辑上的存储空间;获取所述虚拟存储节点的虚拟存储节点标识;根据所述虚拟存储节点标识建立DHT环,所述DHT环的存储节点标识为虚拟存储节点标识。
当所述每个物理存储节点在逻辑上划分为t个虚拟存储节点,所述t大于等于2,且所述待存储数据块共m个,所述m为大于等于2的整数;所述处理器701,具体用于:
以所述基准存储节点标识为起始的存储节点标识,在所述DHT环上获取m个不同的虚拟存储节点标识,且所述m个不同的虚拟存储节点标识对应的虚拟存储节点中不存在两个以上虚拟存储节点与同一个物理存储节点存在映射关系;其中,所述基准块分配在所述基准存储节点上,所述m个不同的虚拟存储节点中每两个相邻的虚拟存储节点在所述DHT环上间隔n个虚拟存储节点,所述n为大于等于0的整数。
所述存储器702具体用于:
将所述m个待存储数据块分别存储到所获取的m个不同的虚拟存储节点上。
所述处理器701还用于判断子数据块和校验块的个数之和是否大于所述DHT环中存储节点标识的个数;当所述子数据块和校验块中未存储的数据块的个数大于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中未存储的数据块中提取等于所述DHT环中存储节点标识的个数的数据块作为所述待存储数据块;当所述子数据块和校验块中未存储的数据块的个数小于等于所述DHT环中存储节点标识的个数,在所述子数据块和校验块中提取所有未存储的数据块作为所述待存储数据块。
本发明实施例提供一种数据存储系统,包括:本发明任意实施例所述的存储装置。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。