[发明专利]一种分布式唯一ID生成方法在审
申请号: | 202110868307.3 | 申请日: | 2021-07-30 |
公开(公告)号: | CN113626496A | 公开(公告)日: | 2021-11-09 |
发明(设计)人: | 孙志强;徐士强;杨继伟;董玉全 | 申请(专利权)人: | 浪潮云信息技术股份公司 |
主分类号: | G06F16/2458 | 分类号: | G06F16/2458;G06F16/2453;G06F16/2455;G06F16/21;G06F16/22;G06F16/27 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜明 |
地址: | 250100 山东省济南市高*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 唯一 id 生成 方法 | ||
1.一种分布式唯一ID生成方法,其特征在于,所述方法的实现包括内容如下:
利用MySql主键自增的方式,实现分布式数据ID自增,利用MySql多实例主键自增,每次获取ID时去数据库请求,获得的ID是一个ID区间段。
2.根据权利要求1所述的一种分布式唯一ID生成方法,其特征在于,所述ID区间段保存到jvm中,业务场景用的ID,在jvm内存中获得。
3.根据权利要求1或2所述的一种分布式唯一ID生成方法,其特征在于,所述ID区间段的获取过程如下:
注册用户时,查询数据库,找到user_tag的ID,获取max_id,step;
把max_id更新为max_id=max_id+step,得到ID区间段:
ID=[max_id+1,max_id+step]。
4.根据权利要求3所述的一种分布式唯一ID生成方法,其特征在于,所述方法的实现还包括:
多个用户服务同时获取ID时,采用加分布式锁的方式,保证同一时刻只有一个用户服务获取max_id。
5.根据权利要求4所述的一种分布式唯一ID生成方法,其特征在于,所述方法通过自行定义max_id的起点,和step步长,进行扩容。
6.根据权利要求5所述的一种分布式唯一ID生成方法,其特征在于,所述方法的实现还包括:
多个用户服务获取各自的ID区间时,采用双buffer方案,每次获取ID时从buffer中获取,并在两个buffer之间自行切换使用。
7.根据权利要求6所述的一种分布式唯一ID生成方法,其特征在于,所述双buffer为buffer1和buffer2,具体操作步骤如下:
1)当前获取ID在buffer1中,每次获取ID从buffer1中获取;
2)当buffer1中的Id已经使用了区间的10%,先判断buffer2中有没有去获取过,如果没有就立即发起请求获取ID线程,所述线程把获取到的ID设置到buffer2中;
3)如果buffer1用完了,自动切换到buffer2;
4)当buffer2用到10%了,再次启动线程获取,把获取到的ID设置到buffer1中;
5)当每个buffer中的Id使用的区间每增长10%,把获取到的ID设置到另一个buffer中。
8.根据权利要求4所述的一种分布式唯一ID生成方法,其特征在于,所述,所述id采用AtomicLong中的getAndIncrement方法获取。
9.根据权利要求4所述的一种分布式唯一ID生成方法,其特征在于,所述ID区间段的获取通过用户服务模块和生成ID服务模块实现,具体实现流程如下:
注册用户时,需要一个用户ID,用户服务模块请求生成ID服务模块的接口;
生成ID服务模块查询数据库,找到user_tag的ID,把max_id和step返回给用户服务模块;
用户服务模块需要用到ID的时候,在区间ID=[max_id+1,max_id+step]中依次获取id。
10.根据权利要求9所述的一种分布式唯一ID生成方法,其特征在于,所述方法的实现流程还包括:
如果所述区间的值用完了,再去请求生成ID服务模块接口,获取到max_id为step,使用[max_id+1,max_id+step]区间的ID。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮云信息技术股份公司,未经浪潮云信息技术股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110868307.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种语法转换迁移方法
- 下一篇:高黏釜用防结块磁传动搅拌装置