基于数据库的多服务间积分日志ID生成方法技术

技术编号:30524788 阅读:13 留言:0更新日期:2021-10-27 23:09
本发明专利技术公开了基于数据库的多服务间积分日志ID生成方法,所述方法包括:S1、在ID数据库统一积分日志ID的生成配置,所述生成配置包括业务标识、最大ID值、ID号段长度和版本号;S2、根据所述生成配置,为各服务系统中的每个业务分配相应的业务标识和ID号段;S3、服务系统从分配的ID号段中读取当前可用的ID值,若当前分配的ID号段消费到设定的阈值,则自动从ID数据库加载下一个ID号段到服务系统的内存中。本发明专利技术能有效降低每次生成ID过程中读写数据库造成的系统服务阻塞,提高系统响应性能。提高系统响应性能。提高系统响应性能。

【技术实现步骤摘要】
基于数据库的多服务间积分日志ID生成方法


[0001]本专利技术涉及计算机
,特别涉及基于数据库的多服务间积分日志ID生成方法。

技术介绍

[0002]对多个数据库多张数据表的积分日志数据生成唯一的ID标识是积分系统的基本功能,其是在数据库读写分离和分库分表的架构设计前提下,利用数据库来实现唯一ID的生成。
[0003]现有常用的积分日志ID生成方案是:在各个数据库共同维护一份数据表用于ID的生成,通过将各个积分日志数据库的ID生成设置为不同步长,从而避免积分日志ID在不同系统出现重复的情况。但随着数据量的增长,数据库的数量增长不可避免,而这种方案的数据库扩容比较困难,当已经定义好数据库和步长后,如果需要添加新的数据库,需要重新调整数据库的步长,且每次获取新的ID都需要进行一次数据库读写,当生成积分日志ID的请求量增大时,数据库读写压力较大,容易造成系统阻塞。

技术实现思路

[0004]为解决上述问题,本专利技术提供了基于数据库的多服务间积分日志ID生成方法。
[0005]本专利技术采用以下技术方案:
[0006]基于数据库的多服务间积分日志ID生成方法,所述方法包括:
[0007]S1、在ID数据库统一积分日志ID的生成配置,所述生成配置包括业务标识、最大ID值、ID号段长度和版本号;
[0008]S2、根据所述生成配置,为各服务系统中的每个业务分配相应的业务标识和ID号段;
[0009]S3、服务系统从分配的ID号段中读取当前可用的ID值,若当前分配的ID号段消费到设定的阈值,则自动从ID数据库加载下一个ID号段到服务系统的内存中。
[0010]进一步地,所述业务标识用于业务区分;所述最大ID值表示当前业务标识被分配到的批量ID的最大值;所述ID号段长度表示每次分配的ID数量;所述版本号用于确认当前ID号段是否被占用。
[0011]进一步地,所述版本号的值是一个单调递增的正整数,每次从ID数据库获取一个ID号段后,就更新一次版本号。
[0012]进一步地,所述阈值为20%

30%。
[0013]进一步地,所述生成配置还包括增量和余数,所述增量用于表示相邻ID值之间的步长;所述余数用于表示ID值的起始余数,所述ID值的计算方法为:ID
n+1
=ID
n
+增量,其中,ID
n+1
表示第n+1个ID值,ID
n
表示第n个ID值。
[0014]进一步地,步骤S3中所述自动从ID数据库加载下一个ID号段到服务系统的内存中具体包括如下步骤:
[0015]S31、查询当前的最大ID值MaxId和ID号段长度Step;
[0016]S32、计算新的最大ID值new_MaxId,new_MaxId=MaxId+Step;
[0017]S33、获取新的ID号段并更新ID数据库中的最大ID值:对比当前的版本号与ID数据库内的版本号,若相等,则表示新的ID号段未被占用,获取新的ID号段并更新最大ID值;若不相等,则表示新的ID号段已被其他线程占用,获取新的ID号段失败,并返回步骤S31进行重试。
[0018]进一步地,所述重试的次数设置为3

