主键生成方法及装置制造方法及图纸

技术编号:31983547 阅读:17 留言:0更新日期:2022-01-20 02:00
本公开公开了一种主键生成方法及装置,包括基于预设的定义方式定义雪花ID的数据格式;按照所述数据格式,为不同的节点配置用于自动生成雪花ID的参数;响应于获取到节点的业务数据,自动生成雪花ID作为数据表中标识每条数据的主键。通过在定义雪花ID后,基于该定义方式对节点进行配置,并基于该配置自动生成节点的业务数据对应的雪花ID,提高了节点数据标识效率,并且基于配置的方式控制了雪花ID的生成过程。程。程。

【技术实现步骤摘要】
主键生成方法及装置


[0001]本公开涉及数据处理
,具体涉及到一种主键生成方法及装置。

技术介绍

[0002]随着信息系统的发展,越来越多的软件基于微服务架构进行分布式部署运行,以提高系统的可靠性和吞吐量。在部分业务场景下,同一套软件产品可能会在多个区域部署,且这些区域的业务数据还需要归集到统一的数据仓,用于实现类似数据中台的相关功能。
[0003]当所有区域的业务数据归集到数据仓时,需要为数据生成唯一的主键,相关技术中主键生成方法效率低。

技术实现思路

[0004]本公开的主要目的在于提供一种主键生成方法及装置。
[0005]为了实现上述目的,根据本公开的第一方面,提供了一种主键生成方法,包括:基于预设的定义方式定义雪花ID的数据个是;基于所述数据格式,为不同的节点配置用于自动生成雪花ID的参数;响应于获取到节点的业务数据,自动生成雪花ID作为数据表中标识每条数据的主键。
[0006]可选地,基于预设方式定义雪花ID的数据格式包括:对雪花ID从低位到高位所包括的预设二进制位数进行定义,得到从低位到高位依次包括节点ID位、序列号位、时间戳位和固定位的预定义后的雪花ID。
[0007]可选地,为不同的节点配置用于自动生成雪花ID的参数包括:配置在雪花ID自动生成过程中,满足更换时间戳位数值时自动生成的雪花ID所需要达到的数值;配置一组时间戳位的更换值;为每个节点配置初始雪花ID。
[0008]可选地,在对不同的节点进行配置后,所述方法还包括:实时监测节点发送的心跳数据,判断节点是否处于离线状态;如果节点处于离线状态,释放该节点。
[0009]可选地,响应于获取到节点的业务数据,基于所述参数,自动生成雪花ID作为数据表中标识每条数据的主键包括:响应于获取到节点的业务数据,在每秒内序列号位的值按照预设步长进行自增;当序列号位溢出,向所述时间戳位进行进位。
[0010]可选地,方法还包括:将生成的雪花ID缓存至无锁队列中。
[0011]根据本公开的第二方面,提供了一种主键生成装置,包括:定义单元,被配置成基于预设的定义方式定义雪花ID;配置单元,被配置成为不同的节点配置用于自动生成雪花ID的参数;主键生成单元,被配置成响应于获取到节点的业务数据,基于所述参数,自动生成雪花ID作为数据表中标识每条数据的主键。
[0012]可选地,基于预设方式定义雪花ID包括:对雪花ID从低位到高位所包括的预设二进制位数进行定义,得到从低位到高位依次包括节点ID位、序列号位、时间戳位和固定位的预定义后的雪花ID。
[0013]根据本公开的第三方面,提供了一种计算机可读存储介质,存储有计算机指令,所
述计算机指令用于使所述计算机执行第一方面任意一项实现方式所述的主键生成方法。
[0014]根据本公开的第四方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行第一方面任意一项实现方式所述的主键生成方法。
[0015]在本公开实施例主键生成方法及装置中,包括基于预设的定义方式定义雪花ID;为不同的节点配置用于自动生成雪花ID的参数;响应于获取到节点的业务数据,基于所述参数,自动生成雪花ID作为数据表中标识每条数据的主键。通过在定义雪花ID后,基于该定义方式对节点进行配置,并基于该配置自动生成节点的业务数据对应的雪花ID,提高了节点数据标识效率,并且基于配置的方式控制了雪花ID的生成过程。进而解决了相关技术中,主键生成过程效率低且不可控的技术问题。
附图说明
[0016]为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0017]图1是雪花ID结构示意图;
[0018]图2是根据本公开实施例的主键生成方法流程图;
[0019]图3是根据本公开实施例的主键生成方法的一个应用场景图;
[0020]图4是根据本公开实施例的电子设备的示意图。
具体实施方式
[0021]为了使本
的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
[0022]需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0023]以Java技术为例,目前生成UID的方法主要有以下几种:
[0024]1、使用关系型数据库自增列作为UID。因为自增列是从数值1开始逐步递增,在多区域多数据中心情况下,无法做到UID全数据域唯一性,单数据源业务系统可以考虑使用。
[0025]2、使用jdk自带的UUID生成器生成32位(去掉四个横符)的字符串作为UID。因为是基于时间和MAC地址等信息生成,存在小概率出现重复值的情况。字符串类型存入数据库后
占用的磁盘存储空间相对于数值类型要大许多,作为索引值在查询效率上也不如数值型UID快。
[0026]3、使用Twitter开源的雪花算法生成UID。
[0027]参考图1给出的雪花ID,其可通过对64位long型数值的不同二进制位进行计算组合生成一个UID。雪花ID包括1位标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,通常生成的ID为正数,固定为0;包括41位时间戳部分,属于是毫秒级的时间,通常不会存储当前的时间戳,而是时间戳的差值(当前时间

固定的开始时间),这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L<<41)/(1000L 60 60 24 363)=69年;包括10位工作机器ID(下称:节点ID)部分,通常使用前3位作为数据中心标识(DataCenterID),后3位作为工作节点标识(WorkerID),可供1024个运行节点使用;还包括12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID。
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种主键生成方法,其特征在于,包括:基于预设的定义方式定义雪花ID的数据格式;按照所述数据格式,为不同的节点配置用于自动生成雪花ID的参数;响应于获取到节点的业务数据,生成雪花ID作为数据表中标识每条数据的主键。2.如权利要求1所述的方法,其特征在于,基于预设方式定义雪花ID的数据格式包括:对雪花ID从低位到高位所包括的预设二进制位数进行定义,得到从低位到高位依次包括节点ID位、序列号位、时间戳位和固定位的预定义后的雪花ID。3.如权利要求2所述的方法,其特征在于,为不同的节点配置用于自动生成雪花ID的参数包括:配置在雪花ID自动生成过程中,满足更换时间戳位数值时自动生成的雪花ID所需要达到的数值;配置一组时间戳位的更换值;为每个节点配置初始雪花ID。4.如权利要求3所述的方法,其特征在于,在对不同的节点进行配置后,所述方法还包括:实时监测节点发送的心跳数据,判断节点是否处于离线状态;如果节点处于离线状态,释放该节点。5.如权利要求4所述的方法,其特征在于,响应于获取到节点的业务数据,基于所述参数,自动生成雪花ID作为数据表中标识每条数据的主键包括:响应于获取到节点的业务数据,在每秒内序列号位的值按照预设步长进行自增;当序列号位溢出,向所述时间戳...

【专利技术属性】
技术研发人员:周波金浩张君陈蓓珍张建业
申请(专利权)人:浙江惠瀜网络科技有限公司
类型:发明
国别省市:

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

1