一种数据库主键的生成方法、装置、电子设备及介质制造方法及图纸

技术编号:33708779 阅读:15 留言:0更新日期:2022-06-06 08:37
本发明专利技术实施例公开了一种数据库主键的生成方法、装置、电子设备及介质。所述方法包括:响应于数据库主键的生成请求,获取本地缓存中上一次生成的历史数据库主键对应的历史序列号码和历史差值时间戳;根据所述历史序列号码确定目标序列号码,根据所述历史差值时间戳确定目标时间戳;根据所述目标时间戳和所述目标序列号码生成所述数据库主键。通过本发明专利技术实施例的技术方案,实现无需每次生成数据库主键时均获取系统时间,提高了数据库主键的生成效率,解决相关数据库主键生成方式中重复率较高的问题。的问题。的问题。

【技术实现步骤摘要】
一种数据库主键的生成方法、装置、电子设备及介质


[0001]本专利技术实施例涉及计算机技术,尤其涉及一种数据库主键的生成方法、装置、电子设备及介质。

技术介绍

[0002]目前雪花算法这种分布式数据库主键生成方案广泛应用于业界,该算法通过在有限的64个比特位上合理分配比特位表示的含义,来获取到数值型的唯一标识号(以下简称为ID),大大的节省了数据库主键的存储空间消耗。
[0003]然而,目前采用雪花算法生成的ID,可能由于时间超出雪花算法中时间戳的位数而出现与之前生成的ID相重复的情况。还可能由于时钟回拨的问题而出现与之前生成的ID相重复的情况。因此,如何降低ID的重复率是目前亟待解决的问题。

技术实现思路

