分布式数据存储系统、方法和装置转让专利

申请号 : CN201610074240.5

文献号 : CN105516367B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 宋惠卿孙晓

申请人 : 北京百度网讯科技有限公司

摘要 :

本申请公开了分布式数据存储系统、方法及装置。所述系统的一具体实施方式包括:数据存储节点,用于存储代理节点发送的待存储数据,各所述数据存储节点包括多个用于映射不同键值信息的哈希槽,所述待存储数据包括键值信息和数据信息;中心管理节点,用于存储记录信息,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量;所述代理节点,用于接收客户端发送的待存储数据,根据所述中心管理节点的记录信息确定与所述待存储数据对应的哈希槽和数据存储节点。该系统的实施方式结构简单、扩展性强。

权利要求 :

1.一种分布式数据存储系统,其特征在于,所述系统包括:数据存储节点,用于存储代理节点发送的待存储数据,各所述数据存储节点包括多个用于映射不同键值信息的哈希槽,所述待存储数据包括键值信息和数据信息;

中心管理节点,用于存储记录信息,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,其中,所述中心管理节点与各所述数据存储节点连接以获取所述记录信息;

所述代理节点,用于接收客户端发送的待存储数据,根据所述中心管理节点的记录信息确定与所述待存储数据对应的哈希槽和数据存储节点。

2.根据权利要求1所述的分布式数据存储系统,其特征在于,所述代理节点还用于:根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;

若是,则保持数据存储节点数目不变;

若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。

3.根据权利要求2所述的分布式数据存储系统,其特征在于,所述代理节点进一步用于:判断是否存在负载量大于所述阈值范围的最大值的数据存储节点;

若是,则增加至少一个数据存储节点;

判断是否存在负载量小于所述阈值范围的最小值的数据存储节点;

若是,则移除至少一个数据存储节点。

4.根据权利要求2或3所述的分布式数据存储系统,其特征在于,当增加至少一个数据存储节点时,则将各个原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配;

当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配。

5.根据权利要求4所述的分布式数据存储系统,其特征在于,所述系统用于云计算环境;以及所述系统还包括:资源管理节点,用于为所述系统分配云计算资源;

所述代理节点进一步用于从所述资源管理节点获取云计算资源。

6.一种基于权利要求1-5任意一项所述的分布式数据存储系统实现的分布式数据存储方法,其特征在于,所述方法包括:接收客户端发送的待存储数据,其中,所述待存储数据包括键值信息和数据信息;

根据中心管理节点存储的记录信息,确定与所述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,其中,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各所述数据存储节点包括多个用于映射键值信息的哈希槽;

根据所述键值信息,将所述待存储数据存储到所述第一数据存储节点。

7.根据权利要求6所述的分布式数据存储方法,其特征在于,所述方法还包括:根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;

若是,则保持数据存储节点数目不变;

若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。

8.根据权利要求6或7所述的分布式数据存储方法,其特征在于,所述增加/移除数据存储节点,包括:当存在负载量大于所述阈值范围的最大值的数据存储节点时,则增加至少一个数据存储节点;

当存在负载量小于所述阈值范围的最小值的数据存储节点时,则移除至少一个数据存储节点。

9.根据权利要求7所述的分布式数据存储方法,其特征在于,所述重新分配各数据存储节点的哈希槽,并更新所述记录信息,包括:当增加至少一个数据存储节点时,则将原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息;

当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息。

10.根据权利要求9所述的分布式数据存储方法,其特征在于,所述方法用于云计算环境;以及所述方法还包括:从资源管理节点获取云计算资源。

11.一种分布式数据存储装置,其特征在于,所述装置包括:接收模块,配置用于接收客户端发送的待存储数据,其中,所述待存储数据包括键值信息和数据信息;

确定模块,配置用于根据中心管理节点存储的记录信息,确定与所述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,其中,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各所述数据存储节点包括多个用于映射键值信息的哈希槽;

存储模块,配置用于根据所述键值信息,将所述待存储数据存储到所述第一数据存储节点。

