一种分布式数据库系统中用户分布的方法、装置及系统
技术领域
本发明属于计算机领域,尤其涉及一种分布式数据库系统中用户分布的方法、装置及系统。
背景技术
分布式数据库系统是逻辑上属于同一系统,物理上分布在用计算机网络连接的多个节点(node)上的数据集合。节点在通讯网络中连接在一起,每个节点都是一个独立的数据库系统,拥有各自的数据库、中央处理机、终端,以及各自的局部数据库管理系统。在分布式数据库系统中,用户数据一般按用户分布在不同的节点数据库(DB)中,每次访问或修改用户数据时需要先定位用户数据所在的节点数据库,定位用户数据所在的节点数据库的信息是用户重要的状态数据。
目前,在用户注册时,如图1所示,业务服务器一般通过哈希(hash)算法对用户标识(id)进行转换得到一个节点数据库的id,该id就是用户数据所在的节点数据库的标识(DBid),并且该DBid与用户id相关,不需要保存。在这种方式中,对于固定的用户id,DBid也被固定,不可更改,难以保证每个节点数据库上的用户数据分布均衡,从而部分节点数据库由于分布的用户多而成为性能瓶颈,而部分节点数据库可能空闲,未被充分利用。同时,由于一个DBid同时与多个用户id相关,当用户或用户数据积累到一定程度,需要扩充节点数据库,或有新业务需求需要升级用户数据时,必须按照节点数据库进行升级或迁移,难以对单个用户数据进行升级或迁移,而且节点数据库升级或迁移数据时,该节点数据库对应的所有用户都需要停止业务,使得受影响的用户较多。
发明内容
本发明实施例的目的在于提供一种分布式数据库系统中用户分布的方法,旨在解决现有分布式数据库系统中不同节点数据库的用户数量分布不均衡的问题。
本发明实施例是这样实现的,一种分布式数据库系统中用户分布的方法,所述方法包括下述步骤:
获取当前系统中不同节点数据库的用户分布权重;
根据当前系统中不同节点数据库的用户分布权重,将用户均衡分布到不同的节点数据库上;
保存已分布用户的用户分布信息,所述用户分布信息包含已分布用户的用户标识信息,与所述用户标识信息对应的用户所在的节点数据库的标识信息,以及已分布用户的用户数据的当前状态信息;
所述用户分布信息通过位图bitmap方式保存;
当对用户数据进行升级或迁移时,修改用户分布信息中该用户数据的当前状态为维护状态,处于维护状态的用户数据禁止访问;
该用户数据升级或迁移完成后再将用户分布信息中该用户数据的状态修改为正常状态。
本发明实施例的另一目的在于提供一种分布式数据库系统中用户数据的访问方法,所述方法包括下述步骤:
根据所访问的用户数据的用户标识信息查询用户分布信息,获取所述用户数据所在的节点数据库的标识信息,并查询所述用户数据的当前状态信息;
当所述用户数据的当前状态信息为正常时,访问所述节点数据库的标识信息对应的节点数据库,获取所述用户标识信息对应的用户数据;
所述用户分布信息通过位图bitmap方式保存;
当对用户数据进行升级或迁移时,修改用户分布信息中该用户数据的当前状态为维护状态,处于维护状态的用户数据禁止访问;
该用户数据升级或迁移完成后再将用户分布信息中该用户数据的状态修改为正常状态。
本发明实施例的另一目的在于提供一种分布式数据库系统中用户分布的装置,所述装置包括:
用户分布控制单元,用于获取当前系统中不同节点数据库的用户分布权重,根据当前系统中不同节点数据库的用户分布权重,将用户均衡分布到不同的节点数据库上;以及
用户分布信息数据库,用于保存已分布用户的用户分布信息,所述用户分布信息包含已分布用户的用户标识信息,与所述用户标识信息对应的用户所在的节点数据库的标识信息,以及已分布用户的用户数据的当前状态信息;所述用户分布信息通过位图bitmap方式保存;当对用户数据进行升级或迁移时,修改用户分布信息中该用户数据的当前状态为维护状态,处于维护状态的用户数据禁止访问;该用户数据升级或迁移完成后再将用户分布信息中该用户数据的状态修改为正常状态。
本发明实施例的另一目的在于提供一种分布式数据库系统,包括多个节点数据库,所述系统还包括:
业务服务器,用于获取所述多个节点数据库的用户分布权重,根据所述多个节点数据库的用户分布权重,将用户均衡分布到不同的节点数据库上;以及
用户分布信息服务器,用于保存已分布用户的用户分布信息,所述用户分布信息包含已分布用户的用户标识信息,与所述用户标识信息对应的用户所在的节点数据库的标识信息,以及已分布用户的用户数据的当前状态信息;所述用户分布信息通过位图bitmap方式保存;当对用户数据进行升级或迁移时,修改用户分布信息中该用户数据的当前状态为维护状态,处于维护状态的用户数据禁止访问;该用户数据升级或迁移完成后再将用户分布信息中该用户数据的状态修改为正常状态。
本发明实施例根据当前系统中不同节点数据库的用户分布权重将用户分布到不同的节点数据库上,使得用户数据能够均衡分布,在用户数据进行升级或迁移时,仅影响该进行升级或迁移的用户,不会影响其他用户数据的访问,可以提高数据库的访问速度和效率。
附图说明
图1是现有技术提供的分布式数据库系统的网络结构示意图;
图2是本发明实施例提供的分布式数据库系统中用户分布装置的结构图;
图3是本发明实施例提供的分布式数据库系统的网络结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,根据当前系统中不同节点数据库的用户分布权重将用户均衡地分布到不同的节点数据库上。
作为本发明的一个实施例,可以根据节点数据库中已分布的用户数量确定对应的用户分布权重,将用户均衡地分布到不同的节点数据库上。
首先,记录系统中已分布的用户数量,以及每个节点数据库上已分布的用户数量。
在本发明实施例中,根据系统设置的最大用户数量和系统中节点数据库的数量,可以获得每个节点数据库允许分布的最大用户数量。同时,根据系统中已分布的用户数量,以及每个节点数据库上已分布的用户数量,可以获得系统中允许新增的用户数量,以及每个节点数据库允许新增的用户数量。
其次,计算每个节点数据库的用户分布权重。
作为本发明的一个实施例,将每个节点数据库允许新增的用户数量除以系统允许新增的用户数量,得到每个节点数据库的用户分布权重,该用户分布权重为一个比例,例如百分比。系统中所有节点数据库的用户分布权重的总和为100%。根据每个节点数据库对应的用户分布权重,可以得到对应的用户分布权重区间。如果一个节点数据库允许新增的用户数量多,则其用户分布权重就较大,用户分布权重区间也就较大,反之亦然。
假设系统中包含A、B、C、D、E五个节点数据库,系统设置允许分布的最大用户数量为200个,则每个节点数据库允许分布的最大用户数量为40个,系统中已有用户数量为100个,已分布的用户数量在A、B、C、D、E五个节点数据库上的分布、每个节点数据库上允许新增的用户数量、用户分布权重和用户分布权重区间分别如下表所示:
节点数据库 |
已分布的用户数量 |
允许新增的用户数量 |
用户分布权重 |
用户分布权重区间γ |
A |
10 |
30 |
0.3 |
0≤γ≤0.3 |
B |
20 |
20 |
0.2 |
0.3<γ≤0.5 |
C |
30 |
10 |
0.1 |
0.50<γ≤0.6 |
D |
40 |
0 |
|
|
E |
0 |
40 |
0.4 |
0.6<γ≤1 |
在用户注册时,产生一个与该用户的id对应的随机数(0~1)。然后,判断该随机数所属的节点数据库的用户分布权重区间,则将该用户分布到该用户分布权重区间对应的节点数据库上,例如产生的随机数为0.75,对应节点数据库E的用户分布权重区间,则将该用户分布到节点数据库E上。
在本发明的另一实施例中,也可以将每个节点数据库允许新增的用户数量作为其用户分布权重。根据每个节点数据库对应的用户分布权重,得到对应的用户分布权重区间,与上述示例相对应,此时已分布的用户数量在A、B、C、D、E五个节点数据库上的分布、每个节点数据库上允许新增的用户数量、用户分布权重和用户分布权重区间分别如下表所示:
节点数据库 |
已分布的用户数量 |
允许新增的用户数量 |
用户分布权重 |
用户分布权重区间γ |
A |
10 |
30 |
30 |
0≤γ≤30 |
B |
20 |
20 |
20 |
30<γ≤50 |
C |
30 |
10 |
10 |
50<γ≤60 |
D |
40 |
0 |
0 |
|
E |
0 |
40 |
40 |
60<γ≤100 |
在用户注册时,产生一个与该用户的id对应的随机数(0~100)。然后,判断该随机数所属的节点数据库的用户分布权重区间,则将该用户分布到该用户分布权重区间对应的节点数据库上,例如产生的随机数为75,对应节点数据库E的用户分布权重区间,则将该用户分布到节点数据库E上。
当然,在本发明实施例中,也可以根据节点数据库中已分布的用户数据量确定对应的用户分布权重。
在本发明另一实施例中,不同节点数据库的用户分布权重也可以根据节点的性能、访问频率等因素灵活设置,例如对于性能高的节点可以设置高的用户分布权重,以分布较多的用户,性能低的节点可以设置低的用户分布权重,以分布较少的用户;对于访问频率高的节点可以设置低的用户分布权重,以分布较少的用户,保证其访问性能,访问频率低的可以设置高的用户分布权重,以分布较多的用户。
通过上述方式,可以将用户数量均衡分布在系统中不同的节点数据库上。
为了更快的定位用户数据所在的节点数据库,在本发明实施例中单独保存用户分布信息,该用户分布信息包括用户id以及与用户id对应的DBid,还可以包括用户数据的当前状态信息,例如正常、升级、迁移等。
用户分布信息保存时可以采取列表、数据库等方式。为了保证信息的访问性能和效率,作为本发明的一个优选实施例,使用位图(bitmap)的形式保存用户分布信息。
当对用户数据进行升级或迁移时,修改用户分布信息中该用户数据的当前状态为维护状态,处于维护状态的用户数据禁止访问。该用户数据升级或迁移完成后再将用户分布信息中该用户数据的状态修改为正常状态,避免该用户数据所在的整个节点数据库进行升级或迁移,不会影响其他用户数据的访问。
当访问用户数据时,首先通过用户id查询用户分布信息,获得对应的存储用户数据的DBid,当用户分布信息中含有用户数据的当前状态信息时,还可以查询用户数据的当前状态,如果处于维护状态则访问失败。当用户数据允许访问时,到该DBid对应的节点数据库访问用户数据。
图2示出了本发明实施例提供的分布式数据库系统中用户分布装置的结构,为了便于说明仅示出了与本发明相关的部分。
当用户注册时,用户分布控制单元21获取当前系统中不同节点数据库的用户分布权重,按照当前系统中不同节点数据库的用户分布权重向用户分布一个与该用户的用户id对应的DBid,将系统中的用户数量均衡地分布到不同的节点数据库上。用户分布信息存储在用户分布信息数据库22中,用户分布信息包括用户id以及与用户id对应的DBid,还可以包括每个用户数据的当前状态信息。
当接收到访问请求时,用户访问控制单元23通过用户id查询用户分布信息数据库22,获得该用户id对应的存储用户数据的DBid,然后到该DBid对应的节点数据库访问用户数据。当系统对用户数据进行升级或迁移时,用户数据状态配置单元24修改用户分布信息数据库22中该用户数据的当前状态为维护状态,升级或迁移完成后,再将用户分布信息中该用户数据的当前状态修改为允许访问的正常状态。
在本发明的一个实施例中,该用户分布装置可以是内置于业务服务器运行的软件单元、硬件单元,或软硬件结合的单元。
作为本发明的另一实施例,为了保证用户分布信息的访问性能,用户分布信息数据库22也可以与用户分布控制单元21、用户访问控制单元23以及用户数据状态配置单元24独立,位于单独的用户分布信息服务器中,此时系统的网络结构如图3所示。
本发明实施例在用户时注册时充分考虑已有用户在节点数据库上的分布,使得用户能够均衡分布在系统中的节点数据库中,在用户数据进行升级或迁移时,仅影响该进行升级或迁移的用户,不会影响其他用户数据的访问,可以提高数据库的访问速度和效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。