[0004]本专利技术实施例提供一种数据库主键的生成方法、装置、电子设备及介质,可以解决相关技术中的数据库主键的重复率方面的问题。
[0005]第一方面,本专利技术实施例提供了一种数据库主键的生成方法,包括:
[0006]响应于数据库主键的生成请求,获取本地缓存中上一次生成的历史数据库主键对应的历史序列号码和历史差值时间戳,其中,所述历史差值时间戳基于初始时间戳与基准时间戳的差值确定;
[0007]根据所述历史序列号码确定目标序列号码,根据所述历史差值时间戳确定目标时间戳;
[0008]根据所述目标时间戳和所述目标序列号码生成所述数据库主键。
[0009]第二方面,本专利技术实施例还提供了一种数据库主键的生成装置,所述装置包括:
[0010]响应模块,用于响应于数据库主键的生成请求,获取本地缓存中上一次生成的历史数据库主键对应的历史序列号码和历史差值时间戳,其中,所述历史差值时间戳基于初始时间戳与基准时间戳的差值确定;
[0011]确定模块,用于根据所述历史序列号码确定目标序列号码,根据所述历史差值时间戳确定目标时间戳;
[0012]生成模块,用于根据所述目标时间戳和所述目标序列号码生成所述数据库主键。
[0013]第三方面,本专利技术实施例还提供了一种电子设备,所述电子设备包括:
[0014]一个或多个处理器;
[0015]存储器,用于存储一个或多个程序,
[0016]当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本专利技术任意实施例所述的数据库主键的生成方法。
[0017]第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本专利技术任意实施例所述的数据库主键的生成
方法。
[0018]本专利技术实施例提供一种数据库主键的生成方法、装置、电子设备及介质,通过缓存用于生成数据库主键的历史序列号码和历史差值时间戳,在需要生成数据库主键时,采用历史序列号码和历史差值时间戳确定目标序列号码和目标时间戳,基于所确定的目标序列号码和目标时间戳生成数据库主键,实现无需每次生成数据库主键时均获取系统时间,提高了数据库主键的生成效率,解决相关数据库主键生成方式中重复率较高的问题。
附图说明
[0019]图1为本专利技术实施例提供的一种数据库主键的生成方法的流程图;
[0020]图2为本专利技术实施例提供的另一种数据库主键的生成方法的流程图;
[0021]图3为本专利技术实施例提供的又一种数据库主键的生成方法的流程图;
[0022]图4为本专利技术实施例提供的一种数据库主键的生成装置的结构框图;
[0023]图5为本专利技术实施例提供的一种电子设备的结构示意图。
具体实施方式
[0024]下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。
[0025]图1为本专利技术实施例提供的一种数据库主键的生成方法的流程图,本实施例可适用于数据库主键的生成场景,该方法可以由数据库主键的生成装置来执行,该装置可以由软件和/或硬件实现,并通常配置于电子设备中。例如,电子设备可以是服务器等。如图1所示,所述方法包括:
[0026]步骤110、响应于数据库主键的生成请求,获取本地缓存中上一次生成的历史数据库主键对应的历史序列号码和历史差值时间戳。
[0027]其中,历史差值时间戳基于初始时间戳与基准时间戳的差值确定,并且历史差值时间戳采用数值递增的方式更新。历史差值时间戳是上一次生成数据库主键时所采用的时间戳。初始时间戳可以是请求生成数据库主键的应用程序启动时刻的本地时间戳,还可以是缓存空间中已缓存的差值时间戳丢失情况下的本地时间戳。基准时间戳是默认时间戳,基准时间戳可以人为设置。
[0028]历史序列号码是上一次生成数据库主键时所采用的序列号码。
[0029]数据库主键指的是一个列或多列的组合,其值能唯一地标识数据表中的每一行,通过它可强制表的实体完整性。数据库主键是一个数值型的标识符。本专利技术实施例中,数据库主键是一个64个比特位的二进制字符串。
[0030]具体地,数据库主键包含的比特位从高位到低位分别表示符号位、时间戳、序列号码和机器码。其中,采用1个比特位表示所述符号位,采用31个比特位表示时间戳、采用22个比特位表示序列号码,以及,采用10个比特位表示机器码。
[0031]表1为一种数据库主键的组成表。
[0032][0033]需要说明的是,采用31个比特位表示组成数据库主键的时间戳,可以产生2
31
秒的时间戳。对于每个时间戳,存储时间戳与基准时间戳的差值,而不是直接存储时间戳,可以减少单个时间戳数据的存储空间占用,使外部缓存能缓存更多的差值时间戳。此外,缓存的差值时间戳的单位精确到秒,当服务器时间出现毫秒级的细微差距的时候,不会影响差值时间戳,可以避免在生成数据库主键时出现重复的号码。
[0034]采用22个比特位表示组成数据库主键的序列号码,每秒可以产生2
22
个序列号码。即序列号码上限值为2
22
,在序列号码的号码值达到序列号码上限值时,序列号码恢复为初始序列号码,历史差值时间戳递增一个单位时间,重新开始采用递增的方式生成序列号码。其中,初始序列号码可以为22个比特位的值全部为零时的序列号码。
[0035]生成请求是请求生成数据库主键的应用程序向服务器发送的请求。服务器在接收到数据库主键的生成请求之后,查询得到本地缓存的历史序列号码和历史差值时间戳。需要说明的是,在每次生成数据库主键之后,缓存生成数据库主键所使用的序列号码和时间戳,用于下一次接收到数据库主键生成请求之时,生成数据库主键。
[0036]示例性地,服务器获取数据库主键的生成请求,查询本地缓存中的上一次生成历史数据库主键所采用的历史序列号码和历史差值时间戳。
[0037]步骤120、根据所述历史序列号码确定目标序列号码,根据所述历史差值时间戳确定目标时间戳。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库主键的生成方法,其特征在于,包括:响应于数据库主键的生成请求,获取本地缓存中上一次生成的历史数据库主键对应的历史序列号码和历史差值时间戳,其中,所述历史差值时间戳基于初始时间戳与基准时间戳的差值确定;根据所述历史序列号码确定目标序列号码,根据所述历史差值时间戳确定目标时间戳;根据所述目标时间戳和所述目标序列号码生成所述数据库主键。2.根据权利要求1所述的方法,其特征在于,在根据所述目标时间戳和所述目标序列号码生成所述数据库主键之后,还包括:将所述目标序列号码和所述目标时间戳存储到本地缓存,作为所述历史序列号码和所述历史差值时间戳;确定当前时间与上一次存储时间戳到外部缓存的时间间隔,若所述时间间隔满足预设的时间戳缓存间隔,则获取机器码和所述本地缓存中的所述历史差值时间戳;以所述机器码为键值,采用键值对的形式将所述机器码和所述历史差值时间戳关联存储至外部缓存。3.根据权利要求2所述的方法,其特征在于,在所述本地缓存中不存在上一次生成的历史数据库主键对应的所述历史序列号码和所述历史差值时间戳之时,根据所述历史序列号码确定目标序列号码,所述根据所述历史差值时间戳确定目标时间戳,包括:根据初始序列号码确定目标序列号码,其中,所述初始序列号码为表示序列号码的比特位全部为零时的序列号码;获取所述外部缓存中所述机器码对应的所述历史差值时间戳,将所述历史差值时间戳与所述时间戳缓存间隔的和作为目标时间戳。4.根据权利要求1所述的方法,其特征在于,所述根据所述历史序列号码确定目标序列号码,包括:基于所述历史序列号码的号码值采用数值递增的方式生成参考序列号码;若所述参考序列号码的号码值小于或等于序列号码上限值,则根据所述参考序列号码生成目标序列号码,其中,所述序列号码上限值为表示序列号码的比特位所能表示的最大序列号码值;若所述参考序列号码的号码值大于所述序列号码上限值,则根据表示序列号码的比...

【专利技术属性】
技术研发人员:符波邓捷白乐
申请(专利权)人:平安壹钱包电子商务有限公司
类型:发明
国别省市:

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

1