一种分布式数据库的唯一键生成方法技术

技术编号:36778277 阅读:15 留言:0更新日期:2023-03-08 22:07
本发明专利技术公开了分布式数据库技术领域的一种分布式数据库的唯一键生成方法,采用如下的技术方案:具体包括以下步骤:步骤S1:将ID的bit位划分为n个区间,n个区间至少包括:时间戳区间、工作进程区间、序列号位区间;步骤S2:通过预设算法,获取n个区间的值,再通过压缩算法控制分布式唯一ID的长度;步骤S3:给予时间戳区间赋值一防时钟回拨标记位;步骤S4:判断当前时间上一次生成标识的时间,增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID。增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID,解决了ID重复问题;通过压缩算法生成长度较短的ID,节省存储空间。节省存储空间。节省存储空间。

【技术实现步骤摘要】
一种分布式数据库的唯一键生成方法


[0001]本专利技术涉及分布式数据库的
,尤其是涉及一种分布式数据库的唯一键生成方法。

技术介绍

[0002]传统数据库软件开发中,主键自动生成技术是基本需求。而各个数据库对于该需求也提供了相应的支持,比如MySQL的自增键,Oracle的自增序列等。数据分片后,不同数据节点生成全局唯一主键是非常棘手的问题。同一个逻辑表内的不同实际表之间的自增键由于无法互相感知而产生重复主键。虽然可通过约束自增主键初始值和步长的方式避免碰撞,但需引入额外的运维规则,使解决方案缺乏完整性和可扩展性。
[0003]目前有许多第三方解决方案可以完美解决这个问题,如UUID等依靠特定算法自生成不重复键,或者通过引入主键生成服务等。为了方便用户使用、满足不同用户不同使用场景的需求,ApacheShardingSphere不仅提供了内置的分布式主键生成器,例如UUID、SNOWFLAKE,还抽离出分布式主键生成器的接口,方便用户自行实现自定义的自增主键生成器。
[0004]其中,UUID的缺点:无法保证趋势递增,同时若UUID过长,往往用字符串表示,作为主键建立索引查询效率低,而snowflake算法如图1所示,的缺点:bit位分配固定,在极端情况下,例如当worker不对等于1024时,snowflake算法不能满足需求,当服务器出现时钟回拨情况时是简单的抛错处理,这样会造成在时间被追回之前的这段时间服务不可用,导致交易失败。

技术实现思路

[0005]本部分的目的在于概述本专利技术的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本专利技术的说明书摘要和专利技术名称中可能会做些简化或省略以避免使本部分、说明书摘要和专利技术名称的目的模糊,而这种简化或省略不能用于限制本专利技术的范围。
[0006]鉴于上述现有一种分布式数据库的唯一键生成方法的问题,提出了本专利技术。因此,本专利技术目的是提供一种分布式数据库的唯一键生成方法,能够解决了ID重复问题;通过压缩算法生成长度较短的ID,节省存储空间,满足应用场景对ID长度的诉求。
[0007]为解决上述技术问题,本专利技术提供一种分布式数据库的唯一键生成方法,采用如下的技术方案:具体包括以下步骤:
[0008]步骤S1:将ID的bit位划分为n个区间,n个区间至少包括:时间戳区间、工作进程区间、序列号位区间;
[0009]步骤S2:通过预设算法,获取n个区间的值,再通过压缩算法控制分布式唯一ID的长度;
[0010]步骤S3:给予时间戳区间赋值一防时钟回拨标记位;
[0011]步骤S4:判断当前时间上一次生成标识的时间,增加可以数值翻转的防时钟回拨
标记位,以在发生时钟回拨时针对同一时间戳生成不同ID。
[0012]可选的,所述通过预设算法,获取n个区间的值包括:
[0013]获取所述时间戳区间的值,则所述时间戳区间的值为二进制表示的(Tn

Ts),所述Ts为起始时间和所述Tn为当前时间;
[0014]获取所述工作进程区间的值,所述工作进程区间的值等于数据库为每工作进程的每工作服务器分配唯一的值;
[0015]获取所述序列号位区间的值。
[0016]可选的,所述通过压缩算法控制分布式唯一ID的长度包括:
[0017]设定数字和字符的映射关系,所述数字ID映射为M进制字符串,所述M进制字符串为所述分布式唯一ID。
[0018]可选的,所述将ID的bit位划分为n个区间还包括空闲区间,
[0019]将所述空闲位从对应标识区间中移除;以及将所述空闲位中的一位或多位添加至其他标识区间,以对其他标识区间进行位数扩展。
[0020]可选的,所述标识包括符号位、防时钟回拨标记位、时间戳位、工作进程位和序列号位。
[0021]可选的,所述判断当前时间上一次生成标识的时间,增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID包括:
[0022]判断当前时间是否小于上一次生成标识的时间,
[0023]若大于或等于,则将防时钟回拨标记位设置为第一数值,确定所述当前时间与基础时间的差值,转换所述差值得到第一时间戳,进而基于符号位、第一数值、第一时间戳、工作进程位和序列号生成标识;
[0024]若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将所述第一标识中的防时钟回拨标记位由所述第一数值翻转为第二数值,得到标识。
[0025]综上所述,本专利技术包括以下至少一种有益效果:
[0026]充分考虑服务器时钟回拨场景,增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID,解决了ID重复问题;通过压缩算法生成长度较短的ID,节省存储空间,满足应用场景对ID长度的诉求。
附图说明
[0027]为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0028]图1为现有Twitter公司提供的雪花算法的bit位分布示意图;
[0029]图2为本专利技术方法流程图。
具体实施方式
[0030]以下结合附图2对本专利技术作进一步详细说明。
[0031]实施例一
[0032]参照图1,本专利技术公开一种分布式数据库的唯一键生成方法,具体包括以下步骤:
[0033]步骤S1:将ID的bit位划分为n个区间,n个区间至少包括:时间戳区间、工作进程区间、序列号位区间;
[0034]步骤S2:通过预设算法,获取n个区间的值,获取所述时间戳区间的值,则所述时间戳区间的值为二进制表示的(Tn

Ts),所述Ts为起始时间和所述Tn为当前时间;获取所述工作进程区间的值,所述工作进程区间的值等于数据库为每工作进程的每工作服务器分配唯一的值;获取所述序列号位区间的值。
[0035]再通过压缩算法控制分布式唯一ID的长度;设定数字和字符的映射关系,所述数字ID映射为M进制字符串,所述M进制字符串为所述分布式唯一ID。例如首先设定数字和字符的映射关系;然后将数字ID映射为M进制字符串,缩短分布式唯一ID的长度。比如,在将生成的128位数字ID映射到分布式唯一字符ID后,进行分区后,然后每个区间压缩后,由128位降低到64位,成功缩短了64位长度,在保证ID分布式唯一性及ID包含的数据信息的同时,有效缩短ID长度。
[0036]步骤S3:给予时间戳区间赋值一防时钟回拨标记位;防时钟回拨标记位:当发生时钟回拨时,翻转此位防止生成重复ID。可以由0翻转为1,也可以由1翻转为0,分别代表第一数值和第二数值,具体依据工作人员设定。
[0037]步骤S4:判断当前时间上一次生成标识的时间,所述标识包括符号本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式数据库的唯一键生成方法,其特征在于:具体包括以下步骤:步骤S1:将ID的bit位划分为n个区间,n个区间至少包括:时间戳区间、工作进程区间、序列号位区间;步骤S2:通过预设算法,获取n个区间的值,再通过压缩算法控制分布式唯一ID的长度;步骤S3:给予时间戳区间赋值一防时钟回拨标记位;步骤S4:判断当前时间上一次生成标识的时间,增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID。2.根据权利要求1所述的一种分布式数据库的唯一键生成方法,其特征在于:所述通过预设算法,获取n个区间的值包括:获取所述时间戳区间的值,则所述时间戳区间的值为二进制表示的(Tn

Ts),所述Ts为起始时间和所述Tn为当前时间;获取所述工作进程区间的值,所述工作进程区间的值等于数据库为每工作进程的每工作服务器分配唯一的值;获取所述序列号位区间的值。3.根据权利要求1所述的一种分布式数据库的唯一键生成方法,其特征在于:所述通过压缩算法控制分布式唯一ID的长度包括:设定数字和字符的映射关系,所述数字ID映射为M进制字符串,所述M进...

【专利技术属性】
技术研发人员:张亮
申请(专利权)人:北京思斐软件技术有限公司
类型:发明
国别省市:

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

1