12.根据权利要求11所述的分布式数据存储装置,其特征在于,所述装置还包括:判断模块,配置用于根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;

若是,则保持数据存储节点数目不变;

若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。

13.根据权利要求11或12所述的分布式数据存储装置,其特征在于,所述判断模块进一步配置用于:当存在负载量大于所述阈值范围的最大值的数据存储节点时,则增加至少一个数据存储节点;

当存在负载量小于所述阈值范围的最小值的数据存储节点时,则移除至少一个数据存储节点。

14.根据权利要求12所述的分布式数据存储装置,其特征在于,所述判断模块进一步配置用于:当增加至少一个数据存储节点时,则将原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息;

当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息。

15.根据权利要求14所述的分布式数据存储装置,其特征在于,所述装置用于云计算环境;以及所述装置还包括:获取模块,配置用于从资源管理节点获取云计算资源。

说明书 :

分布式数据存储系统、方法和装置

技术领域

[0001] 本申请涉及计算机技术领域,尤其涉及分布式数据存储系统、方法和装置。

背景技术

[0002] 目前,业内通常采用分布式数据存储系统进行数据存储,分布式数据存储系统既具有集群系统的可扩/缩容的特性,又可以进行分布式操作。因此,在数据存储量发生变化时,分布式数据存储系统能够通过增加/移除集群中的数据存储节点实现对分布式数据存储系统的扩/缩容。
[0003] 在现有的分布式数据存储系统中,通常可以采用一致性哈希算法对集群进行分片,而后对键值对数据(key-value)等进行存储。但是此种存储系统在存储数据量发生变化而需要增加/移除数据存储节点时,由于一致性哈希算法的限制,使得相邻存储节点的键值(key)映射发生的变化,容易导致数据的丢失,集群扩展性差。而更有甚者,有些分布式数据存储系统不存在中心管理机制,系统的结构复杂。

发明内容

