一种分布式系统中自增ID的管理方法和装置

阅读: 评论:0

著录项
  • CN201911306391.9
  • 20191218
  • CN110968589A
  • 20200407
  • 浙江明度智控科技有限公司
  • 孙建蛟;郝华;唐裕辉;倪晓姗
  • G06F16/23
  • G06F16/23 G06F16/22

  • 浙江省杭州市滨江区长河街道江虹南路316号3号楼1层
  • 浙江(33)
  • 杭州合谱慧知识产权代理事务所(特殊普通合伙)
  • 张刚
摘要
本发明公开了一种分布式系统中自增ID的管理方法,包括根据一服务的ID申请请求判断是否为首次申请;若为首次申请则分配唯一的记录表,并将申请ID数量和记录表名添加至当地数据库表中,所述数据库表被配置为记录已被接受的各ID申请对应的记录表名和分配ID段信息;若非首次申请,则在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表。通过对每个服务的ID申请请求在数据库表中分配唯一的记录表和对应供使用的ID段,完成不重复递增ID的生成和管理,可根据用户的配置批量申请ID,减少了对数据的压力,提高了分布式数据库性能。
权利要求

1.一种分布式系统中自增ID的管理方法,其特征在于,包括:

根据一服务的ID申请请求判断是否为首次申请;

若为首次申请则分配唯一的记录表,并将申请ID数量和记录表名添加至当地数据库表中,所述数据库表被配置为记录已被接受的各ID申请对应的记录表名和分配ID段信息;

若非首次申请,则在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表。

2.根据权利要求1所述的分布式系统中自增ID的管理方法,其特征在于:所述数据库表被配置为在每次启动时获取所有记录表的已分配最大ID。

3.根据权利要求2所述的分布式系统中自增ID的管理方法,其特征在于:所述步骤将申请ID数量和记录表名添加至当地数据库表中,具体包括:调用数据库的插入接口向所述数据库表中插入分配的记录表名和分配ID段的最大值。

4.根据权利要求3所述的分布式系统中自增ID的管理方法,其特征在于:所述数据库表还被配置为记录各记录表的当前已使用ID和可使用最大ID。

6.根据权利要求4或5所述的分布式系统中自增ID的管理方法,其特征在于,所述步骤在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表,具体包括:

获取当前各记录表的已分配最大ID;

根据各记录表已分配最大ID中最大值获取可分配ID起始值;

根据所述可分配ID起始值和此次申请ID数量确定分配该服务的新增ID段。

7.根据权利要求6所述的分布式系统中自增ID的管理方法,其特征在于:所述步骤在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表,具体还包括:

从数据库中获取当前已分配的最大ID;

根据各当前已分配的最大ID和此次申请ID数量计算此次新分配ID最大值;

通过CAS方式判断当前数据库已分配最大ID是否发生改变,如未改变则用所述计算得到的新分配ID最大值对数据库表中的对应信息表内容进行更新,否则重新计算新分配ID最大值。

5.根据权利要求3所述的分布式系统中自增ID的管理方法,其特征在于:所述数据库表还被配置为记录各记录表自身可使用的起始ID和截止ID。

8.一种分布式系统中自增ID的管理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现如权利要求1-7任一所述方法的步骤。

9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-7任一所述方法的步骤。

说明书
技术领域

本发明涉及数据库技术领域,尤其涉及一种分布式系统中自增ID的管理方法和装置。

随着传统的数据库技术日趋成熟,以及互联网应用的高速发展,数据库应用己普遍出现在互联网之上。而传统的集中式数据库系统同时也表现出其不足之处:采用集中式管理,势必造成性能瓶颈,单一的提高硬件性能己不能满足目前互联网的大数据量高并发查询写入的需求,同时会产生大量的硬件维护和升级费用。此外,数据库的集中管理往往造成多数据库关联,一旦某一台数据库崩溃,将造成整个系统崩溃。所以分布式数据库系统的发展呈不可阻挡之势。

