System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据库,具体的说是一种基于数据库的分布式id生成方法及工具。
技术介绍
1、随着社会现代化和智能化的脚步不断加快,各类系统的数据量呈爆炸式增长,数据量的激增的同时如果各个系统还在使用同一数据库和大单表必然导致系统响应速度的降低影响用户体验,因此分布式系统和数据库分库分表成为解决此问题的一种方案,但是分库分表是需要全局唯一的id为前提的,单体时代的数据库自增方案就不再适合现在的业务。
2、目前的分布式id主流解决方案有雪花算法和基于redis的自增方案,但是雪花算法严重依赖机器时钟,如果机器时钟回拨可能会造成id重复,同时基于redis自增的方案又依赖于redis组件,每次生成id都要请求redis,在高并发下redis又可能成为一个瓶颈。
技术实现思路
1、本专利技术针对当前分布式id主流解决方案存在的不足之处,提供一种基于数据库的分布式id生成方法及工具,在不引入新的系统组件情况下,可以在产生全局唯一id的同时保持趋势递增,并且能支持高并发和高可用。
2、第一方面,本专利技术的一种基于数据库的分布式id生成方法,解决上述技术问题采用的技术方案如下:
3、一种基于数据库的分布式id生成方法,其包括如下步骤:
4、s1、在服务生成id请求数据库时,首先获取到可以使用的id区间段;
5、s2、在服务本地建立两个id区间段缓存,用于存储步骤s1获取的id区间段;
6、s3、服务生成id请求数据库时,依次
7、s4、重复执行步骤s3,即可使用服务本地建立的两个id区间段缓存循环缓存id区间段。
8、可选的,执行步骤s2,服务本地建立两个id区间段缓存:buffer1和buffer2,buffer1和buffer2分别存储步骤s1获取的不同id区间段;
9、服务生成id请求数据库时,
10、(1)调用buffer1中的id,在buffer1中的id使用量达到设定阈值时,获取新的id区间段或者将步骤s1获取的id区间段更新到buffer2中,随后,在buffer1中的id用尽时,自动切换到完成更新的buffer2;
11、(2)调用buffer2中的id,在buffer2中的id使用量达到设定阈值时,获取新的id区间段或者将步骤s1获取的id区间段更新到buffer1中,随后,在buffer2中的id用尽时,自动切换到完成更新的buffer1;
12、重复执行步骤(1)、(2),即可使用buffer1和buffer2循环缓存id区间段。
13、进一步可选的,执行步骤(1),在buffer1中的id使用量达到设定阈值10%时,发送get_id通知给监听器,监听器首先检查buffer2中是否缓存了id区间段,若是,则在buffer1用尽时服务自动切换到buffer2获取id,若否,则请求数据库获取最新id区间段或者将已获取且未使用的id区间段缓存到buffer2中;
14、执行步骤(2),在buffer2中的id使用量达到设定阈值10%时,发送get_id通知给监听器,监听器首先检查buffer1中是否缓存了id区间段,若是,则在buffer2用尽时服务自动切换到buffer1获取id,若否,则请求数据库获取最新id区间段或者将已获取且未使用的id区间段缓存到buffer1中。
15、可选的,各个业务不同的发号需求使用biz_type来区分,每个biz_type获取的号段相互隔离互不影响。
16、第二方面,本专利技术的一种基于数据库的分布式id生成工具,解决上述技术问题采用的技术方案如下:
17、一种基于数据库的分布式id生成工具,其包括:
18、id区间段获取模块,用于在服务生成id请求数据库时获取到可以使用的id区间段;
19、缓存建立模块,用于在服务本地建立两个id区间段缓存,以存储id区间段获取模块获取的id区间段;
20、id生成模块,用于在服务生成id请求数据库时依次调用其中一个id区间段缓存中的id;
21、设定模块,用于设定id区间段缓存中id使用量的阈值;
22、阈值判断模块,用于判断id区间段缓存中的id使用量是否达到设定阈值;
23、用尽判断模块,用于判断id区间段缓存中的id使用量是否用尽;
24、更新模块,用于在id区间段缓存中的id使用量达到设定阈值时更新另一个未在使用的id区间段缓存;
25、返回模块,用于在id区间段缓存中的id使用量未达到设定阈值时返回id生成模块;
26、自动切换模块,用于在id区间段缓存中的id使用量用尽时自动切换到完成更新的另一个id区间段缓存;
27、交替循环模块,用于交替使用在服务本地建立的两个id区间段缓存来缓存id区间段获取模块获取的id区间段。
28、可选的,所涉及缓存建立模块在服务本地建立buffer1和buffer2两个id区间段缓存;交替循环模块交替使用buffer1和buffer2,缓存id区间段获取模块获取的不同id区间段;
29、服务生成id请求数据库时,
30、首先,id生成模块调用buffer1中的id,在阈值判断模块判断buffer1中的id使用量达到设定阈值时,更新模块将id区间段获取模块获取的id区间段更新到buffer2中,用尽判断模块判断buffer1中的id用尽时,通过自动切换模块自动切换到完成更新的buffer2;
31、其次,id生成模块调用buffer2中的id,在阈值判断模块判断buffer2中的id使用量达到设定阈值时,更新模块将id区间段获取模块获取的id区间段更新到buffer1中,用尽判断模块判断buffer2中的id用尽时,通过自动切换模块自动切换到完成更新的buffer1。
32、进一步可选的,设定模块对id区间段缓存中id使用量的设定阈值为10%;
33、在阈值判断模块判断buffer1中的id使用量达到设定阈值10%时,发送get_id通知给监听器,监听器首先检查buffer2中是否缓存了id区间段,若是,则在用尽判断模块判断buffer1用尽时通过自动切换模块自动切换到buffer2获取id,若否,则通过更新模块将id区间段获取模块获取的未使用id区间段缓存更新到buffer2中;
34、在阈值判断模块判断buffer2中的id使用量达到设定阈值10%时,发送get_id通知给监听器,监听器首先检查buffer1中是否缓存了id区间段,若是,则在用尽判断模块判断b本文档来自技高网...
【技术保护点】
1.一种基于数据库的分布式ID生成方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种基于数据库的分布式ID生成方法,其特征在于,执行步骤S2,服务本地建立两个ID区间段缓存:buffer1和buffer2,buffer1和buffer2分别存储步骤S1获取的不同ID区间段;
3.根据权利要求2所述的一种基于数据库的分布式ID生成方法,其特征在于,执行步骤(1),在buffer1中的ID使用量达到设定阈值10%时,发送GET_ID通知给监听器,监听器首先检查buffer2中是否缓存了ID区间段,若是,则在buffer1用尽时服务自动切换到buffer2获取ID,若否,则请求数据库获取最新ID区间段或者将已获取且未使用的ID区间段缓存到buffer2中;
4.根据权利要求1所述的一种基于数据库的分布式ID生成方法,其特征在于,各个业务不同的发号需求使用biz_type来区分,每个biz_type获取的号段相互隔离互不影响。
5.一种基于数据库的分布式ID生成工具,其特征在于,其包括:
6.根据权利要求5所述的一种
7.根据权利要求6所述的一种基于数据库的分布式ID生成工具,其特征在于,所述设定模块对ID区间段缓存中ID使用量的设定阈值为10%;
8.根据权利要求5所述的一种基于数据库的分布式ID生成工具,其特征在于,所述ID区间段获取模块获取到可以使用的多个ID区间段后,基于各个业务不同的发号需求使用biz_type来区分,每个biz_type获取的号段相互隔离互不影响。
...【技术特征摘要】
1.一种基于数据库的分布式id生成方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的一种基于数据库的分布式id生成方法,其特征在于,执行步骤s2,服务本地建立两个id区间段缓存:buffer1和buffer2,buffer1和buffer2分别存储步骤s1获取的不同id区间段;
3.根据权利要求2所述的一种基于数据库的分布式id生成方法,其特征在于,执行步骤(1),在buffer1中的id使用量达到设定阈值10%时,发送get_id通知给监听器,监听器首先检查buffer2中是否缓存了id区间段,若是,则在buffer1用尽时服务自动切换到buffer2获取id,若否,则请求数据库获取最新id区间段或者将已获取且未使用的id区间段缓存到buffer2中;
4.根据权利要求1所述的一种基于数据库的分布式id生成方法,其特征在于,各个业务不同的发号需求使...
【专利技术属性】
技术研发人员:田昊辰,李新,韩成轩,黎文志,
申请(专利权)人:山东浪潮智慧医疗科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。