一种分布式数据库主键生成的方法和系统技术方案

技术编号:15108967 阅读:106 留言:0更新日期:2017-04-09 00:21
本发明专利技术涉及一种分布式数据库主键生成的方法和系统,建立一种系统,在多机分布式环境中,保证各个节点都是对等的,各个节点通过自动协商来决定主键生成,也解决了集中式锁在高并发访问下的缺陷,达到了扩展性和性能的同时增强。本发明专利技术通过引入分布式环境中的多个对等节点间自动协商来决定分布式主键生成,能够有效的以节点协商方式解决因为集中式锁故障导致的分布式主键生成的整体瘫痪问题,使得分布式系统可以完全水平自由扩展,达到了性能上的极大增强。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别是涉及一种分布式数据库主键生成的方法和系统
技术介绍
随着互联网应用的不断发展,越来越多的应用系统部署朝着大规模、分布式、多机协同的方向发展。同时,所有项目中的数据库都需要选择一种主键生成的策略,用来完成唯一主键的生成工作。通常,数据库主键生成分为单机生成和分布式生成两种。单机生成是指在单台机器上生成主键,所有请求顺序执行,典型的方式是数据库自增ID。分布式生成则是指在多台机器上来生成主键。其中分布式生成主键的通常做法,一种是利用特殊的规则在不同的机器上生成互不重复的ID,典型的方式是生成GUID或者包括地域、机房、机器信息在内的自定义编码;还有一种是通过一个集中式锁的管理来实现分布式主键生成的唯一性,典型的方式是通过关系数据库锁或者可以加锁的内存缓存。关于第一种方法,虽然在特殊规则下可以生成不重复的ID编码,但由于编码本身的无规律性,这种编码会明显降低数据库主键索引的性能,同时因为字段通常比较长,需要占用更多的存储空间,如GUID是32个十六进制字符。关于第二种方法,虽然采用集中式的锁可以继续使用自增ID这种有益于索引和存储的方式,但集中式的锁会是整个系统的瓶颈,因为每次生成主键都需要对锁资源进行锁定互斥处理,需要协同的机器越多,对集中式锁的访问冲突就会越剧烈,降低了整体分布式环境的处理能力,也限制了多级协同的规模。同时,一旦集中式的锁出现故障,整个主键生成也将完全中断。因此如何解决分布式主键生成中集中式锁的缺陷就显得很有意义。数据库中的每张数据表都有一个主键字段来唯一标识一条记录,主键也会默认加入到索引中以提高数据库操作的效率。主键生成策略的首要一点是保证生成记录的唯一性,一般对于单个数据库实例的主键通常会按照某个ID自增完成,但在业务规模越来越大的情况下,单个数据库实例会由于满足不了需求而按照一定规则拆分成多个分布式的数据库实例,如果按照普通的自增是无法保证在分布式环境中的主键唯一性,在这种情况下就需要在分布式的环境中生成唯一的数据库主键,同时还要最大化的提高主键生成效率。
技术实现思路
本专利技术的目的在于:针对现有技术中存在的上述技术问题,提供了一种分布式数据库主键生成的方法,并且提供了基于该方法保证分布式主键唯一性生成的系统。本专利技术是通过以下技术方案实现的:一种分布式数据库主键生成的方法,在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。进一步,所述的各节点协商确定主键生成是基于一致性算法下。一种分布式数据库主键生成的系统,系统流程步骤如下:(1)任意节点在正常运行中;(2)某节点收到主键生成请求;(3)该节点启动主键预生成,生成一个唯一标识;具体地如下:如果某个节点收到某个主键的生成请求,则该节点先会根据主键标识和按照预定规则(如自增)生成的新主键ID值计算出一个在所有工作节点中对当前这个主键生成请求的唯一标识,然后以一个全局唯一且递增的编号向其他工作节点发出执行这个请求的提案,这个全局唯一且递增的编号可以由当前的时间戳加上工作节点IP组成,提案中的唯一标识代表请求本身。其他节点在收到这个提案后,首先检查关于这个主键生成请求有没有已收到其他的提案,如果已收到关于这个生成请求的提案,接下来需要比较已收到的提案号和刚收到的这个提案号的大小。如果已收到的提案号大于这个提案号,则直接拒绝当前提案。如果已收到的提案号小于这个提案号,则同意该提案,但同时需要告知发起提案的节点本节点之前已经收到过其他节点关于这个请求的提案。如果没有收到其他提案,则直接同意这个提案。(4)该节点将步骤(3)生成的一个唯一标识与其他节点协商确定是否可以生成该节点;协商如下:如果同意提案的节点数超过半数,且都是简单同意,则该节点再次向其他节点发起执行这个请求提案的提交。如果同意提案的节点数超过半数,但有节点反馈在本提案之前已收到过其他关于这个请求的更小提案号,则该节点需要提交具备更小编号的其他节点关于这个请求执行的提案。其他节点在收到新提交的提案后,按照与步骤(3)相同的规则进行判断处理。最终,发起提案的节点在指定时间内收到其他节点的反馈后:如果同意提交提案的节点数超过半数,说明提案已通过,再根据提案内容决定请求是在哪个节点运行。如果是在本机执行,则接下来就执行该主键生成;如果是在其他节点运行,则接下来由其他节点执行该主键生成。如果同意提交提案的节点数没有超过半数,则该次提案失败,本节点不执行该次请求。(5)生成主键。进一步,所述的该节点为收到主键生成请求的节点。进一步,所述步骤(3)的主键预生成为根据主键的标识和期望生成的主键ID来生成一个唯一标识,所述的唯一标识会在步骤(4)中使用。进一步,所述的步骤(4)中的协商包括:若大多数节点同意执行,则进入步骤(5);若大多数节点不同意执行,则返回到步骤(1)。进一步,所述的任意节点为多个对等的工作节点;每个工作节点都负责处理主键的生成;所述的每个工作节点都会随机收到对某个主键的生成请求。综上所述,由于采用了上述技术方案,本专利技术的有益效果是:本专利技术通过引入分布式环境中的多个对等节点间自动协商来决定分布式主键生成,能够有效的以节点协商方式解决因为集中式锁故障导致的分布式主键生成的整体瘫痪问题,使得分布式系统可以完全水平自由扩展,达到了性能上的极大增强。附图说明本专利技术将通过例子并参照附图的方式说明,其中:图1为本专利技术的检测方法流程示意图。具体实施方式本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。具体实施方案,下面按Paxos算法对本方案做说明,当然本方案也可基于其它一致性算法(如:Gossip等),如图1所示的,一种分布式数据库主键生成的方法,在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。进一步,所述的各节点协商确定主键生成是基于一致性算法下。一种分布式数据库主键生成的系统,系统流程步骤如下:(1)任意节点在正常运行中;(2)某节点收到主键生成请求;(3)该节点启动主键预生成,生成一个唯一标识;具体地如下:如果某个节点收到某个主键的生成请求,则该节点先会根据主键标识和按照预定规则(如自增)生成的新主键ID值计算出一个在所有工作节点中对当前这个主键生成请求的唯一标识,然后以一个全局唯一且递增的编号向其他工作节点发出执行这个请求的提案,这个全局唯一且递增的编号可以由当前的时间戳加上工作节点IP组成,提案中的唯一标识代表请求本身。其他节点在本文档来自技高网
...

【技术保护点】
一种分布式数据库主键生成的方法,其特征在于:在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。

【技术特征摘要】
1.一种分布式数据库主键生成的方法,其特征在于:在多机分布式环境中,保证各个节点都是对等的情况下,各个节点通过自动协商来决定主键生成。
2.根据权利要求1所述的分布式数据库主键生成的方法,其特征在于,所述的各节点协商确定主键生成是基于一致性算法下。
3.一种分布式数据库主键生成的系统,其特征在于,系统流程步骤如下:
(1)任意节点在正常运行中;
(2)某节点收到主键生成请求;
(3)该节点启动主键预生成,生成一个唯一标识;
(4)该节点将步骤(3)生成的一个唯一标识与其他节点协商确定是否可以生成该节点;
(5)生成主键。
4.根据权利要求3所述的分布式数据库主键生成的系统,其特...

【专利技术属性】
技术研发人员:王帅
申请(专利权)人:用友网络科技股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1