动态数据存取方法及系统与流程

文档序号:12124379阅读:413来源:国知局
动态数据存取方法及系统与流程

本发明涉及一种数据存取方法及系统,特别设计一种基于一致性哈希算法的负载均衡的动态数据存取方法及系统。



背景技术:

在日常工作和工业生产中,需要经常和数据打交道,并把数据保存到关系型数据库中。随着数据量的越来越大,会对数据库资源造成很大的压力。因此必须要分库存储,这时需要考虑如何把数据均匀地分配到多个数据库之中,并且数据库的数量很可能会变动,那么当数据库数量变动时,在不同数据库之间的数据迁移必不可少。如何实现数据均匀分布到多个数据库中,且数据库发生变动时迁移的数据较少呢?可以为每个数据库指定一定的存储范围,但是这种方式太过于死板,并且很难实现负载均衡;也可以按照数据库的数量取模,动态地计算应该分配到哪个数据库中,但是当数据库的数量发生变化时,显然大量原先存储的数据需要在数据库之间迁移,进而对数据服务器造成巨大冲击,因此不能用在数据库数量经常变动的情况。



技术实现要素:

本发明要解决的技术问题是为了克服现有技术中关系型数据库存取大量数据对数据库资源压力大、负载不均衡、数据迁移量比较大的缺陷,提供一种基于一致性哈希算法的负载均衡的动态数据存取方法及系统,结合关系型数据库,一致性哈希算法,实现对数据的存取以及动态的迁移,其结构简单、配置灵活、维护成本低、负载均衡,并且系统结构变化时数据迁移量比较少。

本发明是通过下述技术方案来解决上述技术问题的:

一种动态数据存取方法,其特点在于,包括以下步骤:

S1:读取数据库配置信息以初始化一致性哈希环,该一致性哈希环包括多个实际节点,每个实际节点对应于一数据库;

S2:获取待存取数据的存取条件的哈希值;

S3:获得该一致性哈希环上大于等于该哈希值的最近节点;

S4:将待存取数据对应于该最近节点相应的数据库。

一致性哈希环是由-231到231-1个整数组成的环,当数据达到231-1时,再加1即为-231,对每个数据库名称取哈希值,并且控制哈希值在-231到231-1的范围之内,那么每个数据库名称对应的哈希值就落到了一致性哈希环上。

在本发明的技术方案中,在存取数据时,首先获取存取数据条件的哈希值,然后在一致性哈希环上沿着顺时针方向从此哈希值出发,直到遇见第一个节点,即为该数据存取时对应的数据库的节点。当保存数据的数据库的数量发生变化时,通过修改数据库配置信息,重新初始化一致性哈希环,由于对于某个固定值的哈希值是不变的,一致性哈希环上只会减少或者增加节点。这样需要迁移的数据量比较少,从而对数据库资源访问的压力也大大减少。

优选地,步骤S1还包括:为每个实际节点分配多个虚拟节点;

步骤S3中的最近节点为大于等于该哈希值的最近的虚拟节点。

通过引入虚拟节点改善哈希算法,为每个实际节点分配一定数量的虚拟节点,这样就能抑制节点分布不均匀,从而达到相对的负载均衡。具体来说,通常存储数据的数据库的数量不超过10个,其相对应的哈希值不能均匀的落在一致性哈希环上,为了使实际节点更均匀的分布到一致性哈希环上,所以把每个实际节点虚拟成多个虚拟节点。关于虚拟节点的分配方式,其目的就是使虚拟节点均匀的分布在一致性哈希环上,该技术方案中是通过把实际节点的名称加000至999的不同随机数,形成虚拟节点的名称,然后和用相同的实际节点相同的方法生成哈希值,即:MD5的值后再根据Java自带的求取哈希值的方法生成哈希值。

优选地,该数据库配置信息包含:数据库名称、数据表、上一版数据库名称和是否正在迁移数据标识。

优选地,步骤S1中通过数据库名称来初始化该一致性哈希环。

优选地,步骤S2中通过将数据库名称和存取条件求取MD5的值后再根据Java自带的求取哈希值的方法生成哈希值。

