CN108959386B - 分布式全局唯一id生成方法、装置、设备和存储介质 - Google Patents
分布式全局唯一id生成方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN108959386B CN108959386B CN201810550002.6A CN201810550002A CN108959386B CN 108959386 B CN108959386 B CN 108959386B CN 201810550002 A CN201810550002 A CN 201810550002A CN 108959386 B CN108959386 B CN 108959386B
- Authority
- CN
- China
- Prior art keywords
- bits
- generating
- bit
- unique
- generation
- 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
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式全局唯一ID生成方法、装置、设备和存储介质,所述方法包括:S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;S2:生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;S3:根据生成请求提供的节点序列号,生成节点序列位;S4:根据配置文件中的当前序列最大值以递增方式生成并发递增位;S5:将生成请求提供的业务渠道号,做为长整数返回,生成业务渠道号;S6:将从步骤S2‑S5中获得的区间位拼接获得一个全局分布式唯一ID。上述方法不依赖于数据库自增序列,优化了高频生成请求的生成效率。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及分布式全局唯一ID生成方法、装置、设备和存储介质。
背景技术
现在基于计算机技术的业务系统中,为了分辨和管理,对每一项业务均生成一个与之对应的具有唯一性的ID,正如人们的身份证一样。
目前针对分布式数据库的全局ID的主流生成方法有以下两种方案:UUID/GUID:它是32位26个字母和数字组成的字符串。这种方案大部分程序语言和数据库均提供直接支持。如果用这种方式,全局唯一ID不需要额外任何开发工作量。但这种方式为数据库的ID,其索引效率非常低效,因为它的生成32位字符串是随机的。Snowflake(雪花算法),它是18位10进制数字组成,41位Bits的timestamp+10位Bits自定义的机器码+12位Bits累加计数器组成。这算法生成的ID不但是在主流数据库数字类型Interger长度内的十进制数字,关键还是在一定时间内连续自增排序的,且不会重复或并发的问题。但是该方法至少要18位数字起。有字长的限制。
上述两种方案无法独立运作,需要依赖数据库实现运行,因此,直接导致其低性能、高延迟和过长位描述的缺陷。
发明内容
有鉴于此,有必要针对分布式全局唯一ID生成方法,低性能、高延迟和过长位描述的缺陷,提供一种分布式全局唯一ID生成方法、装置、设备和存储介质。
一种分布式全局唯一ID生成方法,用于分布式数据库和分布式系统,所述生成方法包括以下步骤:
S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;
S2:生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;
S3:接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;
S4:根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当
前序列最大值以递增方式生成并发递增位;
S5:接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求
携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数
返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;
S6:将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
在其中一个实施例中,所述步骤S2还包括将所述时间区间位进行左移位操作,左移动位数个数为21位。
在其中一个实施例中,所述步骤S3还包括将所述节点序列位进行左移位操作,左移动位数个数为18位。
在其中一个实施例中,所述步骤S4还包括将所述并发递增位进行左移位操作,左移动位数个数为8位,具体步骤如下:节点中通过两个变量A对B,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值做为长整数向左移动8位,若请求毫秒数与A不同,则将A设置为新的请求毫秒数,并将B值置为0,B值做为长整数向左移动8位。
在其中一个实施例中,将所述时间区间位、所述节点序列位、所述并发递增位以及所述业务渠道号,通过位操作符取或操作,获得一个新的长整数,截取所述新的长整数后48位比特位为当日内唯一ID的比特位。
在其中一个实施例中,将所述当日内唯一ID的比特位进行BASE64位编码操作,编码后的结果为8位字符。
一种分布式全局唯一ID生成装置,用于分布式数据库和分布式系统,所述生成装置包括:设定单元,用于设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;生成时间位单元,用于生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;生成节点位单元,用于接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;生成并发递增单元,用于根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;生成渠道号单元,用于接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;拼接单元,用于将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
在其中一个实施例中,所述生成时间位单元还用于将所述时间区间位进行左移位操作,左移动位数个数为21位;生成节点位单元还用于将所述节点序列位进行左移位操作,左移动位数个数为18位;所述并发递增单元还用于将所述并发递增位进行左移位操作,左移动位数个数为8位。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述方法的步骤。
一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述方法的步骤。
上述分布式全局唯一ID生成方法、装置、设备和存储介质,通过设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成。生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数,根据生成请求提供的节点序列号,生成节点序列位,根据配置文件中的当前序列最大值以递增方式生成并发递增位,将生成请求提供的业务渠道号,做为长整数返回,生成业务渠道号,将从步骤S2-S5中获得的区间拼接获得一个分布式唯一ID,不需要依赖于数据库自增序列,不需要分布式ID生成服务器,减少了系统操作,优化了高频生成请求的生成效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
图1为一个实施例中提供的分布式全局唯一ID生成方法的流程图;
图2为一个实施例中分布式48位唯一ID的区间位示意图;
图3为一个实施例中分布式全局唯一ID生成装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
作为一个较好的实施例,如图1所示,一种分布式全局唯一ID生成方法,用于分布式数据库和分布式系统,该生成方法包括以下步骤:
S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;分布式全局唯一ID由所有区间拼接而成;
全局唯一ID,即全局标识符,简称GUID(Globally Unique Identifier),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-1069-A2DD-08002B30309D},它实质上是一个128位长的二进制整数。GUID的主要目的是产生完全唯一的数字。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID,GUID的总数也足够大,达到了2128(3.4×1038)个,所以随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。在分布式系统或分布式数据库中,经常需要使用全局唯一ID(GUID)定义对应的数据,GUID的基本需求包括全局唯一,占用相对较少,方便DB存储和索引,时间友好,方便业务查询,性能高,可用性高。如图2所示,通过将一个多位数的ID划分成多个区间,采用不同的方法从而获得每个区间的数字串,能够增加获取的数字串的随机性,并且与现有的ID生成方法相比,现有的方法需要每个字节逐个生成,本技术方案能够简化生成步骤,并且由于采用了不同的生成方法从而进一步防止出现重复的ID。
S2:生成时间区间位,时间区间位为当前毫秒长整数减去当日零点毫秒长整数;
生成时间区间位:使用System.currentMils返回当前时间毫秒数,并设置到变量curMils,通过new Date方法获得当前时间对象,将其转换为Calendar对象后,设置当前小时、分、秒为0,并返回当前毫秒数并设置到dayStartMils,将curMils与dayStartMils相减。
27位比特位可以表达范围为0至134,217,728(2的27次方)整数,每天时间范围为0至86,400,000毫秒,日内时间范围由于表达范围大于当日最大时间范围,满足日内时间序列要求。
S3:接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;
唯一id方法可以作为微服务的方法,那么这个生成请求就来自各个调用方,如服务器的请求,主要是服务节点的请求。节点序列位,生成请求参数nodeId表示。3位节点数位,可表达范围位0到7,限制服务器节点总数为8。
S4:根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当
前序列最大值以递增方式生成并发递增位;
10位可以表达范围为0至1024单个节点会记录当前毫秒数并发序列,若同毫秒对唯一ID生成请求,则将记录位递增加1,由此可见,单节点并发生成日内唯一ID的毫秒级并发支持为1024个。
生成并发递增位,主要实现如下,通过sequenceMask做为递增数的掩码,sequence为并发递增位值,通过判断当前时间是否与上次生成请求时间目同,若目同将sequence加1并掩码并且操作,若seqence结果为0,表示当前毫秒递增位己占满,需要侵占下一毫秒数,如程序中调用的tilNextMils,然后将timeStamp设置到lastTimeStamp做为当前节点当前执行的节点时间,并将sequence做为序列位返回。
S5:接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求
携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数
返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;
请求提供的渠道号是业务方的请求,一般跟业务相关,可以来自于客户端。业务编码位,生成请求参数bizId表示。8位业务渠道位:8位业务渠道位支持业务渠道个数为256个渠道。通过业务渠道位,将唯一ID用于不同业务渠道线,以共并发使用。
S6:将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
将从步骤S2-S5中获得的区间拼接获得一个分布式唯一ID,将所有区间的数字串拼接在一起后,能够获得一个唯一的ID。需要注意的是,上述步骤S2-S5中的S2、S3……S5只是为了便于描述,并不为限定步骤顺序,本领域技术人员可以理解,并不需要严格按照上述顺序来执行上述步骤,例如,S2、S3、S4可以并列执行,也可以倒序或顺序执行。
在一个实施例中,步骤S2还包括将时间区间位进行左移位操作,左移动位数个数为21位。
左移以及取或整合,将各区间的长整数做左移操作,并且取或,如以下代码,longid=timeValue<<21|(nodeId<<18)|(sequence<<10)|biz id。
在一个实施例中,步骤S3还包括将节点序列位进行左移位操作,左移动位数个数为18位。
获取数字串的前4位数字作为区间,由于不同服务器具有不同的节点名称,故生成的数字串各不一样,左移18位能够保证ID的唯一性。
在一个实施例中,步骤S4还包括将并发递增位进行左移位操作,左移动位数个数为8位,具体步骤如下:节点中通过两个变量A对B,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值做为长整数向左移动8位,若请求毫秒数与A不同,则将A设置为新的请求毫秒数,并将B值置为0,B值做为长整数向左移动8位。
节点中通过两个变量A对B,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当生成请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值做为长整数向左移动8位,若生成请求毫秒数与A不同,则将A设置为新的生成请求毫秒数,并将B值置为0,B值做为长整数向左移动8位。前48bit,记录从1980年1月1日00:00:00时间流逝数,单位毫秒。48bit能够记录8900多年,也就是能够标示到公元10000年以后。mac地址段,存放48bit mac地址,每台机器都唯一。对一台机器需要部署多个全局ID服务的情况,可以将这个字段进行随机处理。因长度有48位,冲突概率可以忽略。自增sequence段,长度为14个bit,理论上每毫秒最多可以产生16384个sequence,每秒1600万。这样产生的本地生成字符串类型全局唯一ID因长度过长,不可能将这些数据放到一个长整形数据类型来表示。所以最终通过32进制编码将数据压缩成一个22字符长度的字符串,实现在无网络环境下生成短小无特殊字符全局唯一ID。
序列号就是一系列的自增ID(多线程建议使用atomic),为了处理在同一毫秒内需要给多条消息分配ID,若同一毫秒把序列号用完了,则“等待至下一毫秒”。
总体来说,是一个很高效很方便的GUID产生算法,一个int64_t字段就可以胜任,不像现在128bit的GUID算法,即使无法保证严格的id序列性,但是对于特定的业务,比如用做游戏服务器端的GUID产生会更方便。此外,在多线程的环境下,序列号使用atomic可以在代码实现上有效减少锁的密度。
在一个实施例中,将时间区间位、节点序列位、并发递增位以及业务渠道号,通过位操作符取或操作,获得一个新的长整数,截取新的长整数后48位比特位为当日内唯一ID的比特位。
将四个结果时间区间位、节点序列位、并发递增位以及业务渠道号做比特位的或操作,获得一个新的长整数,截取新的长整数后48位比特位为当日内唯一ID的比特位,得到结果,解决了服务时间回退以后,snowflake获取全局ID需要的时间等待问题。
在一个实施例中,将所述当日内唯一ID的比特位进行BASE64位编码操作,编码后的结果为8位字符。
如下面代码逻辑,将唯一标识ID长整数通过转字节,取48位为6个byte字节数组,做Base64编码操作,将编码结果字符串做为字符串做为最后唯一ID。
如图3所示,在一个实施例中,提供了一种分布式全局唯一ID生成装置,用于分布式数据库和分布式系统,该生成装置包括:
设定单元,用于设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;
设定单元,用于设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;
生成时间位单元,用于生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;
生成节点位单元,用于接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;
生成并发递增单元,用于根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;
生成渠道号单元,用于接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;
拼接单元,用于将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
在一个实施例,所述生成时间位单元还用于将所述时间区间位进行左移位操作,左移动位数个数为21位;生成节点位单元还用于将所述节点序列位进行左移位操作,左移动位数个数为18位;所述并发递增单元还用于将所述并发递增位进行左移位操作,左移动位数个数为8位。
在一个实施例中,提出了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行以下步骤:S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;S2:生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;S3:接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;S4:根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;S5:接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;S6:将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
在一个实施例中,所述步骤S2还包括将所述时间区间位进行左移位操作,左移动位数个数为21位。
在一个实施例中,所述步骤S3还包括将所述节点序列位进行左移位操作,左移动位数个数为18位。
在一个实施例中,所述步骤S4还包括将所述并发递增位进行左移位操作,左移动位数个数为8位,具体步骤如下:节点中通过两个变量A对B,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值做为长整数向左移动8位,若请求毫秒数与A不同,则将A设置为新的请求毫秒数,并将B值置为0,B值做为长整数向左移动8位。
在一个实施例中,将所述时间区间位、所述节点序列位、所述并发递增位以及所述业务渠道号,通过位操作符取或操作,获得一个新的长整数,截取所述新的长整数后48位比特位为当日内唯一ID的比特位。
在一个实施例中,将所述当日内唯一ID的比特位进行BASE64位编码操作,编码后的结果为8位字符。
在一个实施例中,提出了一种存储有计算机可读指令的存储介质,其特征在于,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行以下步骤:S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;S2:生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;S3:接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;S4:根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;S5:接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,做为长整数返回,生成业务渠道号;S6:将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
在一个实施例中,所述步骤S2还包括将所述时间区间位进行左移位操作,左移动位数个数为21位。
在一个实施例中,所述步骤S3还包括将所述节点序列位进行左移位操作,左移动位数个数为18位。
在一个实施例中,所述步骤S4还包括将所述并发递增位进行左移位操作,左移动位数个数为8位,具体步骤如下:节点中通过两个变量A对B,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值做为长整数向左移动8位,若请求毫秒数与A不同,则将A设置为新的请求毫秒数,并将B值置为0,B值做为长整数向左移动8位。
在一个实施例中,将所述时间区间位、所述节点序列位、所述并发递增位以及所述业务渠道号,通过位操作符取或操作,获得一个新的长整数,截取所述新的长整数后48位比特位为当日内唯一ID的比特位。
在一个实施例中,将所述当日内唯一ID的比特位进行BASE64位编码操作,编码后的结果为8位字符。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁盘或光盘等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种分布式全局唯一ID生成方法,用于分布式数据库和分布式系统,其特征在于,所述生成方法包括以下步骤:
S1:设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;
S2:生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;
S3:接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;
S4:根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;
S5:接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,作为长整数返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;
S6:将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式全局唯一ID。
2.根据权利要求1所述的分布式全局唯一ID生成方法,其特征在于,所述步骤S2还包括将所述时间区间位进行左移位操作,左移动位数个数为21位。
3.根据权利要求1所述的分布式全局唯一ID生成方法,其特征在于,所述步骤S3还包括将所述节点序列位进行左移位操作,左移动位数个数为18位。
4.根据权利要求1所述的分布式全局唯一ID生成方法,其特征在于,所述步骤S4还包括:节点中通过两个变量A与B对所述并发递增位进行左移位操作,左移动位数个数为8位,A记录当前生成请求的当前时间毫秒值,B记录递增数,从0开始,当请求毫秒数与A相同,则将B自增加1并且与10位并发递增掩码做并且操作,若当前掩码后值为0,则将A的值设置为下一个时间毫秒数,B值从0开始继续累加,B值作为长整数向左移动8位,若请求毫秒数与A不同,则将A设置为新的请求毫秒数,并将B值置为0,B值作为长整数向左移动8位。
5.根据权利要求1-4所述的任一方法,其特征在于,将所述时间区间位、所述节点序列位、所述并发递增位以及所述业务渠道号,通过位操作符取或操作,获得一个新的长整数,截取所述新的长整数后48位比特位为当日内唯一ID的比特位。
6.根据权利要求5所述的分布式全局唯一ID生成方法,其特征在于,将所述当日内唯一ID的比特位进行BASE64位编码操作,编码后的结果为8位字符。
7.一种分布式全局唯一ID生成装置,用于分布式数据库和分布式系统,其特征在于,所述生成装置包括:
设定单元,用于设定分布式全局唯一ID的总位数,将分布式全局唯一ID划分为若干个区间;设定每个区间的位数;所述分布式全局唯一ID由所有区间拼接而成;
生成时间位单元,用于生成时间区间位,所述时间区间位为当前毫秒长整数减去当日零点毫秒长整数;
生成节点位单元,用于接收服务器节点发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一节点序列号,根据所述生成请求提供的节点序列号,生成节点序列位;
生成并发递增单元,用于根据服务器预设的配置项,生成配置文件,并根据该配置文件中的当前序列最大值以递增方式生成并发递增位;
生成渠道号单元,用于接收客户端发送的生成分布式全局唯一ID的生成请求,所述生成请求携带了唯一业务渠道号,将所述生成请求提供的业务渠道号,作为长整数返回转换的整数和长度,将整数值作为指定大小的整数生成业务渠道号;
拼接单元,用于将从步骤S2-S5中获得的时间区间位、节点序列位、并发递增位和业务渠道号拼接获得一个分布式唯一ID。
8.根据权利要求7所述的分布式全局唯一ID生成装置,其特征在于,所述生成时间位单元还用于将所述时间区间位进行左移位操作,左移动位数个数为21位;生成节点位单元还用于将所述节点序列位进行左移位操作,左移动位数个数为18位;所述并发递增单元还用于将所述并发递增位进行左移位操作,左移动位数个数为8位。
9.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述方法的步骤。
10.一种存储有计算机可读指令的存储介质,其特征在于,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810550002.6A CN108959386B (zh) | 2018-05-31 | 2018-05-31 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810550002.6A CN108959386B (zh) | 2018-05-31 | 2018-05-31 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108959386A CN108959386A (zh) | 2018-12-07 |
CN108959386B true CN108959386B (zh) | 2023-06-09 |
Family
ID=64493128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810550002.6A Active CN108959386B (zh) | 2018-05-31 | 2018-05-31 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108959386B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109740120A (zh) * | 2018-12-14 | 2019-05-10 | 深圳壹账通智能科技有限公司 | 分布式环境下唯一标识的生成方法、装置、计算机设备 |
CN111353275B (zh) * | 2018-12-21 | 2023-07-04 | 北京宸信征信有限公司 | 一种分布式系统唯一标识符及其生成方法 |
CN109697133A (zh) * | 2018-12-28 | 2019-04-30 | 广州华多网络科技有限公司 | Id生成方法、装置及系统 |
CN111416879A (zh) * | 2019-01-04 | 2020-07-14 | 卓望数码技术(深圳)有限公司 | 一种带有签名的唯一id生成方法、装置、设备及存储介质 |
CN110162573B (zh) * | 2019-05-05 | 2021-04-30 | 中国银行股份有限公司 | 一种分布式序列生成方法、装置及系统 |
CN110147281A (zh) * | 2019-05-15 | 2019-08-20 | 上海淇毓信息科技有限公司 | 优化雪花算法在金融业务中应用的方法、装置、电子设备 |
CN110442642B (zh) * | 2019-06-19 | 2021-11-23 | 北京航天智造科技发展有限公司 | 分布式数据库的数据处理方法、装置和存储介质 |
CN110505306B (zh) * | 2019-08-30 | 2021-12-21 | 公安部交通管理科学研究所 | 一种可指定位数的数据id生成方法 |
CN110555078A (zh) * | 2019-09-02 | 2019-12-10 | 上海摩库数据技术有限公司 | 分布式id生成 |
CN110737806B (zh) * | 2019-09-09 | 2023-12-01 | 贝壳技术有限公司 | 面向业务实体的全局id生成方法及装置 |
CN110634052A (zh) * | 2019-09-20 | 2019-12-31 | 中国银行股份有限公司 | 分布式架构生成订单号的方法及装置 |
CN110674187A (zh) * | 2019-09-24 | 2020-01-10 | 神州数码融信软件有限公司 | 一种全局唯一序列号的生成方法 |
CN110704128B (zh) * | 2019-09-29 | 2023-08-08 | 北京达佳互联信息技术有限公司 | 标识分配方法及装置、标识分配设备和存储介质 |
CN110830608B (zh) * | 2019-11-14 | 2021-06-15 | 腾讯科技(深圳)有限公司 | 一种全局唯一标识符生成方法、装置、设备及存储介质 |
CN110935168B (zh) * | 2019-11-26 | 2023-09-01 | 上海莉莉丝科技股份有限公司 | 用于全球同服架构的分布式id生成方法、装置及设备 |
CN111625543B (zh) * | 2020-05-27 | 2023-08-25 | 贵州易鲸捷信息技术有限公司 | 一种基于HBase表实现全局单调递增的序列的方法 |
CN111741140A (zh) * | 2020-05-29 | 2020-10-02 | 苏州浪潮智能科技有限公司 | 一种分布式id生成方法、系统、终端及存储介质 |
CN111782346B (zh) * | 2020-06-28 | 2024-05-24 | 中国工商银行股份有限公司 | 基于同库模式的分布式事务全局id生成方法及装置 |
CN113467753B (zh) * | 2020-12-31 | 2022-10-04 | 易百信息技术(上海)股份有限公司 | 一种分布式不重复随机序列生成方法和系统 |
CN113420029B (zh) * | 2021-06-25 | 2024-04-12 | 陕西浪潮英信科技有限公司 | 一种分布式系统全局id生成方法、装置、设备及介质 |
CN113626410A (zh) * | 2021-08-11 | 2021-11-09 | 北京神州数字科技有限公司 | 分布式去中心化序列生成方法、装置及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
-
2018
- 2018-05-31 CN CN201810550002.6A patent/CN108959386B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108959386A (zh) | 2018-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108959386B (zh) | 分布式全局唯一id生成方法、装置、设备和存储介质 | |
US10489403B2 (en) | Embracing and exploiting data skew during a join or groupby | |
US20050091443A1 (en) | Search method using coded keys | |
EP2916246A1 (en) | Primary and foreign key relationship identification with metadata analysis | |
CN110505306B (zh) | 一种可指定位数的数据id生成方法 | |
CN103246659A (zh) | 键值数据查询的方法和装置 | |
CN111353275B (zh) | 一种分布式系统唯一标识符及其生成方法 | |
CN111723360B (zh) | 凭证码处理方法、装置及存储介质 | |
CN109951541A (zh) | 一种流水号生成方法及服务器 | |
CN112487253A (zh) | 用户邀请码生成方法、验证方法、装置、设备及存储介质 | |
WO2020000486A1 (zh) | 数据处理方法及装置 | |
CN115757406A (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN111126002A (zh) | 一种数据全局唯一性标识id的生成方法及系统 | |
CN117349291A (zh) | 一种数据库主键短id生成方法、电子设备和介质 | |
CN112383627A (zh) | 一种分布式系统中生成唯一标识的方法 | |
CN111913956A (zh) | 统一业务编码方法及装置 | |
CN115936608B (zh) | 基于交易链路的分布式流水号生成方法、装置及存储介质 | |
CN111708831A (zh) | 全局主键生成方法、装置 | |
US8126929B2 (en) | Method and apparatus for encoding list of variable length structures to support bi-directional scans | |
CN114970464A (zh) | 用于标识生成的方法、装置、终端设备及存储介质 | |
JP6233846B2 (ja) | 可変長ノンスの生成 | |
CN116010498A (zh) | 一种分布式全局唯一规则id的生成方法 | |
CN113163027B (zh) | 数据标识的生成方法、装置、设备及存储介质 | |
US10146509B1 (en) | ASCII-seeded random number generator | |
CN112329393A (zh) | 一种短码id的生成方法、设备、存储介质 |
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 |