CN109241057B - 一种用于分布式系统的数字id生成方法 - Google Patents
一种用于分布式系统的数字id生成方法 Download PDFInfo
- Publication number
- CN109241057B CN109241057B CN201810969674.0A CN201810969674A CN109241057B CN 109241057 B CN109241057 B CN 109241057B CN 201810969674 A CN201810969674 A CN 201810969674A CN 109241057 B CN109241057 B CN 109241057B
- Authority
- CN
- China
- Prior art keywords
- data table
- data
- creating
- database
- digital
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及分布式系统管理方法技术领域,具体为一种用于分布式系统的数字ID生成方法,包括以下内容:数据表创建步骤,在数据库中创建ID数据表;数据表路由步骤,应用接收到ID生成的调用请求后随机选取ID数据表;ID生成步骤,应用向选取的ID数据表执行生成命令;数据表创建步骤包括:步骤一:在数据库中创建N张ID数据表;步骤二:在每张ID数据表中均创建一个ID字段;步骤三:设置ID字段为自增类型,同时设置自增步长为N且N张ID数据表的ID字段的起始值依次加一。本发明提供的一种用于分布式系统的数字ID生成方法,能够解决现有分布式系统的数字ID的生成方法所存在的无法保证递增趋势、查询效率低以及无法应对多并发情况等问题。
Description
技术领域
本发明涉及分布式系统管理方法技术领域,具体为一种用于分布式系统的数字ID生成方法。
背景技术
在分布式系统中,经常需要使用全局唯一数字ID定义对应的数据。这个数字ID基本需求包括以下几点:1、全局唯一;2、占用相对较少,方便将ID进行DB存储,方便索引;3、性能高,可用性高。
分布式系统下实现唯一数字ID的方式较多,常见的有下面几种:
1、UUID算法,其核心思想是结合机器的硬件、时间以及随机种子数来生成唯一的数字ID。
2、基于Redis的分布式ID生成器:使用41bit来存放时间,精确到毫秒,可以使用41年;使用12bit来存放逻辑分片ID,最大分片ID是4095;使用10bit来存放自增长ID,意味着每个节点,每毫秒最多可以生成1024个ID。
3、队列/ID池的方式,即预先生成一定量的数字ID,并放到一个队列/ID池里,每次操作时,从队列中读取一个ID。
以上的这些方式中,UUID的缺点在于其无法保证趋势递增,同时若UUID过长,往往用字符串表示,作为主键建立索引查询效率低,常见优化方案为“折半存储”,然而折半后并不能保证唯一性。基于Redis的分布式ID生成器的缺点在于需要单独部署Redis且性能较差,缺乏稳定性。而ID池的缺点在于,需要提前生成,无法保证趋势递增,需要部署单独的服务进行维护。在分布式应用横向扩展服务的情况下,上面几种方式都不能做到既稳定,又高效地生成数字型唯一ID。
发明内容
本发明意在提供一种用于分布式系统的数字ID生成方法,能够解决现有分布式系统的数字ID的生成方法所存在的无法保证递增趋势、查询效率低以及无法应对多并发情况等问题。
为了解决上述技术问题,本专利提供如下技术方案:
一种用于分布式系统的数字ID生成方法,包括以下内容:
数据表创建步骤,在数据库中创建ID数据表;
数据表路由步骤,应用接收到ID生成的调用请求后随机选取ID数据表;
ID生成步骤,应用向选取的ID数据表执行生成命令,相应的ID数据表返回生成数据的ID字段值,应用根据该ID字段值生成的ID返回给调用程序;
其中,数据表创建步骤包括:
步骤一:在数据库中创建N张ID数据表;
步骤二:在每张ID数据表中均创建一个ID字段;
步骤三:设置ID字段为自增类型,同时设置自增步长为N且N张ID数据表的ID字段的起始值依次加一。
本发明技术方案中,在数据库中创建多张ID数据表,利用数据库内数据表的字段的自增功能,保证数字ID自增,通过设置各个ID数据表的起始值和步长,保证其在自增后不会发生重复,确保数字ID的唯一性;通过使用多数据表路由的方式,可以在高并发的情况下,降低单数据表的读写量,应对高并发的压力,确保数字ID的高效生成,保证系统稳定工作。同时由于采用数据库的方式进行ID生成,在性能要求较高时,只需要增加数据库服务器的个数即可,这是现在的UUID方式以及Redis方式所不具备的优势;由于其本身就是利用数据库来生成的ID因此很方便将ID进行DB存储或索引。
进一步,所述数据表创建步骤以及数据表添加步骤中的数据库为多个数据库,数据表路由步骤包括数据库选取步骤和数据表选取步骤,数据库选取步骤用于已有的数据库中随机选择P个数据库,所述数据表选取步骤用于从P个数据库中随机选取Q个ID数据表。多数据库可以有效降低单个数据库的压力,有利于进行负载的均衡调配,应对高并发的问题。
进一步,所述P和Q均为1。
进一步,所述应用为多个应用,还包括应用路由步骤,所述应用路由步骤用于根据调用请求的内容以及路由规则将调用请求分发给不同的应用。如果在运行中性能受到了数据库性能的限制,可以通过横向扩展数据库的个数(接入多数据源)来提高性能。如果性能受到了应用服务器的限制,则可以通过增加应用服务的思路横向扩展应用服务器个数,本申请技术方案的拓展方式极其灵活,可以根据实际需求,定制服务的性能,适用于各种企业。
进一步,在数据表创建步骤的步骤三中还会设置所述ID字段的类型为bigint类型。
bigint类型的数据范围为-2^63到2^63-1,足够企业进行使用。
进一步,还包括数据表拓展步骤,所述数据表拓展步骤具体包括:
步骤一:按照原有N张ID数据表的各个字段的设置在数据库中创建M张新增的ID数据表;
步骤二:统计当前原有的N张ID数据表的最大值X;
步骤三:设置N+M张ID数据表的ID字段的起始值依次为X+1至X+N+M并设置自增步长为N+M。
当ID数据表进行拓展时,通过将起始值设置在当前的最大值之上,避免出现重复的数字ID。
进一步,数据表创建步骤中还会设置ID数据表的权限,所述权限用于控制能够读写该ID数据表的应用。通过权限控制不同的应用对数据表的读写,进而控制每个应用能够使用的ID范围。
进一步,数据表创建步骤中还会创建一个备注字段,所述备注字段用于记录生成该ID的应用信息。方便进行调试和统计。
附图说明
图1为本发明一种用于分布式系统的数字ID生成方法实施例中的运行流程图。
具体实施方式
下面通过具体实施方式进一步详细说明:
实施例一
如图1所示,本实施例中一种用于分布式系统的数字ID生成方法,包括以下内容:
数据表创建步骤,在数据库中创建ID数据表;
数据表创建步骤包括:
步骤一:在数据库中创建N张ID数据表;该数据库可以为单数据库也可以为多数据库,本实施例中为3个数据库;
步骤二:在每张ID数据表中均创建一个ID字段和一个备注字段;
步骤三:设置ID字段为自增类型,同时数据的类型为bigint类型,同时设置自增步长为N且N张ID数据表的ID字段的起始值依次加一。
应用路由步骤,根据调用请求的内容以及路由规则将调用请求分发给不同的应用。
数据表路由步骤,应用接收到ID生成的调用请求后随机选取一个ID数据表;数据表路由步骤包括数据库选取步骤和数据表选取步骤,数据库选取步骤用于已有的数据库中随机选择一个数据库,数据表选取步骤用于从选择的数据库中随机选取一个ID数据表,本实施例中,数据表创建步骤中还会设置ID数据表的权限,权限用于控制能够读写该ID数据表的应用,应用选择ID数据表时首先获取自己权限范围内的ID数据表,然后从这些ID数据表中随机地抽取一个ID数据表。
ID生成步骤,应用向选取的ID数据表执行生成命令,ID数据表生成一条数据并在备注字段中填写应用的信息;返回生成的数据的ID字段值,应用将该ID字段值作为生成的ID返回给应用分发程序,由应用分发程序返回给最初的调用程序。
还包括数据表拓展步骤,数据表拓展步骤具体包括:
步骤一:按照原有N张ID数据表的各个字段的设置在数据库中创建M张新增的ID数据表;
步骤二:统计当前原有的N张ID数据表的最大值X;
步骤三:设置N+M张ID数据表的ID字段的起始值依次为X+1至X+N+M并设置自增步长为N+M。
具体到本实施例中,共有三个应用:App1、App2以及App3,以及三个数据库DB1、DB2以及DB3,App1、App2、App3可以理解为服务提供者,每个服务提供者都接入多个数据库,每个数据库中创建3个专门生成ID的表格,设有一个自增的ID字段,表tb1,tb2,tb3…tb9的起始值分别是1,2,3…9;且自增的步长是9,保证数字ID自增以及唯一性;每次调用的时候首先由路由应用做分发处理,找到服务提供者,例如命中的是App1,App1提供服务的时候对数据表做路由处理,随机选取一个ID数据表,例如DB3.tb8。由于路由是随机的,长时间运行之后tb1,tb2…tb9中数据量不会差别太大,最大值比较接近。
本实施例中还公开了一种使用了上述方法的用于分布式系统的数字ID生成系统,包括数据库、应用模块以及应用分发模块:其中:
数据库为多个数据库,其分布在不同的数据库服务器上,数据库内设有N张ID数据表,每张的ID数据表中均创建有一个ID字段和一个备注字段;ID字段为自增类型,ID字段的类型为bigint类型,自增步长为N且N张ID数据表的ID字段的起始值依次加一。
应用路由模块用于根据调用请求的内容以及路由规则将调用请求分发给不同的应用模块。
应用模块包括数据表路由模块和ID生成模块,数据表路由模块用于在应用接收到ID生成的调用请求后随机选取一个ID数据表,数据表路由模块包括数据库选取模块和数据表选取模块,数据库选取模块用于已有的数据库中随机选择一个数据库,数据表选取模块用于从选择的数据库中随机选取一个ID数据表,ID生成模块用于向选取的ID数据表发送数据生成命令,ID数据表返回生成数据的ID字段值,ID生成模块将该ID字段值作为生成的ID返回给调用程序。
还包括数据表拓展模块、权限管理模块,数据表拓展模块包括数据表创建模块、最大值筛选模块、初始值设置模块以及步长设置模块,数据表创建模块用于按照原有N张ID数据表的各个字段的设置在数据库中创建M张新增的ID数据表;最大值筛选模块用于统计当前原有的N张ID数据表的ID字段的最大值X;初始值设置模块用于设置N+M张ID数据表的ID字段的起始值依次为X+1至X+N+M;步长设置模块用于设置N+M张ID数据表的ID字段的自增步长为N+M。
当ID数据表进行拓展时,通过将起始值设置在当前的最大值之上,避免出现重复的数字ID。
权限管理模块用于每个应用模块所能够读写的ID数据表范围。通过权限控制不同的应用的对数据表的读写,进而控制每个应用能够使用的ID范围。
通过使用多数据表路由的方式,可以在高并发的情况下,降低单数据表的读写量,应对高并发的压力,确保数字ID的高效生成,保证系统稳定工作。同时由于采用数据库的方式进行ID生成,在性能要求较高时,只需要增加数据库服务器的个数即可,这是现在的UUID方式以及Redis方式所不具备的优势。
多数据库可以有效降低单个数据库的压力,有利于进行负载的均衡调配,应对高并发的问题。如果在运行中性能受到了数据库性能的限制,可以通过横向扩展数据库的个数(接入多数据源)来提高性能。如果性能受到了应用服务器的限制,则可以通过增加应用服务的思路横向扩展应用服务器个数,本申请技术方案的拓展方式及其灵活,可以根据实际需求,定制服务的性能,适用于各种企业。
实施例二
本实施例与实施例一的区别在于,本实施例中,应用根据调用请求的内容生成P和Q的数值,所述调用请求包括保密调用请求和普通调用请求,所述保密调用请求包括保密等级,所述保密调用请求以及普通调用请求均包括设备批次,所述保密等级越高,P越大,所述设备批次越新,Q越大,数据库选取步骤用于已有的数据库中随机选择P个数据库,所述数据表选取步骤用于从P个数据库中随机选取Q个ID数据表,ID生成步骤中将从Q个ID数据表中所得到的Q个ID字段值拼接作为生成的ID返回给调用程序,P越大,选取的数据库越多,进而得到的Q个ID数据表越随机,生成的ID的随机性越强,满足保密需求,Q越大,选取的ID字段值越多,拼接后的字段长度越长,本实施例中,通过上述的设置,可以满足保密性的需求,同时机器批次越新P越大,进而通过最后的ID值的长度,就可以得知分布式系统内某一个ID对应的机器的新旧以及批次号,方便进行调度,同一批次内各个机器由于ID数据表自身是自增的,不会存在重复,因为不同批次的机器的P值不同,因此,最终的ID号会相差较大的数量级,例如当ID数据表的自增ID值为三位数时,P每次加一,都意味着数量级增大1000倍,因此不同批次的机器的编号范围基本没有重叠,为了确保数字ID唯一,可以在ID生成后进行重复校验步骤,以查找系统中是否已经包含该数字ID。
以上的仅是本发明的实施例,方案中公知的具体结构及特性等常识在此未作过多描述,所属领域普通技术人员知晓申请日或者优先权日之前发明所属技术领域所有的普通技术知识,能够获知该领域中所有的现有技术,并且具有应用该日期之前常规实验手段的能力,所属领域普通技术人员可以在本申请给出的启示下,结合自身能力完善并实施本方案,一些典型的公知结构或者公知方法不应当成为所属领域普通技术人员实施本申请的障碍。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本申请要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。
Claims (5)
1.一种用于分布式系统的数字ID生成方法,其特征在于:包括以下内容:
数据表创建步骤,在数据库中创建ID数据表;
数据表路由步骤,应用接收到ID生成的调用请求后随机选取ID数据表;
ID生成步骤,应用向选取的ID数据表执行生成命令,相应的ID数据表返回生成数据的ID字段值,应用根据ID字段值生成ID返回给调用程序;
其中,数据表创建步骤包括:
步骤一:在数据库中创建N张ID数据表;
步骤二:在每张ID数据表中均创建一个ID字段;
步骤三:设置ID字段为自增类型,同时设置自增步长为N且N张ID数据表的ID字段的起始值依次加一;
所述数据表创建步骤中的数据库为多个数据库,数据表路由步骤包括数据库选取步骤和数据表选取步骤,数据库选取步骤用于已有的数据库中随机选择P个数据库,所述数据表选取步骤用于从P个数据库中随机选取Q个ID数据表;
应用根据调用请求的内容生成P和Q的数值;所述调用请求包括保密调用请求和普通调用请求,所述保密调用请求以及普通调用请求均包括设备批次,所述设备批次越新,Q越大;
还包括数据表拓展步骤,所述数据表拓展步骤具体包括:
步骤一:按照原有N张ID数据表的各个字段的设置在数据库中创建M张新增的ID数据表;
步骤二:统计当前原有的N张ID数据表的最大值X;
步骤三:设置N+M张ID数据表的ID字段的起始值依次为X+1至X+N+M并设置自增步长为N+M。
2.根据权利要求1所述的一种用于分布式系统的数字ID生成方法,其特征在于:所述应用为多个应用,还包括应用路由步骤,所述应用路由步骤用于根据调用请求的内容以及路由规则将调用请求分发给不同的应用。
3.根据权利要求1所述的一种用于分布式系统的数字ID生成方法,其特征在于:在数据表创建步骤的步骤三中设置所述ID字段的类型为bigint类型。
4.根据权利要求1所述的一种用于分布式系统的数字ID生成方法,其特征在于:数据表创建步骤中设置ID数据表的权限,所述权限用于控制能够读写该ID数据表的应用。
5.根据权利要求1所述的一种用于分布式系统的数字ID生成方法,其特征在于:数据表创建步骤中还会创建一个备注字段,所述备注字段用于记录生成该ID的应用信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810969674.0A CN109241057B (zh) | 2018-08-23 | 2018-08-23 | 一种用于分布式系统的数字id生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810969674.0A CN109241057B (zh) | 2018-08-23 | 2018-08-23 | 一种用于分布式系统的数字id生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109241057A CN109241057A (zh) | 2019-01-18 |
CN109241057B true CN109241057B (zh) | 2020-12-08 |
Family
ID=65068257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810969674.0A Active CN109241057B (zh) | 2018-08-23 | 2018-08-23 | 一种用于分布式系统的数字id生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241057B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110968589A (zh) * | 2019-12-18 | 2020-04-07 | 浙江明度智控科技有限公司 | 一种分布式系统中自增id的管理方法和装置 |
CN111949666B (zh) * | 2020-08-31 | 2023-12-05 | 深圳赛安特技术服务有限公司 | 标识生成方法、装置、电子设备及存储介质 |
CN112966035A (zh) * | 2021-03-08 | 2021-06-15 | 深圳证券通信有限公司 | 一种分布式数字id生成算法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9171077B2 (en) * | 2009-02-27 | 2015-10-27 | International Business Machines Corporation | Scaling dynamic authority-based search using materialized subgraphs |
-
2018
- 2018-08-23 CN CN201810969674.0A patent/CN109241057B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
Non-Patent Citations (1)
Title |
---|
分布式系统唯一ID生成方案汇总;nick hao;《https://www.cnblogs.com/haoxinyue/p/5208136.html》;20160227;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109241057A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110334152B (zh) | 一种数据同步方法、装置及服务器 | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
CN109241057B (zh) | 一种用于分布式系统的数字id生成方法 | |
CN109241056B (zh) | 一种用于分布式系统的数字id生成系统 | |
CN109086139B (zh) | 动态分片方法、设备和计算机存储介质 | |
EP3238421B1 (en) | System for high-throughput handling of transactions in data-partitioned, distributed, relational database management system | |
US9208186B2 (en) | Indexing technique to deal with data skew | |
CN110008665B (zh) | 一种区块链的权限控制方法及装置 | |
CN101976314B (zh) | 权限控制方法和系统 | |
CN102402602A (zh) | 一种实时数据库的b+树索引方法及装置 | |
CN103064927A (zh) | 分布式文件系统的数据访问方法和装置 | |
CN102932415A (zh) | 一种镜像文件存储方法及装置 | |
CN103067463A (zh) | 用户root权限集中管理系统和管理方法 | |
CN111722918A (zh) | 业务标识码生成方法、装置、存储介质及电子设备 | |
CN109358874A (zh) | 业务规则更新方法、装置、计算机设备和存储介质 | |
CN105447166A (zh) | 一种基于关键字查找信息的方法及系统 | |
CN105045762A (zh) | 一种配置文件的管理方法及装置 | |
CN108399175A (zh) | 一种数据存储、查询方法及其装置 | |
CN105373376A (zh) | 用于配置软件应用的方法和装置 | |
CN113760847A (zh) | 日志数据处理方法、装置、设备及存储介质 | |
CN113407626B (zh) | 一种基于区块链的规划管控方法、存储介质及终端设备 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN111930720A (zh) | 数据倾斜的处理方法、系统、电子设备和介质 | |
CN111428114A (zh) | Elasticsearch搜索引擎的索引创建方法及装置 | |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |