一种基于MySQL的业务流水号生成方法技术

技术编号:36353451 阅读:15 留言:0更新日期:2023-01-14 18:09
本发明专利技术涉及分布式系统领域,具体为一种基于MySQL的业务流水号生成方法。一种基于MySQL的业务流水号生成方法,包括以下步骤:S1:建立自增索引;S2:获取业务流水号各部分结构对应的数据,获取的数据包括自增ID;S3:将S2获得的数据组合生成业务流水号。该技术方案能够简单快速地生成具有业务连续性及唯一性的业务流水号。水号。水号。

【技术实现步骤摘要】
一种基于MySQL的业务流水号生成方法


[0001]本专利技术涉及分布式系统领域,具体为一种基于MySQL的业务流水号生成方法。

技术介绍

[0002]在很多交易场景下,每一笔交易或每一笔业务需要生成唯一的业务流水号,以记录该笔业务或交易。当前有多种方式用于业务流水号的生成,生成的业务流水号也有多种不同的形式。目前,优选的方式就是利用分布式系统进行业务流水号生成,但是现有技术中,在利用分布式系统生成业务流水号时,如果处于业务并发分段等场景下,由于分布式系统中的服务器各自独立,无法完全保证被同步的节点的时间完全一致,因此在生成业务流水号时难以同时保证唯一性和连续性。

技术实现思路

[0003]本专利技术的目的在于:提出一种基于MySQL的业务流水号生成方法,该技术方案能够简单快速地生成具有业务连续性及唯一性的业务流水号。
[0004]为解决上述问题,本专利技术提供的基础方案:一种基于MySQL的业务流水号生成方法,包括以下步骤:S1:建立自增索引;S2:获取业务流水号各部分结构对应的数据,获取的数据包括自增ID;S3:将S2获得的数据组合生成业务流水号;S4:重置自增主键。
[0005]基础方案的有益效果:本技术方案在业务流水号时,在传统的生成规则基础上加入MySQL自增ID,无须依赖复杂算法,对业务性能影响较小,支持多业务多场景使用,可保证各分段任务并发处理时,任务不会被交叉重复处理,自增ID与传统生成规则结合保证了业务流水号具有唯一性,自增ID递增的特性也保证了业务具有连续性。/>[0006]作为优选方案,所述S1包括:
[0007]S11:创建自增索引表;
[0008]S12:设置自增主键字段。
[0009]本技术方案,S11创建自增索引表,有利于快速、灵活地进行大数据量的复杂查询处理;S22设置自增主键字段,便于后续S2生成自增ID。
[0010]作为优选方案,所述S2包括:
[0011]S21:获取接收到业务流水号生成请求时的系统时间;
[0012]S22:获取自增ID。
[0013]本技术方案,业务流水号包括系统时间、自增ID,通过获取系统时间能够标识业务发生的时间,自增ID能保证业务流水号具有唯一性与连续性。同时相比现有技术中主键一百多位字符的长度,本技术方案有效缩减了字符长度,节约了存储空间。
[0014]作为优选方案,所述S22包括:
[0015]S22

1:创建标签,在标签中添加useGenerateKey=true;
[0016]S22

2:执行标签插入MySQL数据库操作;
[0017]S22

3:返回自增ID值。
[0018]本技术方案,通过S22

1告知数据库使用了自动生成主键的方式,而后执行S22

2、S22

