CN112506929A - 一种基于分布式id生成的避免id碰撞的升级方法 - Google Patents
一种基于分布式id生成的避免id碰撞的升级方法 Download PDFInfo
- Publication number
- CN112506929A CN112506929A CN202011478781.7A CN202011478781A CN112506929A CN 112506929 A CN112506929 A CN 112506929A CN 202011478781 A CN202011478781 A CN 202011478781A CN 112506929 A CN112506929 A CN 112506929A
- Authority
- CN
- China
- Prior art keywords
- collision
- buffer pool
- ids
- generation
- avoiding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 230000008569 process Effects 0.000 claims description 8
- 230000003139 buffering effect Effects 0.000 claims description 4
- 238000012360 testing method Methods 0.000 description 6
- 230000006872 improvement Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于分布式ID生成的避免ID碰撞的升级方法,包括以下步骤:设计64位ID设计,建立ID碰撞双缓冲池,将ID碰撞双缓冲池分为碰撞缓冲池和预热缓冲池,碰撞缓冲池初始化时,将碰撞表中ID在范围区间的所有ID填充到缓冲池,预热缓冲池在发ID时,即时检查缓冲池中剩余碰撞ID数量,如小于设定阈值,则触发从碰撞表中加载下一个时段的碰撞ID至新ID碰撞缓冲池,定时记录本机时间至数据库,下次系统启动时候检测是否发生大步长时钟回拨,发现则报警,该发明通过初始化填充和异步实时填充方式,最大限度的保证了Id冲突的校验都从缓冲区发起,而不直接通过查库校验,减少数据库压力,同时降低查询开销,提升明显。
Description
技术领域
本发明涉及基于分布式ID生成的避免ID碰撞的升级方法技术领域,具体为一种基于分布式ID生成的避免ID碰撞的升级方法。
背景技术
UUID简称通用唯一识别码是128位长的数字,常见的划分格式是8-4-4-4-12的部分,每一位是一个16进制的数字。另一种划分格式是采用高低位表示:高64位-低64位,每部分用一个64位长整型数据存储。UUID通常由以下几部分组成:当前日期和时间+时钟序列+全局唯一的IEEE机器识别号。鉴于UUID重复的概率非常的低且具有随机性,本地生成具有相当高的性能,但是这种ID长度过长,占用空间过大,且不具备主键索引需要的递增特性,不能有效利用索引组织表的性能,因此,亟待一种改进的技术来解决现有技术中所存在的这一问题。
发明内容
本发明的目的在于提供一种基于分布式ID生成的避免ID碰撞的升级方法,通过初始化填充和异步实时填充方式,最大限度的保证了Id冲突的校验都从缓冲区发起,而不直接通过查库校验,减少数据库压力,同时降低查询开销,由于id的生成对于任何服务都是一个极度高频的操作,优化在原方案的基础上提升性能接近100%,提升明显,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于分布式ID生成的避免ID碰撞的升级方法,包括以下步骤:
步骤一:高位取从XX年X月X日到现在的毫秒数,预留40bit给毫秒数,每秒的单机高峰并发量小于2W,预留5bit给每毫秒内序列号,5年内机房数小于4个,预留2bit给机房标识,每个机房小于100台机器,预留7bit给每个机房内的服务器标识,剩余10位作为业务线号或进程号使用;
步骤二:建立ID碰撞双缓冲池,将ID碰撞双缓冲池分为碰撞缓冲池和预热缓冲池;
步骤三:碰撞缓冲池初始化时,将碰撞表中ID在范围区间的所有ID填充到缓冲池,预热缓冲池在发ID时,即时检查缓冲池中剩余碰撞ID数量,如小于设定阈值,则触发从碰撞表中加载下一个时段的碰撞ID至新ID碰撞缓冲池;
步骤四:定时记录本机时间至数据库,下次系统启动时候检测是否发生大步长时钟回拨,发现则报警。
优选的,所述步骤一中每个机房每个机器生成的ID不同。
优选的,所述步骤一中同一个机器,每个毫秒内生成的ID不同且以序列号区区分。
优选的,所述步骤一中毫秒数放在最高位以保证生成的ID是趋势递增的。
优选的,所述步骤一中业务线号或进程号互不相同。
优选的,所述步骤三中碰撞缓冲池用于缓存一段时间内从ID全局碰撞表中获取到的可能碰撞的ID号范围列表。
优选的,所述步骤三中预热缓冲池用于缓存一段时间内新生成的ID号范围。
与现有技术相比,本发明的有益效果是:
通过初始化填充和异步实时填充方式,最大限度的保证了Id冲突的校验都从缓冲区发起,而不直接通过查库校验,减少数据库压力,同时降低查询开销,由于id的生成对于任何服务都是一个极度高频的操作,优化在原方案的基础上提升性能接近100%,提升明显。
附图说明
图1为碰撞双缓冲池填充时机流程示意图。
图2为系统时钟校正流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-2,本发明提供一种技术方案:一种基于分布式ID生成的避免ID碰撞的升级方法,包括以下步骤:
步骤一:高位取从XX年X月X日到现在的毫秒数,预留40bit给毫秒数,每秒的单机高峰并发量小于2W,预留5bit给每毫秒内序列号,5年内机房数小于4个,预留2bit给机房标识,每个机房小于100台机器,预留7bit给每个机房内的服务器标识,剩余10位作为业务线号或进程号使用;
步骤二:建立ID碰撞双缓冲池,将ID碰撞双缓冲池分为碰撞缓冲池和预热缓冲池;
步骤三:碰撞缓冲池初始化时,将碰撞表中ID在范围区间的所有ID填充到缓冲池,预热缓冲池在发ID时,即时检查缓冲池中剩余碰撞ID数量,如小于设定阈值,则触发从碰撞表中加载下一个时段的碰撞ID至新ID碰撞缓冲池;
步骤四:定时记录本机时间至数据库,下次系统启动时候检测是否发生大步长时钟回拨,发现则报警。
其中,步骤一中每个机房每个机器生成的ID不同,步骤一中同一个机器,每个毫秒内生成的ID不同且以序列号区区分,步骤一中毫秒数放在最高位以保证生成的ID是趋势递增的,步骤一中业务线号或进程号互不相同。
其中,步骤三中碰撞缓冲池用于缓存一段时间内从ID全局碰撞表中获取到的可能碰撞的ID号范围列表,步骤三中预热缓冲池用于缓存一段时间内新生成的ID号范围。
实施例一:
步骤一:高位取从2020年1月1日到现在的毫秒数,假设系统至少运行30年,那至少需要30年*365天*24小时*3600秒*1000毫秒=946*10^9,差不多预留40bit给毫秒数,每秒的单机高峰并发量小于2W,预留5bit给每毫秒内序列号,5年内机房数小于4个,预留2bit给机房标识,每个机房小于100台机器,预留7bit给每个机房内的服务器标识,剩余10位作为业务线号或进程号使用;
步骤二:建立ID碰撞双缓冲池,将ID碰撞双缓冲池分为碰撞缓冲池和预热缓冲池;
步骤三:碰撞缓冲池初始化时,将碰撞表中ID在范围区间的所有ID填充到缓冲池,预热缓冲池在发ID时,即时检查缓冲池中剩余碰撞ID数量,如小于设定阈值,则触发从碰撞表中加载下一个时段的碰撞ID至新ID碰撞缓冲池;
步骤四:定时记录本机时间至数据库,系统启动时候检测未发生大步长时钟回拨,无需报警。
对1000万的Id生成重复测试和16个线程的并发生成测试,目前吞吐量测试是6万+/秒,与性能测试库6亿+个ID对,16位的ID 29万个,生成16位ID目前与老系统可能重复概率接近万分之5。
相比建立16位ID碰撞全局表,找出库中所有全量16位ID入表,发新Id号时到该表做重复查询校验,采用新的ID碰撞双缓冲池方案可以显著提升性能。
通过初始化填充和异步实时填充方式,最大限度的保证了Id冲突的校验都从缓冲区发起,而不直接通过查库校验,减少数据库压力,同时降低查询开销,由于id的生成对于任何服务都是一个极度高频的操作,优化在原方案的基础上提升性能接近100%,提升明显。具体测试结果如下:
用16个线程的并发生成测试,目前吞吐量测试是6万+/秒,采用原先全部查库的方案,吞吐量降为3万+/秒,采用碰撞缓冲区的方案吞吐量为5.8万+/秒。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (7)
1.一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:包括以下步骤:
步骤一:高位取从XX年X月X日到现在的毫秒数,预留40bit给毫秒数,每秒的单机高峰并发量小于2W,预留5bit给每毫秒内序列号,5年内机房数小于4个,预留2bit给机房标识,每个机房小于100台机器,预留7bit给每个机房内的服务器标识,剩余10位作为业务线号或进程号使用;
步骤二:建立ID碰撞双缓冲池,将ID碰撞双缓冲池分为碰撞缓冲池和预热缓冲池;
步骤三:碰撞缓冲池初始化时,将碰撞表中ID在范围区间的所有ID填充到缓冲池,预热缓冲池在发ID时,即时检查缓冲池中剩余碰撞ID数量,如小于设定阈值,则触发从碰撞表中加载下一个时段的碰撞ID至新ID碰撞缓冲池;
步骤四:定时记录本机时间至数据库,下次系统启动时候检测是否发生大步长时钟回拨,发现则报警。
2.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤一中每个机房每个机器生成的ID不同。
3.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤一中同一个机器,每个毫秒内生成的ID不同且以序列号区区分。
4.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤一中毫秒数放在最高位以保证生成的ID是趋势递增的。
5.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤一中业务线号或进程号互不相同。
6.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤三中碰撞缓冲池用于缓存一段时间内从ID全局碰撞表中获取到的可能碰撞的ID号范围列表。
7.根据权利要求1所述的一种基于分布式ID生成的避免ID碰撞的升级方法,其特征在于:所述步骤三中预热缓冲池用于缓存一段时间内新生成的ID号范围。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011478781.7A CN112506929A (zh) | 2020-12-15 | 2020-12-15 | 一种基于分布式id生成的避免id碰撞的升级方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011478781.7A CN112506929A (zh) | 2020-12-15 | 2020-12-15 | 一种基于分布式id生成的避免id碰撞的升级方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112506929A true CN112506929A (zh) | 2021-03-16 |
Family
ID=74973748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011478781.7A Pending CN112506929A (zh) | 2020-12-15 | 2020-12-15 | 一种基于分布式id生成的避免id碰撞的升级方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506929A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050050443A1 (en) * | 2003-08-26 | 2005-03-03 | International Business Machines Corporation | System and method for starting a buffer pool |
US20080022059A1 (en) * | 2006-07-21 | 2008-01-24 | Zimmerer Peter K | Sequencing transactions and operations |
KR20090029552A (ko) * | 2007-09-18 | 2009-03-23 | 광주과학기술원 | 충돌 회피를 위한 rfid 태그 아이디 생성 방법 및 충돌회피를 위한 아이디를 가지는 rfid 태그 |
CN102158560A (zh) * | 2011-04-20 | 2011-08-17 | 复旦大学 | 云计算环境下面向服务部署优化的协同动态双缓冲池 |
CN107609217A (zh) * | 2017-08-09 | 2018-01-19 | 中建钢构有限公司 | 碰撞校核数据的处理方法及装置 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN109947411A (zh) * | 2019-03-29 | 2019-06-28 | 成都章鱼侠科技股份有限公司 | 分布式软件生成唯一id主键的方法 |
CN110737806A (zh) * | 2019-09-09 | 2020-01-31 | 贝壳技术有限公司 | 面向业务实体的全局id生成方法及装置 |
CN110928912A (zh) * | 2018-09-20 | 2020-03-27 | 北京京东尚科信息技术有限公司 | 一种生成唯一标识的方法和装置 |
CN111782346A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 基于同库模式的分布式事务全局id生成方法及装置 |
-
2020
- 2020-12-15 CN CN202011478781.7A patent/CN112506929A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050050443A1 (en) * | 2003-08-26 | 2005-03-03 | International Business Machines Corporation | System and method for starting a buffer pool |
US20080022059A1 (en) * | 2006-07-21 | 2008-01-24 | Zimmerer Peter K | Sequencing transactions and operations |
KR20090029552A (ko) * | 2007-09-18 | 2009-03-23 | 광주과학기술원 | 충돌 회피를 위한 rfid 태그 아이디 생성 방법 및 충돌회피를 위한 아이디를 가지는 rfid 태그 |
CN102158560A (zh) * | 2011-04-20 | 2011-08-17 | 复旦大学 | 云计算环境下面向服务部署优化的协同动态双缓冲池 |
CN107609217A (zh) * | 2017-08-09 | 2018-01-19 | 中建钢构有限公司 | 碰撞校核数据的处理方法及装置 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN110928912A (zh) * | 2018-09-20 | 2020-03-27 | 北京京东尚科信息技术有限公司 | 一种生成唯一标识的方法和装置 |
CN109947411A (zh) * | 2019-03-29 | 2019-06-28 | 成都章鱼侠科技股份有限公司 | 分布式软件生成唯一id主键的方法 |
CN110737806A (zh) * | 2019-09-09 | 2020-01-31 | 贝壳技术有限公司 | 面向业务实体的全局id生成方法及装置 |
CN111782346A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 基于同库模式的分布式事务全局id生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108959386B (zh) | 分布式全局唯一id生成方法、装置、设备和存储介质 | |
CN106648446B (zh) | 一种用于时序数据的存储方法、装置及电子设备 | |
CN107807982B (zh) | 一种异构数据库的一致性校验方法及装置 | |
JP4932726B2 (ja) | データのランダムに命名したブロック用の記憶システム | |
US9552349B2 (en) | Methods and apparatus for performing spelling corrections using one or more variant hash tables | |
CN109542979B (zh) | 一种区块链系统快速同步及简精数据存储的方式 | |
CN107305586B (zh) | 索引生成方法、索引生成装置及搜索方法 | |
CN104572781B (zh) | 一种交易日志产生方法和装置 | |
US8396840B1 (en) | System and method for targeted consistency improvement in a distributed storage system | |
US10649905B2 (en) | Method and apparatus for storing data | |
US20150220684A1 (en) | System and method for characterizing biological sequence data through a probabilistic data structure | |
CN105260136A (zh) | 数据读写方法及分布式存储系统 | |
WO2015109250A1 (en) | CREATING NoSQL DATABASE INDEX FOR SEMI-STRUCTURED DATA | |
CN111046036A (zh) | 数据同步方法、装置、系统及存储介质 | |
TW201800967A (zh) | 分布式流式資料處理的方法和裝置 | |
CN105612518A (zh) | 用于自主存储器搜索的方法及系统 | |
EP3438845A1 (en) | Data updating method and device for a distributed database system | |
CN110647531A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN111291235A (zh) | 一种基于时序数据库的元数据存储方法及装置 | |
CN111163126A (zh) | 一种基于Ceph分布式存储的异地备份恢复方法 | |
WO2017020735A1 (zh) | 一种数据处理方法、备份服务器及存储系统 | |
CN112506929A (zh) | 一种基于分布式id生成的避免id碰撞的升级方法 | |
US10606829B1 (en) | Methods and systems for identifying data inconsistencies between electronic record systems using data partitioning | |
CN111787074A (zh) | 一种文件同步方法及终端 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |