一种生成及使用分布式唯一ID的方法技术

技术编号:18530013 阅读:21 留言:0更新日期:2018-07-25 14:50
本公开涉及一种ID生成的方法,特别是一种生成分布式唯一ID的方法。一种生成分布式唯一ID的方法,包括:步骤S100将数字ID的bit位划分为n个区间,n>=4的整数,其中n个区间至少包括:时间戳区间、数据中心ID区间、数据中心中节点ID区间和毫秒内自增数值区间;步骤S200获取n个区间的值,拼接n个区间的值,生成数字ID;步骤S300压缩数字ID的长度,生成分布式唯一ID。本公开通过压缩算法生成长度较短的ID,节省存储空间;根据预设数字和字符转换映射,提高生成分布式唯一ID的性能;适应更多的应用场景,特别是对ID长度有严格限制的情况;同时实现数字ID和压缩的分布式唯一ID之间相互转换。

【技术实现步骤摘要】
一种生成及使用分布式唯一ID的方法
本公开涉及一种ID生成的方法,特别是一种生成及使用分布式唯一ID的方法。
技术介绍
所有的业务系统都有生成ID的需求,根据这个ID建立索引。在分布式系统中,在数据在分片场景下,系统中组件间或组件与第三方接口交互时,如何快速高效的生成系统唯一ID是经常遇到的问题。现有技术中生成ID的方法主要有以下两种:1、UUID:算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成UUID。2、基于Redis的分布式ID生成器:使用41bit来存放时间,精确到毫秒,可以使用41年;使用12bit来存放逻辑分片ID,最大分片ID是4095;使用10bit来存放自增长ID,意味着每个节点,每毫秒最多可以生成1024个ID。其中,UUID的缺点:无法保证趋势递增,同时若UUID过长,往往用字符串表示,作为主键建立索引查询效率低,常见优化方案为“转化为两个uint64整数存储”或者“折半存储”(折半后不能保证唯一性)。基于Redis的分布式ID生成器的缺点:需要单独部署Redis且性能较差。综上,上述现有生成系统唯一ID的技术均适用于ID长度有限、性能要求不高场景。
技术实现思路
为了克服分布式唯一数字ID长度过长,解决现有生成系统唯一ID的技术均适用于ID长度有限、性能要求不高场景的问题,本公开提供了一种生成分布式唯一ID的方法,该方法是一种高性能的生成分布式唯一、保证趋势递增、同时长度较短的ID方法,以满足对ID长度有限制的应用场景。为了实现本公开以上专利技术目的,本公开是通过以下技术方案实现的:步骤S100将数字ID的bit位划分为n个区间,n>=4的整数,其中,所述n个区间至少包括:时间戳区间、数据中心ID区间、数据中心中节点ID区间和毫秒内自增数值区间;步骤S200获取所述n个区间的值后,拼接所述n个区间的值,生成数字ID;步骤S300压缩所述数字ID的长度,生成分布式唯一ID。上述技术方案中,采用将数字ID分区间赋值,再通过压缩算法控制分布式唯一ID的长度,从而克服分布式唯一ID长度过长,生成分布式唯一ID性能不高的问题。进一步,所述步骤S300压缩所述数字ID的长度,生成分布式唯一ID,具体包括:步骤S310设定数字和字符的映射关系;步骤S320将所述数字ID映射为M进制字符串,所述M进制字符串为所述分布式唯一ID,其中M>10的整数。在上述技术方案中,通过设定数字和字符的映射关系确定生成分布式唯一ID的压缩算法,即将数字ID映射为M进制字符串,这种映射转换提升了生成分布式唯一ID算法的性能。进一步,在所述步骤S100和步骤S200中间,进一步包括:步骤S110定义每一所述区间的长度。在上述技术方案中,定义每一所述区间的长度即是设定每一所述区间占用多少bit位。定义每一所述区间的长度的目的是为了通过移位填充运算时使用。同时,在使用生成分布式唯一ID时,通过所述区间长度获取各个区间的值。进一步,在所述步骤S200中获取所述n个区间的值后,拼接所述n个区间的值,生成数字ID,具体包括:步骤S210通过预设算法,获取一所述区间的值;步骤S220判断是否获取全部所述n个区间的值,若没有获取全部所述n个区间的值,则获取下一所述区间的值,执行步骤S210;否则,执行步骤S230;步骤S230将每一所述区间的值转换为bit位表示的值,记为V1,V2,…,Vn;步骤S240根据每一所述区间的长度对V1,V2,…,Vn进行移位填充运算,再将移位填充后的结果V1',V2',…,Vn'进行或运算,生成数字ID,Value_ID=V1'||V2'||…||Vn'。在上述技术方案中,给出拼接所述n个区间的值生成分布式唯一ID的实现。首先,给每个区间根据预设算法进行赋值;根据每一所述区间的长度进行移位填充运算以及或运算,生成分布式唯一ID。这个方案保证生成的分布式ID不能重复。进一步,所述步骤S210通过预设算法,获取一所述区间的值,具体包括:步骤S211获取所述时间戳区间的值,则所述时间戳区间的值为二进制表示的(Tn-Ts),所述TStart为起始时间和所述Tn为当前时间。在上述技术方案中,为了保证生成ID不重复且趋势递增,通过获取时间戳的方式。其优点为不依赖于数据库,灵活方便,且性能优于数据库,同时生成的分布式唯一ID按照时间递增的。进一步,所述步骤S210通过预设算法,获取一所述区间的值,具体包括:步骤S212获取所述数据中心ID区间的值,所述数据中心ID区间的值等于数据库为每个数据中心分配唯一的数据中心ID。进一步,所述步骤S210通过预设算法,获取一所述区间的值,获取所述数据中心中节点ID区间的值,具体包括:步骤S213获取所述数据中心中节点ID区间的值,所述数据中心中节点ID区间的值等于数据库为每数据中心的每工作服务器分配唯一的工作ID。上述技术方案中,数据中心ID和数据中心的每工作服务器ID,在生成分布式唯一ID前已经唯一确定。这样保证所有生成分布式唯一ID都不会含有重复的服务器号,确保唯一性。步骤S214获取所述毫秒内自增数值区间的值。上述技术方案中,分三种情况获取毫秒内自增数值区间的值:第一种情况,如果Ts和Tn在同一毫秒中,则就用前一个ID的毫秒内自增数值加1作为新的毫秒内自增数值。第二种情况,如果Tn比Ts大,随机生成一个毫秒内自增数作为本毫秒内的第一个值。第三种情况,Tn毫秒数没有变化,但自增数超出了区间允许的上限,则等待Tn毫秒数增加。本公开还提供了一种使用分布式唯一ID的方法,其特征在于,具体包括:获取数字和字符的映射关系;将分布式唯一ID映射为数字ID,所述的分布式唯一ID为M进制字符串,其中M>10的整数;将所述数字ID的bit位划分为预设n个区间,以获取任一所述区间的值,所述n个区间至少包括:时间戳区间、数据中心ID区间、数据中心中节点ID区间和毫秒内自增数值区间。上述技术方案中,通过预设的数字和字符的映射关系,实现数字ID和压缩的分布式唯一ID之间相互转换。通过本公开提供的一种生成分布式唯一ID的方法,能够带来以下至少一种有益效果:1、通过压缩算法生成长度较短的ID,节省存储空间;2、根据预设数字和字符转换映射,提高生成分布式唯一ID的性能;3、适应更多的应用场景,特别是对ID长度有严格限制的情况;4、实现数字ID和压缩的分布式唯一ID之间相互转换。附图说明附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。下面将以明确易懂的方式,结合附图说明优选实施方式,一种基于策略路由的路由器负载均衡方法、路由设备及系统的上述特性、技术特征、优点及其实现方式予以进一步说明。图1是本公开一种生成分布式唯一ID的方法第一实施例流程图;图2是本公开生成的分布式唯一ID的区间划分图;图3是本公开一种生成分布式唯一ID的方法第二实施例流程图;图4是本公开一种生成分布式唯一ID的方法第三实施例流程图;图5是本公开一种生成分布式唯一ID的方法第四实施例流程图;图6是本公开一种使用分布式唯一ID的方法的实施例流程图。具体实施方式为了更清楚地说明本公开实施例或现有技术中的本文档来自技高网...

【技术保护点】
1.一种生成分布式唯一ID的方法,其特征在于,包括:步骤S100将数字ID的bit位划分为n个区间,n>=4的整数,其中,所述n个区间至少包括:时间戳区间、数据中心ID区间、数据中心中节点ID区间和毫秒内自增数值区间;步骤S200获取所述n个区间的值后,拼接所述n个区间的值,生成数字ID;步骤S300压缩所述数字ID的长度,生成分布式唯一ID。

【技术特征摘要】
1.一种生成分布式唯一ID的方法,其特征在于,包括:步骤S100将数字ID的bit位划分为n个区间,n>=4的整数,其中,所述n个区间至少包括:时间戳区间、数据中心ID区间、数据中心中节点ID区间和毫秒内自增数值区间;步骤S200获取所述n个区间的值后,拼接所述n个区间的值,生成数字ID;步骤S300压缩所述数字ID的长度,生成分布式唯一ID。2.根据权利要求1所述生成分布式唯一ID的方法,其特征在于,所述步骤S300压缩所述数字ID的长度,生成分布式唯一ID,具体包括:步骤S310设定数字和字符的映射关系;步骤S320将所述数字ID映射为M进制字符串,所述M进制字符串为所述分布式唯一ID,其中M>10的整数。3.根据权利要求1所述生成分布式唯一ID的方法,其特征在于,在所述步骤S100和步骤S200之间,进一步包括:步骤S110定义每一所述区间的长度。4.根据权利要求1所述生成分布式唯一ID的方法,其特征在于,在所述步骤S200获取所述n个区间的值后,拼接所述n个区间的值,生成数字ID,具体包括:步骤S210通过预设算法,获取一所述区间的值;步骤S220判断是否获取全部所述n个区间的值,若没有获取全部所述n个区间的值,则获取下一所述区间的值,执行步骤S210;否则,执行步骤S230;步骤S230将每一所述区间的值转换为bit位表示的值,记为V1,V2,…,Vn;步骤S240根据每一所述区间的长度对V1,V2,…,Vn进行移位填充运算,再将移位填充后的结果V1',V2',…,V...

【专利技术属性】
技术研发人员:李熊发
申请(专利权)人:四川斐讯信息技术有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1