优选地,通过在实际节点名称加上不同的数据数字组成字符串、然后求哈希值来获得虚拟节点。

本发明还提供一种动态数据存取系统,其特点在于,其包括多个数据库、多个数据库的配置信息以及一致性哈希环,以及

读取装置,用于读取数据库配置信息以初始化一致性哈希环,该一致性哈希环包括多个实际节点,每个实际节点对应于一数据库;

计算装置,用于获取待存取数据的存取条件的哈希值;

遍历装置,用于获得该一致性哈希环上大于等于该哈希值的最近节点;

映射装置,用于将待存取数据对应于该最近节点相应的数据库。

优选地,该动态数据存取系统还包括分配装置,用于为每个实际节点分配多个虚拟节点;

其中,最近节点为大于等于该哈希值的最近的虚拟节点。

优选地,该数据库配置信息包含:数据库名称、数据表、上一版数据库名称和是否正在迁移数据标识。

其中,数据库名称:对应真实的数据库,包含多个,用来初始化一致性哈希环;

数据表:每个数据库名称对应的数据库都包含相同的表,用来保存数据;

上一版数据库名称:主要用来在数据库配置修改过之后,进行数据迁移;

是否正在迁移数据标识:标示数据库之间的数据是否正在迁移,当数据库的个数修改或者名称改变时,需要在数据库之间迁移数据。

优选地,数据库为关系型数据库。

在符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实例。

本发明的积极进步效果在于:本动态数据存取方法及系统,基于一致性哈希算法,结构简单,配置灵活,维护成本低,可以很好地实现负载均衡。并且在数据库配置信息改变时重新初始化一致性哈希环,通过和上一个一致性哈希环相比较可以快速地定位需要迁移的数据,由于对于某个固定值其相应的哈希值是不变的,因此当存取结构改变时需要迁移的数据量比较少。

附图说明

图1为本发明一实施例的数据存取流程图。

图2为本发明一实施例的动态数据存取系统的结构框图。

图3为本发明一应用实例的结构框图。

图4为本发明一应用实例的一致性哈希环。

图5为本发明一应用实例的一致性哈希环从两个节点增加到三个节点的示意图。

具体实施方式

下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。

参考图1-图3,分别介绍本发明所述的动态数据存取方法和系统。

该动态数据存取方法包括:

S1:读取数据库配置信息以初始化一致性哈希环,该一致性哈希环包括多个实际节点,每个实际节点对应于一数据库;

S2:获取待存取数据的存取条件的哈希值;

S3:获得该一致性哈希环上大于等于该哈希值的最近节点;

S4:将待存取数据对应于该最近节点相应的数据库。

该动态数据存取系统,其包括多个数据库1、多个数据库的配置信息2以及一致性哈希环3,以及

读取装置4,用于读取数据库配置信息以初始化一致性哈希环,该一致性哈希环包括多个实际节点,每个实际节点对应于一数据库;

计算装置5,用于获取待存取数据的存取条件的哈希值;

遍历装置6,用于获得该一致性哈希环上大于等于该哈希值的最近节点;

映射装置7,用于将待存取数据对应于该最近节点相应的数据库。

首先把存储数据的多个关系型数据库的信息配置到单独的表里面,通过数据库配置信息初始化一致性哈希环,数据在存取时,对存取条件取哈希值,沿顺时针方向找到大于等于此哈希值并离的最近的节点,即为该条数据需要存储的数据库。即在一致性哈希环上沿着顺时针方向从此哈希值出发,直到遇见第一个节点,即为该数据存取时对应的数据库的节点。当保存数据的数据库的数量发生变化时,通过修改数据库配置信息,重新初始化一致性哈希环,由于对于某个固定值的哈希值是不变的,一致性哈希环上只会减少或者增加节点。这样需要迁移的数据量比较少,从而对数据库资源访问的压力也大大减少。通过引入虚拟节点改善哈希算法,为每个实际节点分配一定数量的虚拟节点,这样就能抑制节点分布不均匀,从而达到相对的负载均衡。

下面继续参考图3-图5,以一个具体的例子,进一步产生本发明的技术方案和技术效果。

