自增制造技术

技术编号:39581550 阅读:7 留言:0更新日期:2023-12-03 19:31
本申请实施例提供了一种自增

【技术实现步骤摘要】
自增ID的分配方法、装置、电子设备及可读存储介质


[0001]本申请涉及数据库
,具体而言,本申请涉及一种自增
ID
的分配方法

装置

电子设备及可读存储介质


技术介绍

[0002]数据库自增列是指在数据表中提供自动分配单调递增数值的一列,自增列适用于整数类型,常用于主键或
ID
字段,数据表中每增加一数据记录时,无需为该数据记录中该自增列对应的字段设置数值,该自增列对应的字段的数值是自动生成的,且是唯一的

[0003]在为自增列分配
ID
时,最为严格的要求是在保证性能的前提下以事务
(
即数据库事务
)
为单位进行连续单调递增分配
ID
,即一次锁定一个事务,在事务提交时,依次为该事务所涉及的各个数据记录分配
ID
,这种要求在传统的单机数据库中相对容易实现,在分布式数据库中也可以实现,在分布式数据库的至少两个数据库节点中选一个中心数据库,由中心数据库进行分配
ID。
[0004]无论是单机数据库还是分布式数据库,对事务分配
ID
都是在一个数据库节点上,由此可以实现各事务所涉及的各数据记录分配连续单调递增
ID
,然而这种方式一次只能锁定一个事务,且一次只能为一个事务中的一个数据记录分配
ID
,即整个过程是串行为每个事务中的每个数据记录分配
ID/>,分配效率较低,带来较大的分配瓶颈


技术实现思路

[0005]本申请实施例提供了一种自增
ID
的分配方法

装置

电子设备

计算机可读存储介质及计算机程序产品,用于解决
技术介绍
中的技术问题

[0006]根据本申请实施例的第一方面,提供了一种自增
ID
的分配方法,应用于分布式数据库的节点集群的第一节点,该方法包括:
[0007]获取待提交的第一事务,该第一事务针对至少一个目标数据表;该目标数据表的各个数据行中的数据记录都具备第一自增
ID
;该第一事务中包括每个目标数据表各自对应的至少一条待插入数据记录;每个目标数据表存储于该节点集群中的至少一个第二节点;
[0008]响应于向对应的第二节点预提交第一事务,对于每个目标数据表,从该目标数据表对应的第二节点中确定第三节点;该第三节点为该至少一个第二节点中首个存储该目标数据表的节点;该第三节点中记录有第一目标自增
ID
;该第一目标自增
ID
为该目标数据表中各数据行的第一自增
ID
的最大值;
[0009]对于每个目标数据表,向该目标数据表对应的第三节点发送申请请求,该申请请求包括该第一事务的事务标识,以及该目标数据表对应的待插入数据记录的数量;该申请请求用于请求为该目标数据表分配该数量的第一自增
ID。
[0010]根据本申请实施例的第二方面,提供了一种自增
ID
的分配方法,应用于分布式数据库的节点集群中的第三节点,该第三节点为至少一个第二节点中的首个存储目标数据表的节点;该目标数据表存储于该节点集群中的至少一个第二节点;该第三节点中记录有第
一目标自增
ID
;该目标数据表的各个数据行中的数据记录都具备第一自增
ID
;该第一目标自增
ID
为该目标数据表中数据记录的第一自增
ID
的最大值;
[0011]该方法包括:
[0012]接收第一节点发送的申请请求,该申请请求包括第一事务的事务标识以及该目标数据表对应的待插入数据记录的数量;该申请请求用于请求为该事务标识表征的第一事务所针对的目标数据表分配该数量的第一自增
ID
;该申请请求为该第一节点响应于待提交的第一事务的预提交而生成的,该第一事务包括该目标数据表对应的至少一条待插入数据记录;
[0013]若确定该目标数据表插入该至少一条待插入数据记录后无溢出,则将该第一目标自增
ID
作为该至少一条待插入数据记录的第一自增
ID
的起始值;
[0014]向该目标数据表对应的各个第二节点发送分配指示消息,该分配指示消息包括该第一事务的事务标识以及该第一自增
ID
的起始值;该分配指示消息用于指示基于该第一自增
ID
的起始值,为该第一事务所包含的至少一条待插入数据记录分配第一自增
ID。
[0015]根据本申请实施例的第三方面,提供了一种自增
ID
的分配方法,应用于分布式数据库节点集群的任意一个第二节点,该第二节点存储有目标数据表;该目标数据表的各个数据行中的数据记录都具备第一自增
ID

[0016]该方法包括:
[0017]响应于第一节点对第一事务的预提交,存储该第一事务的事务标识

该第一事务中包含的针对该目标数据表的至少一条待插入数据记录以及每条待插入数据记录的第二自增
ID
;其中,该第二自增
ID
是在该第一事务内部为每条待插入数据记录分配的自增
ID