[0004] 本申请的目的在于提出一种改进的分布式数据存储系统、方法和装置,来解决以上背景技术部分提到的技术问题。
[0005] 第一方面,本申请提供了一种分布式数据存储系统,所述系统包括:数据存储节点,用于存储代理节点发送的待存储数据,各所述数据存储节点包括多个用于映射不同键值信息的哈希槽,所述待存储数据包括键值信息和数据信息;中心管理节点,用于存储记录信息,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量;所述代理节点,用于接收客户端发送的待存储数据,根据所述中心管理节点的记录信息确定与所述待存储数据对应的哈希槽和数据存储节点。
[0006] 在一些实施例中,所述代理节点还用于:根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;若是,则保持数据存储节点数目不变;若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。
[0007] 在一些实施例中,所述代理节点进一步用于:判断是否存在数据存储节点的负载量大于所述阈值范围的最大值;若是,则增加至少一个数据存储节点;判断是否存在数据存储节点的负载量小于所述阈值范围的最小值;若是,则移除至少一个数据存储节点。
[0008] 在一些实施例中,当增加至少一个数据存储节点时,则将各个原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配;当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配。
[0009] 在一些实施例中,所述系统用于云计算环境;以及所述系统还包括:资源管理节点,用于为所述系统分配云计算资源;所述代理节点进一步用于从所述资源管理节点获取云计算资源。
[0010] 第二方面,本申请提供了一种分布式数据存储方法,所述方法包括:接收客户端发送的待存储数据,其中,所述待存储数据包括键值信息和该哈希槽所在的第一数据信息;根据中心管理节点存储的记录信息,确定与所述键值信息对应的哈希槽和数据存储节点,其中,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各所述数据存储节点包括多个用于映射键值信息的哈希槽;根据所述键值信息,将所述待存储数据存储到所述第一数据存储节点。
[0011] 在一些实施例中,所述方法还包括:根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;若是,则保持数据存储节点数目不变;若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。
[0012] 在一些实施例中,所述增加/移除数据存储节点,包括:当存在负载量大于所述阈值范围的最大值的数据存储节点时,则增加至少一个数据存储节点;当存在负载量小于所述阈值范围的最小值的数据存储节点时,则移除至少一个数据存储节点。
[0013] 在一些实施例中,所述重新分配各数据存储节点的哈希槽,并更新所述记录信息,包括:当增加至少一个数据存储节点时,则将原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息;当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息。
[0014] 在一些实施例中,所述方法用于云计算环境;以及所述方法还包括:从资源管理节点获取云计算资源。
[0015] 第三方面,本申请提供了一种分布式数据存储装置,所述装置包括:接收模块,配置用于接收客户端发送的待存储数据,其中,所述待存储数据包括键值信息和数据信息;确定模块,配置用于根据中心管理节点存储的记录信息,确定与所述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,其中,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各所述数据存储节点包括多个用于映射键值信息的哈希槽;存储模块,配置用于根据所述键值信息,将所述待存储数据存储到所述第一数据存储节点。
[0016] 在一些实施例中,所述装置还包括:判断模块,配置用于根据所述记录信息中的各所述数据存储节点的负载量,判断各所述数据存储节点的负载量是否在预设的阈值范围内;若是,则保持数据存储节点数目不变;若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新所述记录信息。
[0017] 在一些实施例中,所述判断模块进一步配置用于:当存在负载量大于所述阈值范围的最大值的数据存储节点时,则增加至少一个数据存储节点;当存在负载量小于所述阈值范围的最小值的数据存储节点时,则移除至少一个数据存储节点。
[0018] 在一些实施例中,所述判断模块进一步配置用于:当增加至少一个数据存储节点时,则将原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息;当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配,并更新所述记录信息。
[0019] 在一些实施例中,所述装置用于云计算环境;以及所述装置还包括:获取模块,配置用于从资源管理节点获取云计算资源。
[0020] 本申请提供的分布式数据存储系统、方法和装置,代理节点根据中心管理节点中存储的哈希槽在各数据存储节点的分布情况、数据存储节点中的哈希槽与各键值信息的映射关系,以及待存储数据的键值信息,确定待存储数据对应的哈希槽和数据存储节点,最后存储所述待存储数据,本申请的分布式数据存储系统结构简单且扩展性强。

附图说明

[0021] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0022] 图1是根据本申请的分布式数据存储系统一个实施例的架构图;
[0023] 图2是根据本申请的分布式数据存储方法一个实施例的流程图;
[0024] 图3是根据本申请的分布式数据存储方法又一个实施例的流程图;
[0025] 图4是根据本申请的分布式数据存储装置的一个实施例的结构示意图;
[0026] 图5是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。

具体实施方式