如图4所示一致性哈希环的大小为4字节的整数的范围,沿顺时针方向递增,当数据达到231-1时,再加1即为-231。这样首尾就组成了一个环。通常存储数据的数据库的数量不超过10个,其相对应的哈希值落在一致性哈希环上,显然不能均匀的分布到哈希环上,这样就产生了虚拟节点。通过把每个节点虚拟一定数量的节点,更能实现在一致性哈希环上的均匀分布。当数据要存取时,首先求取数据存取条件的哈希值,然后沿顺时针方向寻找大于等于该哈希值且离此值最近的节点即为对应的数据库。如节点n1沿顺时针方向寻找到大于等于该节点的最小节点即为A2,因此n1落到A对应的数据库上;节点n2沿顺时针方向寻找到大于等于该节点的最小节点为B3,n2落到B对应的数据库上;节点n3沿顺时针方向没有找到大于等于此节点的节点,那么就落到环的第一个节点B1上,n3落到B对应的数据库上。

由于数据库的虚拟节点不能完全均匀地分布在一致性哈希环上,因此该动态数据存取系统并不能完全实现数据均匀地分布到每个数据库上,其实也没有必要完全均匀分布,能够做到近似均匀分布就能满足实际需求。通过对大量的数据进行统计,可以得出影响负载均衡的几个因素:

如表1所示,当节点数量为5,每个节点对应100个虚拟节点时,在不同的实际数据量大小的情况下落在每个节点上的数量偏离平均值的百分比。由表1可知,随着实际数据量的增加数据分布的越均匀,实际数据量达到10万以后,实际数据量的大小对负载均衡的影响变得比较微小。

表1

如表2所示,当节点数量为3,实际数据量为100万时,不同的虚拟节点数量下落在每个节点上的数量偏离平均值的百分比。

表2

如表3所示,当节点数量为5,实际数据量为100万时,不同的虚拟节点数量下落在每个节点上的数量偏离平均值的百分比。

表3

如表4所示,当节点数量为10,实际数据量为100万时,不同的虚拟节点数量下落在每个节点上的数量偏离平均值的百分比。

表4

通过表2、表3、表4可知,在同样的虚拟节点数量下,实际节点的数量对负载均衡影响不大。单个实际节点对应的虚拟节点的数量越大,数据越能均匀地分布到实际节点上,当每个节点对应的虚拟节点的数量为10时,显然数据不能均匀分布,当虚拟节点数增加到100时,最大偏差达到百分之十左右,当虚拟节点数达到1000时,基本上在百分之五以下,因此影响负载均衡的关键因素是单个实际节点对应的虚拟节点的数量大小,虚拟节点的数量越大越能实现负载均衡。

如图5所示为哈希环上增加一个实际节点的变化示意图。在一致性哈希环上原来有两个节点,每个节点有三个虚拟节点,增加了一个节点C,其也包含三个虚拟节点。从图中可知,原先节点的位置是不变的,新增加的节点按照其哈希值落到一致性哈希环上。由于一致性哈希环上的节点发生了改变,需要对原先分布的数据进行迁移,原来B1到A2的数据落到A上,由于新增虚拟节点C2,那么B1到C2之间的数据应该从节点A迁移到节点C上,同理K2之间的数据应该由B迁移到C上,K3之间的数据应该由A迁移到C上。显然,由于大量实际数据可以认为是均匀地分布在一致性哈希环上,因此一致性哈希环上的节点发生变化时,需要迁移的数据是由节点在一致性哈希环上的分布决定的。

如表5所示,当100万实际数据量时,在不同的虚拟节点数量,实际节点由2增加到3,由3增加到4等情况下,需要迁移的数据量占全部实际数据量的百分比。

表5

由表5可知,当实际节点的数量变化时,实际节点的数量越大,需要迁移的数据量越小。而单个实际节点对应的虚拟节点数量对需要迁移的数据量影响不大。

如果采用取模的方式来决定数据要存储的数据库,那么每当数据库的数量变化时,原来的数据和数据库之间的对应关系也就无效了。因此需要对全部数据进行重新分配,对数据库资源造成了更大的压力。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1