分布式数据库中各局部数据库应满足集中式数据库的一致性、可串行性和可恢复性,除此以外还应保证数据库的全局一致性、并行操作的可串行性和系统的全局可恢复性,这些都离不开全局唯一标识符(简称为ID)。而在相关技术中,关系型数据库MySQL的每个表都可以使用自增的功能产生连续的数字ID,这一ID通常被作为各种数据的主键ID,具有唯一性,以保证通过该ID的具体数据一一对应。但是,在MySQL集的情况下,程序访问到数据库时,每个数据库会根据自己的情况进行自增,因此就会出现多个数据库具有同一个ID,但对应的数据并不相同的情况,此时自增ID无法满足ID唯一的特性。

本发明针对现有技术中的不足,提供了一种分布式系统中自增ID的管理方法,包括:根据一服务的ID申请请求判断是否为首次申请;若为首次申请则分配唯一的记录表,并将申请ID数量和记录表名添加至当地数据库表中,所述数据库表被配置为记录已被接受的各ID申请对应的记录表名和分配ID段信息;若非首次申请,则在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表。

优选的,所述数据库表被配置为在每次启动时获取所有记录表的已分配最大ID。

优选的,所述步骤将申请ID数量和记录表名添加至当地数据库表中,具体包括:调用数据库的插入接口向所述数据库表中插入分配的记录表名和分配ID段的最大值。

优选的,所述数据库表还被配置为记录各记录表的当前已使用ID和可使用最大ID。

优选的,所述数据库表还被配置为记录各记录表自身可使用的起始ID和截止ID。

优选的,所述步骤在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表,具体包括:获取当前各记录表的已分配最大ID;根据各记录表已分配最大ID中最大值获取可分配ID起始值;根据所述可分配ID起始值和此次申请ID数量确定分配该服务的新增ID段。

优选的,所述步骤在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表,具体还包括:从数据库中获取当前已分配的最大ID;根据各当前已分配的最大ID和此次申请ID数量计算此次新分配ID最大值;通过CAS方式判断当前数据库已分配最大ID是否发生改变,如未改变则用所述计算得到的新分配ID最大值对数据库表中的对应信息表内容进行更新,否则重新计算新分配ID最大值。

本发明还公开了一种分布式系统中自增ID的管理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一分布式系统中自增ID管理方法的步骤。

本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的分布式系统中自增ID的管理方法的步骤。

本发明通过将ID的生成和管理放在库中,只需要引用这个库,不需要部署任何其他服务,就可以生成和管理不重复的ID。由于该库是运行在服务的进程空间内,只要服务存在,就可以进行id的生成和管理。通过对每个服务的ID申请请求在数据库表中分配唯一的记录表和对应供使用的ID段,完成不重复递增ID的生成和管理,可根据用户的配置批量申请id,减少了对数据的压力,提高了分布式数据库性能。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明一实施例公开的分布式系统中自增ID管理方法的流程示意图。

图2为本发明一实施例公开的分布式系统中自增ID管理方法的应用示意图。

图3为本发明一实施例公开的数据库表结构示意图。

图4为本发明一实施例公开的步骤S3的具体流程示意图。

图5为本发明一实施例公开的步骤S33的具体流程示意图。

图6为本发明一实施例公开的分布式系统中自增ID管理装置的结构示意图。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本发明中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。

除非另作定义,此处使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明专利申请说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”或者“一”等类似词语也不表示数量限制,而是表示存在至少一个。

随着系统规模越来越大,分布式和微服务架构已经成为软件的基础架构。但是随之带来了一系列复杂的问题需要解决。ID生成就是其中之一,例如,随着数据库存储数据规模的不断增大,需要分库分表,自增ID无法满足ID唯一的特性,所以需要应用层进行唯一ID的生成。本发明将ID的生成和管理封装在函数库中,如java的jar包,linux的so等,需要生成递增ID的服务只需要引用这个库,不需要部署任何其他相关服务,就可以完成不重复递增ID的生成和管理。

附图1为本发明一实施例公开的分布式系统中自增ID的管理方法,该方法可以包括如下内容:

步骤S1,根据一服务的ID申请请求判断是否为首次申请。

当然在首次启用时需要创建一张当地的数据库表,该数据库表用于记录表名和已经分配的ID,表名是唯一的,保证不能重复插入,其中数据库表可采用HashMap或ConccurentHashMap等。其中数据表可至少包含包含表名和已分配ID两个字段,并且设置表名字段唯一。在系统启动时,加载所有当前已分配的最大ID,记录到该数据库表中。如附图2所示,需要生成分配ID的服务,直接引用ID生成管理库,获取ID申请记录,查询该服务是否已经申请过ID。

步骤S2,若为首次申请则分配唯一的记录表,并将申请ID数量和记录表名添加至当地数据库表中,所述数据库表被配置为记录已被接受的各ID申请对应的记录表名和分配ID段信息。

具体的,如果该服务为首次申请申请,解析该服务的ID分配申请请求,获取其所申请分配的ID数量,在内存中向该服务分配记录表的名字和可使用的ID段,然后调用数据库的插入接口插入表名和分配ID的最大值,也可以是将表名和用户需要申请的ID数量插入数据库。例如附图3所示,表中的table_name为各服务所分配的记录表名、assigned_id为分配给该服务使用的ID段最大可用ID。例如用户服务1需要申请的ID数量为50个,因此可给服务1分配记录表名为table_1,分配其使用的最大ID为50。之后如果服务2也申请分配ID,申请的ID数量为100个,则服务2可分配的记录表名为table_2,此时由于ID段1至50已分配给服务1,则分配给服务2的ID段为51至150,分配其使用的最大ID为150。在本实施例中,将所分配的对象作为锁定对象,可通过各类编程语言的锁定方式,如java的synchronize等,保证分配的每个记录表锁定的对象不同,使得不同记录的ID申请或分配都是可以是并发进行,不会出现多个数据库具有同一个ID的情况。

在本实施例中,数据库表被配置为在每次启动时获取所有记录表的已分配最大ID。当一记录表所分配的ID段发生补充等更新时,相应更新该记录表的已分配最大ID。其中,数据库表还可被配置为记录各记录表的当前已使用ID和可使用最大ID。在本实施例中,数据库表还被配置为记录各记录表自身可使用的起始ID和截止ID,每个记录表通过申请后分配获得的可使用ID段,服务每使用一ID即对记录表中可使用起始ID进行加1操作,即实时更新该ID段中可使用的起始ID。

步骤S3,若非首次申请,则在所述服务前次申请ID段已使用完后根据分配其新增ID段信息更新数据库表。如附图4所示,在本实施例中,步骤S3具体可包括:

步骤S31,判断数据库中对应的记录表中获得分配使用的ID段是否已使用完。

步骤S32,如果对应的记录表中的ID段尚有未使用的剩余ID,更新该记录表中的可使用的起始ID。

步骤S33,如果对应的记录表中的ID段已无剩余,则新补充分配ID段并更新该记录表。在本实施例中,该步骤可包括:

步骤S331,获取当前各记录表的已分配最大ID。

具体的,首先从数据库中获取当前已经分配的最大ID,可记为oldId。例如附图3中的数据库表情况,此时oldId为100。

步骤332,根据各记录表已分配最大ID中最大值获取可分配ID起始值。在本实施例中,可遍历各个记录表分配ID段最大值,从中获取本数据库表中所有已分配ID段中的最大ID值。

步骤333,根据所述可分配ID起始值和此次申请ID数量确定分配该服务的新增ID段。即计算向该记录表补充新ID段的信息,新分配的ID段起始ID可命名为newId,newId=oldId+申请ID的数量。同时更新该信息表可分配的ID段信息,包括起始ID值和终止ID值。

