一种解决分布式数据库唯一自增序列的方法与流程

文档序号:15999393发布日期:2018-11-20 19:15阅读:555来源:国知局

本发明涉及数据库技术领域,具体为一种解决分布式数据库唯一自增序列的方法。



背景技术:

目前主流关系型数据库在分布式的情况下没有提供全局唯一序列。而现有的解决方案中,通过uuid生成可以做到全局唯一,缺点是没有顺序。其他的一些方案序列值在有使用需要时才会生产,在这样的场景下高并发、高压力的情况下计算资源压力巨大。



技术实现要素:

本发明的目的在于提供一种解决分布式数据库唯一自增序列的方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:一种解决分布式数据库唯一自增序列的方法,包括以下步骤:

A、数据存储;

B、序列生产;

C、序列消费;

D、序列池监控报警。

优选的,所述步骤A中具体包括:唯一数字序列是通过生产者异步生产并存储在队列中提供给消费者消费使用,因队列数据存于内存中,读写性能将大大优于数据库。采用队列数据结构作为序列的存储结构,存储和获取长度的复杂度都是0/1,可以实现先进先出,且操作都是原子性的。

优选的,所述步骤B中序列生产如下:生产者根据配置序列值批总量异步的生成配置定义数量自增序列值放入到队列中。在使用过程中为了保证序列池不被耗尽导致队列性能被生产者和消费者同时争抢资源导致队列性能下降,在每次消费序列值时会同时获取队列中序列值的剩余数量判断队列中序列值的剩余数量是否小于设定的队列最小序列总量阈值,如果小于会异步通知调用生产者,生产者接受通知调用后根据配置的序列值批总量值进行生产对应总量的序列值补充放入队列中,确保队列中的序列总量不会成为零,从而确保不会因为实时计算的性能瓶颈导致整个消费序列的性能下降。

优选的,所述步骤C序列消费如下:在每一次消费序列中,会获取到对应的序列值和队列中剩余的序列值总量;消费者就可以判断剩余序列值总量是否小于配置的队列最小序列总量阈值,如果小于就会发起异步通知生产者,生产者得到通知后,会先获取队列中的序列总量是否小于队列最小序列总量阈值,确定是小于的情况下就开始生产对应的序列值放入到队列中。

与现有技术相比,本发明的有益效果是:本发明采用“队列“作为提供唯一自增序列的存储介质,使用队列先进先出的特性,确保序列取出的顺序;另一方面队列的数据存储在内存中,且结构简单,其存取性能高效。加上报警机制、阻塞、可配置的序列补充机制,实现稳定的唯一自增序列服务。另外为了确保队列的高效,生产序列和消费序列是异步的、所以会在队列中存储一定量的需要消耗的序列值。避免生产和消费在同步执行时同时争抢队列资源导致性能下降。在使用者合理规划的前提下能够平滑合理利用计算资源。

附图说明

图1为本发明结构图;

图2为本发明流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1-2,本发明提供如下技术方案:一种解决分布式数据库唯一自增序列的方法,包括以下步骤:

A、数据存储;

B、序列生产;

C、序列消费;

D、序列池监控报警。

本发明中,步骤A中具体包括:唯一数字序列是通过生产者异步生产并存储在队列中提供给消费者消费使用,因队列数据存于内存中,读写性能将大大优于数据库。采用队列数据结构作为序列的存储结构,存储和获取长度的复杂度都是0/1,可以实现先进先出,且操作都是原子性的。这样可以保证在高并发的情况下可以正常高效的提供序列服务。另外序列值都是生产者异步提前计算好一批序列值放入到队列中。所以会大大减少生产者与消费者同时争抢计算资源的情况从而提升性能。考虑到内存中数据可能丢失,所以每次生产序列之前生产者会将当前需要生产的最大序列值放入持久化存储中存储,在服务故障宕机以后数据丢失后,可以依据持久化的最大序列值生产对应的序列数据放入队列中恢复序列服务,确保宕机后数据丢失也只是丢失队列存储中的部分序列值,在该机制下确保序列值是自增的,但是无法保证序列值是严格递增。

本发明中,步骤B中序列生产如下:生产者根据配置序列值批总量异步的生成配置定义数量自增序列值放入到队列中。在使用过程中为了保证序列池不被耗尽导致队列性能被生产者和消费者同时争抢资源导致队列性能下降,在每次消费序列值时会同时获取队列中序列值的剩余数量判断队列中序列值的剩余数量是否小于设定的队列最小序列总量阈值,如果小于会异步通知调用生产者,生产者接受通知调用后根据配置的序列值批总量值进行生产对应总量的序列值补充放入队列中,确保队列中的序列总量不会成为零,从而确保不会因为实时计算的性能瓶颈导致整个消费序列的性能下降。

本发明中,步骤C序列消费如下:在每一次消费序列中,会获取到对应的序列值和队列中剩余的序列值总量;消费者就可以判断剩余序列值总量是否小于配置的队列最小序列总量阈值,如果小于就会发起异步通知生产者,生产者得到通知后,会先获取队列中的序列总量是否小于队列最小序列总量阈值,确定是小于的情况下就开始生产对应的序列值放入到队列中。另外在消费中有阻塞模式,如果获取到队列中的序列值总量为0或者队列服务不可用,消费将阻塞进程不再执行后续消费任务,同时异步报警告知相关人员。检查服务是否正常。

此外,本发明中,报警主要监控序列池的大小、序列生成消耗情况等,达到预警值就通过邮件等方式通知相关人员,进一步确保服务的可用性。

综上所述,本发明采用“队列“作为提供唯一自增序列的存储介质,使用队列先进先出的特性,确保序列取出的顺序;另一方面队列的数据存储在内存中,且结构简单,其存取性能高效。加上报警机制、阻塞、可配置的序列补充机制,实现稳定的唯一自增序列服务。另外为了确保队列的高效,生产序列和消费序列是异步的、所以会在队列中存储一定量的需要消耗的序列值。避免生产和消费在同步执行时同时争抢队列资源导致性能下降。在使用者合理规划的前提下能够平滑合理利用计算资源。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

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