5次。
[0019]采用上述技术方案后,本专利技术与
技术介绍
相比,具有如下优点:
[0020]1、本专利技术统一了不同数据库生成积分日志ID的生成配置,即统一了ID生成的数据源,可以从同一个数据源来获取新的积分日志ID,且保证ID不重复,从而避免现有的数据库数量扩容时需要维护多份数据源来保证ID不重复的问题,解决了数据库扩容难、维护难的问题;
[0021]2、通过每次获取一整批ID并缓存到各个服务系统的内存中,显著降低数据库读写次数,减轻数据库读写频繁造成的压力,提升ID生成的性能,提高系统吞吐量;
[0022]3、通过设定合理的阈值,自动加载下一批ID的机制,降低每次生成ID过程中读写数据库造成的系统服务阻塞,提高系统响应性能。
附图说明
[0023]图1为本专利技术的生成配置的结构图;
[0024]图2为本专利技术的多服务读取不同ID号段的架构图;
[0025]图3为本专利技术的自动加载新的ID号段的过程示意图。
具体实施方式
[0026]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。
[0027]实施例
[0028]基于数据库的多服务间积分日志ID生成方法,所述方法包括:
[0029]S1、在ID数据库统一积分日志ID的生成配置;
[0030]如图1所示,所述生成配置包括业务标识、最大ID值、ID号段长度和版本号;
[0031]所述业务标识(BizType)用于业务区分;
[0032]所述最大ID值(MaxId)表示当前业务标识被分配到的批量ID的最大值;
[0033]所述ID号段长度(Step)表示每次分配的ID数量,现有技术常用的方法是每次获取ID都要读写数据库,本实施例设定ID号段长度后,只有当整个ID段快被消耗完了才读写一次数据库,可以有效降低数据库读写频率到原来的1/ID段长度;
[0034]所述版本号(Version)用于确认当前ID号段是否被占用,所述版本号的值是一个单调递增的正整数,每次从ID数据库获取一个ID号段后,就更新一次版本号;这里的版本号是一个乐观锁,每次更新都加上版本号,保证并发工作的正确,确保不出现重复的ID号段;
[0035]所述生成配置还包括增量(Delta)和余数(Remainder),所述增量用于表示相邻ID
值之间的步长;所述余数用于表示ID值的起始余数,所述ID值的计算方法为:ID
n+1
=ID
n
+增量,其中,ID
n+1
表示第n+1个ID值,ID
n
表示第n个ID值。
[0036]S2、根据所述生成配置,为各服务系统中的每个业务分配相应的业务标识和ID号段;如图2所示,不同的业务用pointLog、poingtCustomer等进行区分,为不同的业务分别不同的ID号段。
[0037]S3、服务系统从分配的ID号段中读取当前可用的ID值,若当前分配的ID号段消费到设定的阈值,则自动从ID数据库加载下一个ID号段到服务系统的内存中。所述阈值设为20%。
[0038]步骤S3中所述自动从ID数据库加载下一个ID号段到服务系统的内存中具体包括如下步骤:
[0039]S31、查询当前的最大ID值MaxId和ID号段长度Step;
[0040]S32、计算新的最大ID值new_MaxId,new_MaxId=MaxId+Step;
[0041]S33、获取新的ID号段并更新ID本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于数据库的多服务间积分日志ID生成方法,其特征在于:所述方法包括:S1、在ID数据库统一积分日志ID的生成配置,所述生成配置包括业务标识、最大ID值、ID号段长度和版本号;S2、根据所述生成配置,为各服务系统中的每个业务分配相应的业务标识和ID号段;S3、服务系统从分配的ID号段中读取当前可用的ID值,若当前分配的ID号段消费到设定的阈值,则自动从ID数据库加载下一个ID号段到服务系统的内存中。2.如权利要求1所述的基于数据库的多服务间积分日志ID生成方法,其特征在于:所述业务标识用于业务区分;所述最大ID值表示当前业务标识被分配到的批量ID的最大值;所述ID号段长度表示每次分配的ID数量;所述版本号用于确认当前ID号段是否被占用。3.如权利要求2所述的基于数据库的多服务间积分日志ID生成方法,其特征在于:所述版本号的值是一个单调递增的正整数,每次从ID数据库获取一个ID号段后,就更新一次版本号。4.如权利要求1所述的基于数据库的多服务间积分日志ID生成方法,其特征在于:所述阈值为20%

30%。5.如权利要求1所述的基于数据库的多服务间积分日志ID生成方法,其特征在于:所述生成配置...

【专利技术属性】
技术研发人员:陈碧勇方敏高永强
申请(专利权)人:厦门南讯股份有限公司
类型:发明
国别省市:

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

1