[0027] 下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
[0028] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0029] 图1示出了可以应用本申请的分布式数据存储系统一个实施例的示例性系统架构100。
[0030] 如图1所示,系统架构100可以包括客户端101、代理节点102、数据存储节点103和中心管理节点104。这里,客户端101、代理节点102、数据存储节点103和中心管理节点104之间通过有线连接或无线连接的方式进行通信。
[0031] 在本实施例中,上述数据存储节点103用于存储代理节点102发送的待存储数据。其中,上述各数据存储节点103包括多个用于映射不同键值信息的哈希槽,上述待存储数据包括键值信息和数据信息。
[0032] 在本实施例的一些可选的实现方式中,每一个上述数据存储节点103可以由一个主节点和多个从节点组成,并且每个数据存储节点103的主节点和从节点存储内容等都相同。因此,当主节点出现故障而宕机时,即可以启动一个从节点代替主节点,这种数据存储节点103可以提高分布式数据存储系统的容灾性。
[0033] 在本实施例的一些可选的实现方式中,上述待存储数据可以称之为key-value数据,其中键值信息可以为key,数据信息可以为value。上述哈希槽(也可以称为hash slot)可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述数据存储节点103可以包括一部分上述哈希槽,并且使得每一个上述数据存储节点103中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。并且,这里的相等并非指各数据存储节点103中的哈希槽的个数完全一致,而是在一定程度上地相等,例如,如果上述集群是由3个数据存储节点103构成,那么各数据存储节点103中的哈希槽可以为分别为5500、5500、5384个;又如果上述集群是由1000个数据存储节点103构成,那么各数据存储节点103中的哈希槽可以为16或17个。
[0034] 在本实施例的一些可选的实现方式中,图1中数据存储节点103的数目仅仅是示例性的。事实上,根据需要该分布式数据存储系统100可以包括n个数据存储节点103,其中,n为小于16385的自然数。进一步的,根据实际的需要还可以动态调整(例如,增加或减少)系统中数据存储节点103的数目。
[0035] 在本实施例中,上述中心管理节点104用于存储记录信息,其中,上述记录信息包括各数据存储节点103所构成的集群的网络拓扑关系、哈希槽在各数据存储节点103的分布情况以及各数据存储节点103的负载量。
[0036] 在本实施例的一些可选的实现方式中,上述中心管理节点104与各数据存储节点103连接,以获取各数据存储节点103所构成的集群的网络拓扑关系、各数据存储节点中哈希槽的分布情况、各数据存储节点最大负载量和当前负载量,并存储上述获取的信息作为记录信息。例如,网络拓扑关系可以包括各数据存储节点103中上的主节点和从节点的关系、各数据存储节点103之间的关系等。这种通过中心管理节点104获取集群上述信息的方法与以集群中的数据存储节点相互通信获取上述信息的方法相比,其通信成本更低,容灾能力更强。
[0037] 在本实施例的一些可选的实现方式中,当上述数据存储节点103的数目发生改变时,中心管理节点104中的记录信息也会相应地更新,以保证代理节点102可以实时的获取各数据存储节点103的准确的信息。
[0038] 在本实施例中,上述代理节点102用于接收客户端101发送的待存储数据,根据上述中心管理节点104的记录信息确定与上述待存储数据对应的哈希槽和数据存储节点103。
[0039] 在本实施例的一些可选的实现方式中,上述代理节点102的数目仅仅是示例性的,并且代理节点102可以分别与上述客户端101、数据存储节点103和中心管理节点104连接。其中,上述客户端101用于接收数据存储的处理指令,并向代理节点102发送待存储数据。该代理节点102获取上述待存储数据中的键值信息,之后可以使用键的CRC16编码对16384取模来计算该键值信息所属的哈希槽,而后从上述中心管理节点104获取计算出的哈希槽和该哈希槽所在的数据存储节点,最后存储上述待存储数据。
[0040] 在本实施例的一些可选的实现方式中,上述代理节点102还可以用于根据上述中心管理节点104的记录信息中的各数据存储节点103的负载量,判断各数据存储节点103的负载量是否在预设的阈值范围内。若是,则保持数据存储节点数目不变,若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新上述记录信息。这里,上述代理节点102可以预先设置数据存储节点103的负载量的阈值范围,之后代理节点102可以从上述中心处理节点104中获取各数据存储节点103的负载量,并将其与上述阈值范围相比较,如果对比结果为各数据存储节点103的负载量均在阈值范围内,则可以保持数据存储节点103的数目不变,否则可以增加/移除数据存储节点103。当增加/移除数据存储节点103时,数据存储节点103所构成的集群的网络拓扑关系、哈希槽在各数据存储节点103的分布情况以及各数据存储节点103的负载量均会发生改变,这时中心管理节点104可以根据上述改变更新其存储的记录信息。
[0041] 在本实施例的一些可选的实现方式中,上述代理节点102还可以进一步用于判断是否存在负载量大于上述阈值范围的最大值的数据存储节点103;若是,则可以增加至少一个数据存储节点103;判断是否存在负载量小于上述阈值范围的最小值的数据存储节点103;若是,则可以移除至少一个数据存储节点103。
[0042] 在本实施例的一些可选的实现方式中,当增加至少一个数据存储节点103时,则可以将各个原数据存储节点103中的部分哈希槽转移到新增加的数据存储节点103中,使得哈希槽在各数据存储节点103中平均分配,其中,被转移的哈希槽包括已经存储在其中的数据。例如,上述分布式数据存储系统中包括A、B、C三个数据存储节点103,并且数据存储节点A包含第1~第5500哈希槽,数据存储节点B包含第5501~第11000哈希槽,数据存储节点C包含第11001~第16384哈希槽,当上述代理节点102判断出存在数据存储节点的负载量大于阈值范围的最大值时,则可以增加一个数据存储节点D,这时可以从原数据存储节点A、B、C中分别取出一部分哈希槽到新增加的数据存储节点D中,以使数据存储节点A、B、C、D中的哈希槽的数量大致相等。
[0043] 在本实施例的一些可选的实现方式中,当移除至少一个数据存储节点103时,则可以将移除的数据存储节点103中的哈希槽转移到剩余的数据节点103中,使得哈希槽在各数据存储节点中平均分配,其中,被转移的哈希槽包括已经存储在其中的数据。例如,分布式数据存储系统中包括A、B、C三个数据存储节点103时,并且数据存储节点A包含第1~第5500哈希槽,数据存储节点B包含第5501~第11000哈希槽,数据存储节点C包含第11001~第16384哈希槽,当上述代理节点102判断出存在数据存储节点的负载量小于阈值范围的最小值时,则可以移除一个数据存储节点,假设移除的是数据存储节点C,这时可以将数据存储节点C中的哈希槽转移到数据存储节点A、B中,以使数据存储节点A、B中的哈希槽的数量大致相等。
[0044] 在本实施例的一些可选的实现方式中,本申请的分布式数据存储系统100可以用于云计算环境。当该分布式数据存储系统100用于云计算环境时,则可以增加资源管理节点。该资源管理节点可以为上述系统分配云计算资源,而上述代理节点102可以进一步用于从该资源管理节点获取云计算资源。
[0045] 需要指出的是,上述客户端101、代理节点102、数据存储节点103和中心管理节点104之间的连接方式可以是有线连接方式,也可以是无线连接方式。这里,无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线连接方式。
[0046] 在本申请上述实施例提供的分布式数据存储系统,代理节点102可以根据中心管理节点104中存储的哈希槽在各数据存储节点103的分布情况、数据存储节点103中的哈希槽与各键值信息的映射关系,以及待存储数据的键值信息,确定待存储数据对应的哈希槽和数据存储节点103,最后存储上述待存储数据,本实施例中的分布式数据存储系统结构简单且扩展性强。
[0047] 继续参考图2,其示出了根据本申请的分布式数据存储方法的一个实施例的流程200。本实施例所提供的分布式数据存储方法是基于图1中的分布式数据存储系统实现的,可以由代理节点执行。该方法包括以下步骤:
[0048] 步骤201,接收客户端发送的待存储数据。
[0049] 在本实施例中,分布式数据存储方法运行于其上的电子设备(例如图1所示的代理节点)可以接收客户端发送的待存储数据,其中,待存储数据包括键值信息和数据信息。在实施例中,上述待存储数据可以为key-value数据,而其所包括键值信息和数据信息可以分别对应其中的key和value。
[0050] 步骤202,根据中心管理节点存储的记录信息,确定与键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点。
[0051] 在本实施例中,上述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽(也可以称之为hash slot)在各数据存储节点的分布情况以及各数据存储节点的负载量。这里,各数据存储节点包括多个用于映射键值信息的哈希槽。上述电子设备基于步骤201中得到的待存储数据的键值信息计算其所属的哈希槽,然后从中心管理节点存储的记录信息中确定该待存储数据的键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点。
[0052] 在本实施例的一些可选的实现方式中,上述电子设备可以预先建立与上述中心管理节点的联系。其中,中心管理节点用于管理各数据存储节点构成的集群,获取集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量。
[0053] 在本实施例的一些可选的实现方式中,例如,可以将键值空间分割为16384个哈希槽,而每一个上述数据存储节点可以包括一部分上述哈希槽。这里的哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系,从而使得待存储数据存储到特定的位置。上述电子设备可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
[0054] 步骤203,根据键值信息,将待存储数据存储到第一数据存储节点。
[0055] 在本实施例中,上述电子设备基于步骤202获取的上述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,之后将上述待存储数据存储到其键值信息所对应的哈希槽所在的第一数据存储节点。
[0056] 本申请的上述实施例所提供的分布式数据存储方法,通过计算待存储数据的键值信息所属的哈希槽,而后从中心管理节点的记录信息获取该哈希槽所在的第一数据存储节点,最后完成数据存储,该方法使得数据存储更为简便、准确。
[0057] 进一步参考图3,其示出了根据本申请的分布式数据存储方法的又一个实施例的流程300。该分布式数据存储方法的流程300,包括以下步骤:
[0058] 步骤301,接收客户端发送的待存储数据。
[0059] 在本实施例中,分布式数据存储方法运行于其上的电子设备(例如图1所示的代理节点)可以接收客户端发送的待存储数据,其中,待存储数据包括键值信息和数据信息。在实施例中,上述待存储数据可以为key-value数据,而其所包括键值信息和数据信息可以分别对应其中的key和value。
[0060] 步骤302,判断各数据存储节点的负载量是否在预设的阈值范围内。
[0061] 在本实施例中,上述电子设备可以预先给数据存储节点设置一个阈值范围。上述电子设备从中心管理节点获取各数据存储节点的负载量,之后将各数据存储节点的负载量与上述阈值范围相比较,若存在负载量不在上述阈值范围内的数据存储节点,则转到步骤303,若各数据存储节点的负载量均在上述阈值范围内,则转到步骤304。
[0062] 步骤303,增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新记录信息。
[0063] 在本实施例中,基于步骤302判断的存在负载量不在上述阈值范围内的数据存储节点,表明上述集群中数据存储节点不足或多余,则需要增加或移除至少一个数据存储节点。进一步的,当数据存储节点的数目发生改变时,由数据存储节点构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布以及各数据存储节点的负载量均会发生改变,这时中心管理节点可以根据上述改变更新其存储的记录信息。
[0064] 在本实施例中,本步骤可以通过如下步骤确定是移除数据存储节点,还是增加数据存储节点:
[0065] 首先,如果确定存在负载量大于阈值范围的最大值的数据存储节点,表明上述集群中数据存储节点不足,则可以增加数据存储节点。进一步的,还可以根据当前数据存储节点的负载量和上述阈值范围的最大值与最小值等,确定最后需要增加的数据存储节点的数量。并且,当增加了数据存储节点以后,上述电子设备将原数据存储节点的部分哈希槽迁移到新增加的数据存储节点中,以使哈希槽在各数据存储节点中平均分配,之后将中心管理节点的记录信息更新为增加数据存储节点后的记录信息。需要说明的是,这里的平均不是绝对的平均,而是在一定程度上地平均,例如,如果上述集群是由1000个数据存储节点构成,那么各数据存储节点中的哈希槽可以为16或17个。
[0066] 其次,如果确定存在负载量小于阈值范围最小值的数据存储节点,表明上述集群中数据存储节点过多,则可以移除部分数据存储节点。进一步的,还可以根据当前数据存储节点的负载量和上述阈值范围的最大值与最小值等,确定最后需要移除的数据存储节点的数量。并且,当移除了数据存储节点以后,上述电子设备将移除的数据存储节点的全部哈希槽迁移到上述集群中剩余的数据存储节点中,并且确定哈希槽在各数据存储节点中平均分配,之后将中心管理节点的记录信息更新为移除数据存储节点后的记录信息。需要说明的是,这里的平均不是绝对的平均,而是在一定程度上地平均。
[0067] 步骤304,保持数据存储节点数目不变。
[0068] 在本实施例中,基于步骤302判断的各数据存储节点的负载量均在上述阈值范围内,则上述电子设备可以保持数据存储节点数目不变,中心管理节点存储的记录信息也不变。
[0069] 步骤305,根据中心管理节点存储的记录信息,确定与键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点。
[0070] 在本实施例中,上述电子设备根据中心管理节点所存储的哈希槽在各数据存储节点的分布情况等记录信息可以确定与上述待存储数据的键值信息所对应的哈希槽,以及该哈希槽所在的第一数据存储节点,以便于将上述待存储数据存储到上述第一数据存储节点。
[0071] 步骤306,根据键值信息,将待存储数据存储到第一数据存储节点。
[0072] 在本实施例中,上述电子设备可以根据待存储数据的键值信息将其存储到步骤305所确定的第一数据存储节点。
[0073] 从图3中可以看出,与图2对应的实施例相比,本实施例中的分布式数据存储方法的流程300突出了增加/移除数据存储节点并更新记录信息的步骤。由此,本实施例描述的方案在增加/移除数据存储节点时,可以通过转移哈希槽来确保数据存储节点中存储的数据不被丢失。
[0074] 进一步参考图4,作为对上述各图所示方法的实现,本申请提供了一种分布式数据存储装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0075] 如图4所示,本实施例所述的分布式数据存储装置400包括:接收模块401、确定模块402和存储模块403。其中,接收模块401配置用于接收客户端发送的待存储数据,其中,上述待存储数据包括键值信息和数据信息;确定模块402配置用于根据中心管理节点存储的记录信息,确定与上述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,其中,上述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各数据存储节点包括多个用于映射键值信息的哈希槽;存储模块403配置用于根据上述键值信息,将上述待存储数据存储到上述第一数据存储节点。
[0076] 在本实施例的一些可选的实现方式中,上述分布式数据存储装置400还包括:判断模块(图中未示出),配置用于根据上述记录信息中的各数据存储节点的负载量,判断各数据存储节点的负载量是否在预设的阈值范围内;若是,则保持数据存储节点数目不变;若否,则增加/移除数据存储节点,重新分配各数据存储节点的哈希槽,并更新上述记录信息。
[0077] 在本实施例的一些可选的实现方式中,上述判断模块(图中未示出)进一步配置用于:当存在负载量大于上述阈值范围的最大值的数据存储节点时,则增加至少一个数据存储节点;当存在负载量小于上述阈值范围的最小值的数据存储节点时,则移除至少一个数据存储节点。
[0078] 在本实施例的一些可选的实现方式中,上述判断模块(图中未示出)具体配置用于:当增加至少一个数据存储节点时,则将原数据存储节点中的部分哈希槽转移到新增加的数据存储节点中,使得哈希槽在各数据存储节点中平均分配,并更新上述记录信息;当移除至少一个数据存储节点时,则将移除的数据存储节点中的哈希槽转移到剩余的数据节点中,使得哈希槽在各数据存储节点中平均分配,并更新上述记录信息。
[0079] 在本实施例的一些可选的实现方式中,当上述分布式数据存储装置400用于云计算环境时,该装置还包括:获取模块(图中未示出),配置用于从资源管理节点获取云计算资源。
[0080] 本领域技术人员可以理解,上述分布式数据存储装置400还包括一些其他公知结构,例如处理器、存储器等,为了不必要地模糊本公开的实施例,这些公知的结构在图4中未示出。
[0081] 下面参考图5,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统500的结构示意图。
[0082] 如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
[0083] 以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
[0084] 特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。
[0085] 附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0086] 描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块、确定模块和存储模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,接收模块还可以被描述为“接收客户端发送的待存储数据的模块”。
[0087] 作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:接收模块,配置用于接收客户端发送的待存储数据,其中,所述待存储数据包括键值信息和数据信息;确定模块,配置用于根据中心管理节点存储的所述记录信息,确定与所述键值信息对应的哈希槽和该哈希槽所在的第一数据存储节点,其中,所述记录信息包括各数据存储节点所构成的集群的网络拓扑关系、哈希槽在各数据存储节点的分布情况以及各数据存储节点的负载量,各所述数据存储节点包括多个用于映射键值信息的哈希槽;存储模块,配置用于根据所述键值信息,将所述待存储数据存储到所述第一数据存储节点。
[0088] 以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。