3获取新插入数据的自增ID值。
[0019]作为优选方案,还包括S4:重置自增主键。
[0020]本技术方案,能够保证自增主键可循环重复使用,使业务流水号能连续顺利地生成。
[0021]作为优选方案,所述S4包括:
[0022]S41:设置重置阈值,若自增ID等于该设置的阈值则执行S42;
[0023]S42:对自增索引表的自增ID进行重置。
[0024]本技术方案,能够对自增ID进行检查,并在自增ID超过一定数值之后进行重置。
[0025]作为优选方案,所述S42采用trancate的方式对自增ID进行重置。
[0026]本技术方案,使用trancate语句能够使索引表所占用的空间恢复到初始大小,重置表的自增ID值,并且保证表结构及其约束、索引等保持不变。
[0027]作为优选方案,所述S2获取的数据还包括业务场景前缀。
[0028]本技术方案,通过加入业务场景前缀,便于判断该业务发生场景,
[0029]作为优选方案,所述S21通过获取分布式系统中多个服务器的时间,计算平均时间作为请求时的系统时间。
[0030]本技术方案,通过对多服务器平均时间的计算,尽可能降低生成业务流水号时,系统时间的误差。
附图说明
[0031]图1是本专利技术的逻辑图;
[0032]图2是本专利技术实施例一生成的业务流水号的结构示意图。
具体实施方式
[0033]下面通过具体实施方式对本申请技术方案进行进一步详细说明:
[0034]实施例一
[0035]如图1所示,一种基于MySQL的业务流水号生成方法,包括以下步骤:
[0036]S1:建立自增索引,具体包括:
[0037]S11:创建自增索引表,创建获取到的数据源对应数据表的元信息的结构。
[0038]S12:设置自增主键字段,自增主键id字段采用int类型,并定义整形变量与常量,自增主键字段的数量可以根据实际情况进行设置,本实施例中索引表只需一个自增主键字段即可,同时给表创建主键时,系统也会创建一个约束给该字段。
[0039]S2:获取业务流水号各部分结构对应的数据,具体包括:
[0040]S21:获取接收到业务流水号生成请求时的系统时间,服务器获取接收到业务流水号生成请求时的系统时间,并根据该系统时间生成时间戳,时间戳精确到秒,包括年、月、时、分、秒,格式为yyyyMMddHHmmSS,用14位字符表示时间戳;当业务量较大时,也可精确到毫秒,此时格式为yyyyMMddHHmmSSsss,以17位字符表示时间戳。
[0041]S22:获取自增ID,本技术方案使用MyBatis框架与数据库交互,以对数据进行新增、修改、删除和查询,具有使用方便、性能高、灵活性强等优点,具体包括以下步骤:
[0042]S22

1:接收到服务节点发来的自增ID获取请求后开始创建标签,在标签中添加useGenerateKey=true,告知数据库使用了自动生成主键的方式,添加keyProperty=id,使S1所创建的自增主键字段赋予Java对象的属性名,保证标签插入后正确获取ID值。
[0043]S22

2:执行标签插入MySQL数据库操作。
[0044]S22

3:返回对象中对应的ID值即为新插入数据的自增ID值。
[0045]S23:将本次请求的系统时间、场景前缀、自增ID发送至所述多个服务节点中的其中一个服务节点,使用前将会先检索当前资源占用率最小服务节点,由该当前资源使用率最小的服务节点负责生成对应的业务流水号。
[0046]S3:服务节点接收到将S2获得的数据后,会按照如图2的业务流水号结构进行组合,生成业务流水号。
[0047]S4:对自增ID进行重置,具体包括:
[0048]S41:设置重置阈值,int类型的写入值超出最大值后,将会出现写入数据库报错。本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于MySQL的业务流水号生成方法,其特征在于:包括以下步骤:S1:建立自增索引;S2:获取业务流水号各部分结构对应的数据,获取的数据包括自增ID;S3:将S2获得的数据组合生成业务流水号。2.根据权利要求1所述的一种基于MySQL的业务流水号生成方法,其特征在于:所述S1包括:S11:创建自增索引表;S12:设置自增主键字段。3.根据权利要求2所述的一种基于MySQL的业务流水号生成方法,其特征在于:所述S2包括:S21:获取接收到业务流水号生成请求时的系统时间;S22:获取自增ID。4.根据权利要求3所述的一种基于MySQL的业务流水号生成方法,其特征在于:所述S22包括:S22

1:创建标签,在标签中添加useGenerateKey=true;S22

2:执行标签插入MySQL数据库操作;...

【专利技术属性】
技术研发人员:张天龙
申请(专利权)人:重庆富民银行股份有限公司
类型:发明
国别省市:

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

1