[0018]接收第三节点发送的分配指示消息,该分配指示消息包括该第一事务的事务标识以及该第一自增
ID
的起始值;该分配指示消息用于指示基于该第一自增
ID
的起始值,为该第一事务所包含的至少一条待插入数据记录分配第一自增
ID

[0019]响应于该分配指示消息,基于该第一自增
ID
的起始值以及该事务标识所包含的每条待插入数据记录的第二自增
ID
确定每条待插入数据记录的第一自增
ID
;和
/

[0020]确定预提交第一事务的预提交时刻,将该第一事务的事务标识

该第一自增
ID
的起始值

第一事务中针对该目标数据表的至少一条待插入数据记录的数量以及该预提交时刻,作为一条待同步记录存储至预设设置的同步集,以使得该分布式数据库的后台在周期性访问该第二节点时,由该后台异步读取该同步集,确定每条待插入数据记录的第一自增
ID
并告知第二节点;
[0021]在该目标数据表中插入至少一个新的数据行,每个新的数据行包括一个待插入数据记录以及该待插入据记录对应的第一自增
ID

[0022]若确定该第一事务中针对该目标数据表的所有的待插入数据记录插入该目标数据表,则提交该第一事务

[0023]根据本申请实施例的第四方面,提供了一种自增
ID本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.
一种自增
ID
的分配方法,其特征在于,应用于分布式数据库的节点集群的第一节点,所述方法包括:获取待提交的第一事务,所述第一事务针对至少一个目标数据表;所述目标数据表的各个数据行中的数据记录都具备第一自增
ID
;所述第一事务中包括每个所述目标数据表各自对应的至少一条待插入数据记录;每个所述目标数据表存储于所述节点集群中的至少一个第二节点;响应于向对应的第二节点预提交第一事务,对于每个所述目标数据表,从所述目标数据表对应的第二节点中确定第三节点;所述第三节点为所述至少一个第二节点中首个存储所述目标数据表的节点;所述第三节点中记录有第一目标自增
ID
;所述第一目标自增
ID
为所述目标数据表中各数据行的第一自增
ID
的最大值;对于每个所述目标数据表,向所述目标数据表对应的第三节点发送申请请求,所述申请请求包括所述第一事务的事务标识,以及所述目标数据表对应的待插入数据记录的数量;所述申请请求用于请求为所述目标数据表分配所述数量的第一自增
ID。2.
根据权利要求1所述的方法,其特征在于,所述响应于向对应的第二节点预提交第一事务,之前还包括:在所述第一事务内部为每条所述待插入数据记录分配第二自增
ID
,以使得所述第三节点响应于所述申请请求向各第二节点发送第一目标自增
ID
后,各所述第二节点基于所述第一目标自增
ID
和每条所述待插入数据记录的第二自增
ID
分别为每条所述待插入数据记录分配第一自增
ID。3.
一种自增
ID
的分配方法,其特征在于,应用于分布式数据库的节点集群中的第三节点,所述第三节点为至少一个第二节点中的首个存储目标数据表的节点;所述目标数据表存储于所述节点集群中的至少一个第二节点;所述第三节点中记录有第一目标自增
ID
;所述目标数据表的各个数据行中的数据记录都具备第一自增
ID
;所述第一目标自增
ID
为所述目标数据表中数据记录的第一自增
ID
的最大值;所述方法包括:接收第一节点发送的申请请求,所述申请请求包括第一事务的事务标识以及所述目标数据表对应的待插入数据记录的数量;所述申请请求用于请求为所述事务标识表征的第一事务所针对的目标数据表分配所述数量的第一自增
ID
;所述申请请求为所述第一节点响应于待提交的第一事务的预提交而生成的,所述第一事务包括所述目标数据表对应的至少一条待插入数据记录;若确定所述目标数据表插入所述至少一条待插入数据记录后无溢出,则将所述第一目标自增
ID
作为所述至少一条待插入数据记录的第一自增
ID
的起始值;向所述目标数据表对应的各个第二节点发送分配指示消息,所述分配指示消息包括所述第一事务的事务标识以及所述第一自增
ID
的起始值;所述分配指示消息用于指示基于所述第一自增
ID
的起始值,为所述第一事务所包含的至少一条待插入数据记录分配第一自增
ID。4.
根据权利要求3所述的方法,其特征在于,所述若确定所述目标数据表插入所述至少一条待插入数据记录后无溢出,之前还包括:基于所述数量确定为所述至少一条待插入数据记录分配第一自增
ID
所需的步长;
确定所述第一自增
ID
以及所述步长的和值;若确定所述和值不大于所述目标数据表的数据量阈值,则确定所述目标数据表插入所述至少一条待插入数据记录后无溢出;若确定所述和值大于所述目标数据表的数据量阈值,则确定所述目标数据表插入所述至少一条待插入数据记录后溢出
。5.
根据权利要求4所述的方法,其特征在于,所述基于所述数量确定为所述至少一条待插入数据记录分配第一自增
ID
所需的步长,之前还包括:为所述第一事务向所述第一目标自增
ID
加锁,以使得所述第一目标自增
ID
不被其他事务更新;所述确定所述目标数据表插入所述至少一条待插入数据记录后无溢出,之后还包括:基于所述第一目标自增
ID
以及所述步长对所述第一目标自增
ID
进行更新,得到新的第一目标自增
ID
,所述新的第一目标自增
ID
为所述第一目标自增
ID
和所述步长的和值;释放所述第一目标自增
ID
的锁
。6.
一种自增
ID
的分配方法,其特征在于,应用于分布式数据库节点集群的任意一个第二节点,所述第二节点存储有目标数据表;所述目标数据表的各个数据行中的数据记录都具备第一自增
ID
;所述方法包括:响应于第一节点对第一事务的预提交,存储所述第一事务的事务标识