在另一些具体实施例中,如附图5所示,步骤S33还可具体包括:

步骤S331,从数据库中获取当前已分配的最大ID;具体的,首先从数据库中获取当前已经分配的最大ID,可记为oldId。例如附图3中的数据库表情况,此时oldId为100。

步骤S334,根据各当前已分配的最大ID和此次申请ID数量计算此次新分配ID最大值。即计算向该记录表补充新ID段的信息,新分配的ID段起始ID可命名为newId,newId=oldId+申请ID的数量。同时更新该信息表可分配的ID段信息,包括起始ID值和终止ID值。

步骤S335,通过CAS方式判断当前数据库已分配最大ID是否发生改变,如未改变则用所述计算得到的新分配ID最大值对数据库表中的对应信息表内容进行更新,否则重新计算新分配ID最大值。即在更新数据库的时候,通过CAS的方式,判断数据库中存的分配ID与oldId相等才更新,否则放弃更新并重复步骤步骤S331、S334和S335。

具体的,例如服务1再次申请ID,此次申请的ID数量为100。如果前一次申请的ID段已经使用完,则需重新给其分配新ID段。当数据库表的分配情况如附图3中的数据库表所示时。即在分配前的HashMap中的ID内容如下:

table_1:

max:50;

currentId:1。

table_2:

max:150;

currentId:51。

则数据库表中当前已经分配的最大ID值oldId为150。

计划新补充分配的ID段中的最大已分配ID:newId=oldId+申请ID的数量=150+100=250;

在计算获取newId后,此时服务3刚申请分配了具有60个ID数量的ID段,使得此时数据库中的已分配最大ID值assign_id=210;

此时oldId不等于assign_id,即数据更新失败,需要重新计算在新增了服务3后的oldId值,直至oldId等于assign_id后,才更新服务1的新身份分配的ID段信息,更新记录表table_1的信息,包括table_1的当前已分配ID和最大可使用ID。

具体的。例如此时重新获取oldId值为210,然后计算获得计划新补充分配的ID段中的最大已分配ID:newId=210+100=310;

在此期间没有新服务申获得ID段,则此时数据库中的已分配最大ID值assign_id=310;此时oldId等于assign_id,对记录表table_1进行更新:

table_1:

max:310;

currentId:211。

步骤S34,数据库中申请ID段成功后,更新数据库表中当前可分配的起始ID和截至ID。

本实施例通过将ID的生成和管理放在库中,只需要引用这个库,不需要部署任何其他服务,就可以生成和管理不重复的ID。由于该库是运行在服务的进程空间内,只要服务存在,就可以进行id的生成和管理。通过对每个服务的ID申请请求在数据库表中分配唯一的记录表和对应供使用的ID段,完成不重复递增ID的生成和管理,可根据用户的配置批量申请id,减少了对数据的压力,提高了分布式数据库性能。

需要说明的是,本说明书中前述各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的上述态软件多标签页管理装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

如附图6所示,本发明还提供了一种分布式系统中自增ID的管理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述各实施例中描述的分布式系统中自增ID的管理方法的各个步骤。

所述分布式系统中自增ID的管理装置可包括但不仅限于,处理器、存储器。本领域技术人员可以理解,所述示意图仅仅是分布式系统中自增ID的管理装置的示例,并不构成对分布式系统中自增ID的管理装置设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述分布式系统中自增ID的管理装置设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述分布式系统中自增ID的管理装置设备的控制中心,利用各种接口和线路连接整个分布式系统中自增ID的管理装置设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述分布式系统中自增ID的管理装置设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

所述分布式系统中自增ID的管理装置数据管理方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个分布式系统中自增ID的管理方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。

本文发布于:2023-04-13 09:30:40,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/85935.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图