所述第一事务中包含的针对所述目标数据表的至少一条待插入数据记录以及每条所述待插入数据记录的第二自增
ID
;其中,所述第二自增
ID
是在所述第一事务内部为所述待插入数据记录分配的自增
ID
;接收第三节点发送的分配指示消息,所述分配指示消息包括所述第一事务的事务标识以及所述第一自增
ID
的起始值;所述分配指示消息用于指示基于所述第一自增
ID
的起始值,为所述第一事务所包含的至少一条待插入数据记录分配第一自增
ID
;响应于所述分配指示消息,基于所述第一自增
ID
的起始值以及所述事务标识所包含的每条所述待插入数据记录的第二自增
ID
确定每条所述待插入数据记录的第一自增
ID
;和
/
或确定预提交第一事务的预提交时刻,将所述第一事务的事务标识

所述第一自增
ID
的起始值

第一事务中针对所述目标数据表的至少一条待插入数据记录的数量以及所述预提交时刻,作为一条待同步记录存储至预设设置的同步集,以使得所述分布式数据库的后台在周期性访问所述第二节点时,由所述后台异步读取所述同步集,以确定每条所述待插入数据记录的第一自增
ID
并告知所述第二节点;在所述目标数据表中插入至少一个新的数据行,每个所述新的数据行包括一个待插入数据记录以及所述待插入据记录对应的第一自增
ID
;若确定所述第一事务中针对所述目标数据表的所有的待插入数据记录插入所述目标数据表,则提交所述第一事务
。7.
根据权利要求6所述的方法,其特征在于,所述基于所述第一自增
ID
的起始值以及所述事务标识所包含的每条所述待插入数据记录的第二自增
ID
确定每条所述待插入数据记录的第一自增
ID
,包括:
对于每条所述待插入数据记录,基于所述第一自增
ID
的起始值以及所述待插入数据记录的第二自增
ID
对所述待插入数据记录的第二自增
ID
进行更新,得到更新后的第二自增
ID
;将更新后的第二自增
ID
作为所述待插入数据记录对应的第一自增
ID。8.
一种自增
ID
的分配方法,其特征在于,应用于分布式数据库的后台,所述方法包括:周期性访问所述分布式数据库的节点集群中的各个第二节点;所述第二节点存储有目标数据表,所述目标数据表的各个数据行中的数据记录都具备第一自增
ID
;所述第二节点还存储各个已经预提交的第一事务的事务标识

所述目标数据表的至少一条待插入数据记录以及每条所述待插入数据记录的第二自增
ID
;在当前周期内,对于每个所述第二节点,读取所述第二节点的同步集;所述同步集中包括至少一条待同步记录,每条所述待同步记录包括一个第一事务的事务标识

所述第一自增
ID
的起始值以及预提交所述第一事务的预提交时刻;从所述同步集中确定预提交时刻处于上一周期的各个第一事务的事务标识,确定所述事务标识对应的至少一条待插入数据记录以及每条所述待插入数据记录的第二自增
ID
;对于每条所述待插入数据记录,基于所述第一事务的事务标识对应的第一自增
ID
的起始值以及所述待插入数据记录的第二自增
ID
,确定每条所述待插入数据记录的第一自增
ID
;向第二节点告知每条待插入数据记录的第一自增
ID。9.
根据权利要求8所述的方法,其特征在于,所述待同步记录中还包括所述目标数据表的至少一条待插入数据记录的数量;所述确定每条所述待插入数据记录的第一自增
ID
,之后还包括:若确定所述目标数据表中存在一个第一自增
...

【专利技术属性】
技术研发人员:熊亮春谢腾进刘奇黄东旭崔秋
申请(专利权)人:平凯星辰北京科技有限公司
类型:发明
国别省市:

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

1