掌桥专利:专业的专利平台
掌桥专利
首页

一种生成主键的方法和分布式系统

文献发布时间:2023-06-19 12:02:28


一种生成主键的方法和分布式系统

技术领域

本发明涉及分布式存储技术领域,具体涉及一种生成主键的方法和用于生成主键的分布式系统。

背景技术

在关系型数据库中,每张数据表都有自己的主键,主键指的是一个列或多列的组合,其值能唯一标识数据表中的每一行,通过它可强制表的实体完整性。

现有的一种主键生成方案中,为了保证主键具有唯一性和单调递增性,会利用数据库锁实现数据表的主键生成任务,但是在高并发情况下,这种方式存在效率低且无法充分利用计算机性能的问题。

针对现有技术中在高并发情况下利用数据库锁实现主键生成任务存在效率低且无法充分利用计算机性能的技术问题,目前尚未存在有效的解决方案。

发明内容

本发明的目的在于提供了一种生成主键的方法和用于生成主键的分布式系统,能够解决现有技术中在高并发情况下利用数据库锁实现主键生成任务存在效率低且无法充分利用计算机性能的技术问题。

本发明的一个方面提供了一种生成主键的方法,应用于分布式系统,所述分布式系统包括一管理节点和多个配置节点,所述方法包括:所述管理节点接收主键生成请求;所述管理节点根据所述主键生成请求确定主键生成参数,其中,所述主键生成参数包括目标数据表名称和数值大于1的目标数量;所述管理节点从所述多个配置节点中确定一目标配置节点,并将所述主键生成参数发送至所述目标配置节点;所述目标配置节点判断本地是否存储有所述目标数据表名称关联的未使用序列号,其中,所述未使用序列号用于生成所述目标数据表名称关联的数据表的主键;当所述目标配置节点本地未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点将所述主键生成参数发送至Redis,接收Redis返回的与所述目标数据表名称关联的所述目标数量的未使用序列号,并将接收到的未使用序列号存储至本地;当所述目标配置节点本地存储有所述目标数据表名称关联的未使用序列号时,所述目标配置节点从本地获取一未使用序列号,并根据获取的所述未使用序列号生成所述主键。

可选地,所述管理节点从所述多个配置节点中确定一目标配置节点的步骤包括:所述管理节点获取本地存储的目录表,其中,所述目录表包括多条目录信息,每条所述目录信息包括数据表名称、所述数据表名称关联的未使用序列号的数量和存储所述数据表名称关联的未使用序列号的配置节点的节点标识;所述管理节点将所述目标数据表名称与各条所述目录信息中的数据表名称进行比对,获得对比结果;所述管理节点根据所述对比结果确定所述目标配置节点。

可选地,所述管理节点根据所述对比结果确定所述目标配置节点的步骤包括:当所述对比结果表征仅存在一条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点将该目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

可选地,所述管理节点根据所述对比结果确定所述目标配置节点的步骤包括:当所述对比结果表征存在多条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点从该多条目录信息中确定包含未使用序列号的数量最多的目录信息,并将确定出的目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

可选地,所述管理节点根据所述对比结果确定所述目标配置节点的步骤包括:当所述对比结果表征每条所述目录信息中的数据表名称与所述目标数据表名称均不一致时,所述管理节点判断所述目录表中的所有节点标识指向的配置节点是否涵盖了所述分布式系统中的所有配置节点;当涵盖了所述分布式系统中的所有配置节点时,所述管理节点确定所述目录表中出现次数最少的节点标识指向的配置节点作为所述目标配置节点;当未涵盖所述分布式系统中的所有配置节点时,所述管理节点从所述分布式系统中确定未被涵盖到的配置节点,并从所述未被涵盖到的配置节点中选择一配置节点作为所述目标配置节点。

可选地,所述管理节点根据所述主键生成请求确定主键生成参数的步骤包括:所述管理节点解析所述主键生成请求获得解析结果,其中,所述解析结果中包括所述目标数据表名称;当所述管理节点判定所述解析结果中包括所述目标数量时,所述管理节点从所述解析结果中获取所述目标数据表名称和所述目标数量形成所述主键生成参数;当所述管理节点判定所述解析结果中不包括所述目标数量时,所述管理节点获取预先设定的与所述目标数据表名称关联的预设数值,并将所述预设数值作为所述目标数量与所述解析结果中的目标数据表名称形成所述主键生成参数。

可选地,所述目标配置节点判断本地是否存储有所述目标数据表名称关联的未使用序列号的步骤包括:所述目标配置节点判断是否是首次接收所述主键生成参数;当所述目标配置节点首次接收所述主键生成参数时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号;当所述目标配置节点非首次接收所述主键生成参数时,所述目标配置节点继续判断本地内存中是否存储有所述目标数据表名称关联的未使用序列号;当所述目标配置节点本地内存中未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号。

可选地,所述根据获取的所述未使用序列号生成所述主键的步骤包括:获取与所述目标数据表名称关联的主键生成规则;根据所述主键生成规则对所述未使用序列号进行加工,以生成所述主键。

可选地,在所述根据获取的所述未使用序列号生成所述主键的步骤之后,所述方法还包括:所述目标配置节点统计当前时刻本地剩余的所述目标数据表名称关联的未使用序列号的数量,并将统计的数量同步给所述管理节点;所述管理节点根据同步的数量更新所述目录表。

本发明的另一个方面提供了一种用于生成主键的分布式系统,所述分布式系统包括一管理节点和多个配置节点,其中:

所述管理节点用于接收主键生成请求;根据所述主键生成请求确定主键生成参数;从所述多个配置节点中确定一目标配置节点,并将所述主键生成参数发送至所述目标配置节点;其中,所述主键生成参数包括目标数据表名称和数值大于1的目标数量;

所述目标配置节点用于判断本地是否存储有所述目标数据表名称关联的未使用序列号,其中,所述未使用序列号用于生成所述目标数据表名称关联的数据表的主键;当所述目标配置节点本地未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点将所述主键生成参数发送至Redis,接收Redis返回的与所述目标数据表名称关联的所述目标数量的未使用序列号,并将接收到的未使用序列号存储至本地;当所述目标配置节点本地存储有所述目标数据表名称关联的未使用序列号时,所述目标配置节点从本地获取一未使用序列号,并根据获取的所述未使用序列号生成所述主键。

本发明的再一个方面提供了一种计算机设备,所述计算机设备包括:存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例所述的生成主键的方法。

本发明的又一个方面提供了一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时实现上述任一实施例所述的生成主键的方法。进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。

本发明提供的生成主键的方法,当管理节点接收到主键生成请求之后,确定用于生成主键的目标配置节点,目标配置节点向Redis请求一定数量的未使用序列号并存储在本地,然后根据其中一个未使用序列号生成对应数据表的主键,当该目标配置节点再次为同一数据表生成主键时,直接调用本地剩余的未使用序列号生成主键即可,不需要再次向Redis发送请求,这种方式即使在高并发情况下也不会持续请求Redis,不会造成大量的IO等待,能够有效的应对高并发情况下数据拥堵的状况,充分利用了计算机性能并减少了计算机等待时间,提高了主键生成效率,且通过内部机制即可完成整个流程,不需要额外依赖其他中间件,解决了现有技术中在高并发情况下利用数据库锁实现主键生成任务存在效率低且无法充分利用计算机性能的技术问题。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示意性示出了根据本发明实施例一的生成主键的方法的流程图;

图2示意性示出了根据本发明实施例一的生成主键的方案的示意图;

图3示意性示出了根据本发明实施例二的用于生成主键的分布式系统的框图;

图4示意性示出了根据本发明实施例三的适于实现生成主键的方法的计算机设备的框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

实施例一

图1示意性示出了根据本发明实施例一的生成主键的方法的流程图,该生成主键的方法可以应用于分布式系统,该分布式系统可以包括一个管理节点和多个配置节点,如图1所示,该生成主键的方法可以包括步骤S1~步骤S6,具体地:

步骤S1,所述管理节点接收主键生成请求。

在数据表中,通常使用主键来唯一标识数据,不同数据表中的主键并不相同,且每个数据表中用于标识不同行数据的主键也不相同,即主键具有唯一性。本实施例中,用户通过客户端向数据表中插入数据时,每条数据需要由唯一的主键来标识,为了获取主键,客户端可以生成一个基于该数据表的主键生成请求,用于申请一个主键。其中,由于不同数据表中的主键并不相同,因此主键生成请求中必然包含数据表名称(即下述目标数据表名称),以明确是为哪个数据表分配主键,进而避免和其他数据表的主键混淆。

步骤S2,所述管理节点根据所述主键生成请求确定主键生成参数,其中,所述主键生成参数包括目标数据表名称和数值大于1的目标数量。

主键生成请求用于为数据表请求一个主键,该主键生成请求中携带该数据表的数据表名称,即目标数据表名称,通过解析主键生成请求可以获得该目标数据表名称。可选地,用户可以自定义一次性请求多少个用于生成主键的未使用序列号,即主键生成请求中还可以携带一目标数量。当主键生成请求中未携带该目标数量时,可以获取预先设定的一固定数值,即预设数值,将该预设数量作为目标数量。具体地,步骤S2可以包括步骤S21~步骤S23,其中:

步骤S21,所述管理节点解析所述主键生成请求获得解析结果,其中,所述解析结果中包括所述目标数据表名称;

步骤S22,当所述管理节点判定所述解析结果中包括所述目标数量时,所述管理节点从所述解析结果中获取所述目标数据表名称和所述目标数量形成所述主键生成参数;

步骤S23,当所述管理节点判定所述解析结果中不包括所述目标数量时,所述管理节点获取预先设定的与所述目标数据表名称关联的预设数值,并将所述预设数值作为所述目标数量与所述解析结果中的目标数据表名称形成所述主键生成参数。其中,预设数值为大于1的整数。

可选地,所述主键生成参数中还可以包括预设起始值,用于定义所请求的目标数量的未使用序列号的起始值,通过解析主键生成请求可以获取该预设起始值,然后将预设起始值、目标数量和目标数据表名称一起形成主键生成参数。

步骤S3,所述管理节点从所述多个配置节点中确定一目标配置节点,并将所述主键生成参数发送至所述目标配置节点。

管理节点可以任意选择一配置节点作为目标配置节点,还可以根据预先存储的目录表确定一目标配置节点。比如,在步骤S3中,所述管理节点从所述多个配置节点中确定一目标配置节点的步骤包括步骤S31~步骤S33,其中:

步骤S31,所述管理节点获取本地存储的目录表,其中,所述目录表包括多条目录信息,每条所述目录信息包括数据表名称、所述数据表名称关联的未使用序列号的数量和存储所述数据表名称关联的未使用序列号的配置节点的节点标识;

步骤S32,所述管理节点将所述目标数据表名称与各条所述目录信息中的数据表名称进行比对,获得对比结果;

步骤S33,所述管理节点根据所述对比结果确定所述目标配置节点。

其中,节点标识用于唯一标记配置节点,其可以为配置节点的物理地址,还可以为配置节点ID号。对比结果包括多种情况,针对每一种情况本实施例均预先设定了不同的确定策略,从而完整无遗漏的确定出一目标配置节点,保证流程的顺利执行。具体策略如下:

策略一,步骤S33可以包括步骤S331,其中:

步骤S331,当所述对比结果表征仅存在一条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点将该目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

策略二,步骤S33还可以包括步骤S331’,其中:

步骤S331’,当所述对比结果表征存在多条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点从该多条目录信息中确定包含未使用序列号的数量最多的目录信息,并将确定出的目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

本实施例中,为了避免未使用序列号长时间占用系统存储空间,需要尽快消耗掉配置节点中的未使用序列号,因此当多条目录信息中的数据表名称均与目标数据表名称一致时,可以从这些目录信息中确定出一未使用序列号的数量最多的目录信息,然后将该目录信息的节点标识所指向的配置节点确定为目标配置节点。

策略三,步骤S33还可以包括步骤S331”~步骤S333”,其中:

步骤S331”,当所述对比结果表征每条所述目录信息中的数据表名称与所述目标数据表名称均不一致时,所述管理节点判断所述目录表中的所有节点标识指向的配置节点是否涵盖了所述分布式系统中的所有配置节点;

步骤S332”,当涵盖了所述分布式系统中的所有配置节点时,所述管理节点确定所述目录表中出现次数最少的节点标识指向的配置节点作为所述目标配置节点;

步骤S333”,当未涵盖所述分布式系统中的所有配置节点时,所述管理节点从所述分布式系统中确定未被涵盖到的配置节点,并从所述未被涵盖到的配置节点中选择一配置节点作为所述目标配置节点。

为了尽可能的加快主键生成速度,当目录表中的每个数据表名称均与目标数据表名称不一致,且该目录表定义的信息涉及了分布式系统的所有配置节点时,基于节点标识出现次数越少表明所指向的配置节点越为空闲的原则,可以确定目录表中出现次数最少的节点标识指向的配置节点作为目标配置节点。但是,当目录表定义的信息并为涉及分布式系统的所有配置节点时,表明还有一些配置节点处理空闲状态,此时从未被涵盖到的配置节点中选择一个配置节点作为目标配置节点即可。其中,可以从未被涵盖到的配置节点中随机选择一个配置节点作为目标配置节点;也可以从未被涵盖到的配置节点中选择数据处理能力最大的配置节点作为目标配置节点,以进一步加快处理速度;还可以从未被涵盖到的配置节点中选择内存最大的配置节点作为目标配置节点,以便可以存储更多的未使用序列号。

其中,数据处理能力的可以是预先确认的,比如:

方案一,数据处理能力是指配置节点按照预定处理逻辑,在预定时长T1内处理完的数据量M1,其中,配置节点处理完的数据量越多,数据处理能力越强;配置节点处理完的数据量越少,数据处理能力越差。此时可以将该数据量确定为表征配置节点数据处理能力的参数。

或者,方案二,数据处理能力是指配置节点按照预定处理逻辑,处理完预定数据量M2的数据所需要的时长T2,其中,配置节点所需要的时长越短,数据处理能力越强;配置节点所需要的时长越长,数据处理能力越差。此时可以将该时长确定为表征配置节点数据处理能力的参数。

或者,方案三,数据处理能力是指在单位时长内配置节点处理完的数据量M3,即配置节点的数据处理速度,其中,配置节点的数据处理速度越快,数据处理能力越强;配置节点的数据处理速度越慢,数据处理能力越差。此时可以将该数据处理速度确定为配置节点数据处理能力的参数。

步骤S4,所述目标配置节点判断本地是否存储有所述目标数据表名称关联的未使用序列号,其中,所述未使用序列号用于生成所述目标数据表名称关联的数据表的主键。

不同的数据表名称关联的序列号是分离存储的,本实施例中,可以在本地查找与目标数据表名称关联的序列号列表,确定该序列号列表中存储的各个序列号的状态位,状态位用于标识序列号处于已使用状态还是未使用状态,当存在任意一个或多个状态位表征未使用状态时,确定本地存储有该目标数据表名称关联的未使用序列号。

可选地,步骤S4可以包括步骤S41~步骤S44,其中:

步骤S41,所述目标配置节点判断是否是首次接收所述主键生成参数;

步骤S42,当所述目标配置节点首次接收所述主键生成参数时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号;

步骤S43,当所述目标配置节点非首次接收所述主键生成参数时,所述目标配置节点继续判断本地内存中是否存储有所述目标数据表名称关联的未使用序列号;

步骤S44,当所述目标配置节点本地内存中未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号。

由于主键生成参数中包含目标数据表名称,若目标配置节点首次接收该主键生成参数(比如处理器未曾处理过该主键生成参数),则目标配置节点必然没有为该目标数据表名称指向的数据表请求过序列号,则此时可以判定本地未存储目标数据表名称关联的未使用序列号。

若非首次接收,则可以判断本地内存是否存储有目标数据表名称关联的未使用序列号,若有则认为本地存储有该未使用序列号,否则认为本地未存储。其中,将序列号存储在本地内存,然后根据本地内存的未使用序列号生成主键,在工作效率上有一定提升。

步骤S5,当所述目标配置节点本地未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点将所述主键生成参数发送至Redis,接收Redis返回的与所述目标数据表名称关联的所述目标数量的未使用序列号,并将接收到的未使用序列号存储至本地。

Redis是一个能够执行计算功能的存储系统,其基于incrementBy方法可以生成逐步递增的序列号(又称为未使用序列号),且能够保证向Redis申请序列号的设备之间获得的序列号不会存在冲突,具备唯一性,进而可以保证最终生成的主键是唯一的。Redis接收到主键生成参数之后,调用incrementBy方法为目标数据表名称生成关联的目标数量的未使用序列号,这些序列号满足单调递增特性,若主键生成参数中包括预设起始值,则Redis生成的这些未使用序列号的起始值为该预设起始值。

目标配置节点接收到Redis返回的这些未使用序列号之后,可以将其存储在本地,具体可以是存储在本地内存。

步骤S6,当所述目标配置节点本地存储有所述目标数据表名称关联的未使用序列号时,所述目标配置节点从本地获取一未使用序列号,并根据获取的所述未使用序列号生成所述主键。

若步骤S4判断本地存储有该未使用序列号,表明Redis之前已经为该目标数据表名称分配的未使用序列号,直接执行步骤S6即可;若步骤S4判断出本地未存储该未使用序列号,可能是Redis之前未给目标数据表名称分配序列号,也有可能是分配的序列号已使用完,此时可以经步骤S5向Redis申请未使用序列号后,然后再执行步骤S6。

本实施例中,每个主键生成请求用于请求一个主键,每个序列号用于生成一个主键,基于本次主键生成请求,可以随机选择一个未使用序列号,或者选择数值最小的未使用序列号,然后基于选择的未使用序列号生成一主键,随后将该序列号的状态位设置为已使用。

其中,对于本地剩余的与目标数据表名称关联的未使用序列号,待目标配置节点下次接收到包含该目标数据表名称的主键生成参数时,继续从本地获取一个未使用序列号生成主键即可,无需再次向Redis请求,节省时间,加快主键生成速度。

可选地,在步骤S6中,所述根据获取的所述未使用序列号生成所述主键的步骤包括步骤S61和步骤S62,其中:

步骤S61,获取与所述目标数据表名称关联的主键生成规则;

步骤S62,根据所述主键生成规则对所述未使用序列号进行加工,以生成所述主键。

每个数据表名称可以关联不同的主键生成规则,主键生成规则可以定义主键前缀,且将选定的未使用序列号作为主键后缀,将定义的主键前缀和作为主键后缀的未使用序列号进行组合,则可以生成一主键。前缀主键例如为以当前时间(年月日时分秒)作为主键前缀,则本次主键前缀可以为2021/3/11/11:34:03,下次主键前缀可以为2021/3/11/11:34:15。本实施例中,主键生成算法简单,可以保证计算机的运行性能,且由于主键符合单调递增特性,简单易读,在业务运营和排查问题方面具有明显优势。

可选地,在步骤S6之后,所述方法还包括步骤A1和步骤A2,其中:

步骤A1,所述目标配置节点统计当前时刻本地剩余的所述目标数据表名称关联的未使用序列号的数量,并将统计的数量同步给所述管理节点;

步骤A2,所述管理节点根据同步的数量更新所述目录表。

配置节点只用于内部计算,管理节点作为配置节点和外部客户端沟通的桥梁,在目标配置节点生成主键之后,将主键发送至管理节点,管理节点会将主键返回客户端,同时为了保证目录表的准确性,目标配置节点还会统计当前剩余未使用序列号的数量,然后同步给管理节点,以使管理节点更新目标表,例如可以是将目录表中与数目标据表名称和目标配置节点关联的未使用序列号的数量减1。

下面以一个具体示例详细解释本发明。

如图2所示,JVM-01、JVM-02和JVM-03表示三个配置节点,管理节点未在图中体现,TableA和TableB均为数据表名称,申请号段即为序列号,为了避免混淆,每个配置节点中不同数据表名称关联序列号是分离存储的。根据目标配置节点的确定策略,不同配置节点可能会处理相同数据表名称关联的主键,因此,不同配置节点中可能会存储相同数据表名称关联的序列号。若目标配置节点首次接收主键生成参数,目标配置节点向Redis发送主键生成参数,Redis基于incrementBy方法返回目标数据表名称(即图中tableName的值)关联的目标数量(即图中step的值)的未使用序列号,目标配置节点将这些未使用序列号存储在本地后,选择一个未使用序列号生成主键;若目标配置节点不是首次接收主键生成参数,先判断本地是否存储有目标数据表名称关联的未使用序列号,若有直接获取一未使用系列号生成主键,若无则向Redis发送主键生成请求,后续步骤与首次接收主键生成参数一致。

实施例二

本发明的实施例二提供了一种用于生成主键的分布式系统,该分布式系统与上述实施例一相对应,相应的技术特征和技术效果在本实施例中不再详述,相关之处可参考上述实施例一。具体地,图3示意性示出了根据本发明实施例二的用于生成主键的分布式系统的框图,如图3所示,该分布式系统300可以包括管理节点301和多个配置节点302,其中:

所述管理节点301用于接收主键生成请求;根据所述主键生成请求确定主键生成参数;从所述多个配置节点302中确定一目标配置节点302,并将所述主键生成参数发送至所述目标配置节点302;其中,所述主键生成参数包括目标数据表名称和数值大于1的目标数量;

所述目标配置节点302用于判断本地是否存储有所述目标数据表名称关联的未使用序列号,其中,所述未使用序列号用于生成所述目标数据表名称关联的数据表的主键;当所述目标配置节点302本地未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点302将所述主键生成参数发送至Redis,接收Redis返回的与所述目标数据表名称关联的所述目标数量的未使用序列号,并将接收到的未使用序列号存储至本地;当所述目标配置节点302本地存储有所述目标数据表名称关联的未使用序列号时,所述目标配置节点302从本地获取一未使用序列号,并根据获取的所述未使用序列号生成所述主键。

可选地,所述管理节点在执行从所述多个配置节点中确定一目标配置节点的步骤时,还用于:获取本地存储的目录表,其中,所述目录表包括多条目录信息,每条所述目录信息包括数据表名称、所述数据表名称关联的未使用序列号的数量和存储所述数据表名称关联的未使用序列号的配置节点的节点标识;将所述目标数据表名称与各条所述目录信息中的数据表名称进行比对,获得对比结果;根据所述对比结果确定所述目标配置节点。

可选地,所述管理节点在执行根据所述对比结果确定所述目标配置节点的步骤时,还用于:当所述对比结果表征仅存在一条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点将该目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

可选地,所述管理节点在执行根据所述对比结果确定所述目标配置节点的步骤时,还用于:当所述对比结果表征存在多条所述目录信息中的数据表名称与所述目标数据表名称一致时,所述管理节点从该多条目录信息中确定包含未使用序列号的数量最多的目录信息,并将确定出的目录信息中的节点标识指向的配置节点确定为所述目标配置节点。

可选地,所述管理节点在执行根据所述对比结果确定所述目标配置节点的步骤时,还用于:当所述对比结果表征每条所述目录信息中的数据表名称与所述目标数据表名称均不一致时,所述管理节点判断所述目录表中的所有节点标识指向的配置节点是否涵盖了所述分布式系统中的所有配置节点;当涵盖了所述分布式系统中的所有配置节点时,所述管理节点确定所述目录表中出现次数最少的节点标识指向的配置节点作为所述目标配置节点;当未涵盖所述分布式系统中的所有配置节点时,所述管理节点从所述分布式系统中确定未被涵盖到的配置节点,并从所述未被涵盖到的配置节点中选择一配置节点作为所述目标配置节点。

可选地,所述管理节点在执行根据所述主键生成请求确定主键生成参数的步骤时,还用于:所述管理节点解析所述主键生成请求获得解析结果,其中,所述解析结果中包括所述目标数据表名称;当所述管理节点判定所述解析结果中包括所述目标数量时,所述管理节点从所述解析结果中获取所述目标数据表名称和所述目标数量形成所述主键生成参数;当所述管理节点判定所述解析结果中不包括所述目标数量时,所述管理节点获取预先设定的与所述目标数据表名称关联的预设数值,并将所述预设数值作为所述目标数量与所述解析结果中的目标数据表名称形成所述主键生成参数。

可选地,所述目标配置节点在执行判断本地是否存储有所述目标数据表名称关联的未使用序列号的步骤时,还用于:所述目标配置节点判断是否是首次接收所述主键生成参数;当所述目标配置节点首次接收所述主键生成参数时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号;当所述目标配置节点非首次接收所述主键生成参数时,所述目标配置节点继续判断本地内存中是否存储有所述目标数据表名称关联的未使用序列号;当所述目标配置节点本地内存中未存储所述目标数据表名称关联的未使用序列号时,所述目标配置节点判定本地未存储所述目标数据表名称关联的未使用序列号。

可选地,所述目标配置节点在执行根据获取的所述未使用序列号生成所述主键的步骤时,还用于:获取与所述目标数据表名称关联的主键生成规则;根据所述主键生成规则对所述未使用序列号进行加工,以生成所述主键。

可选地,所述目标配置节点还用于:在执行所述根据获取的所述未使用序列号生成所述主键的步骤之后,统计当前时刻本地剩余的所述目标数据表名称关联的未使用序列号的数量,并将统计的数量同步给所述管理节点;所述管理节点还用于根据同步的数量更新所述目录表。

实施例三

图4示意性示出了根据本发明实施例三的适于实现生成主键的方法的计算机设备的框图。本实施例中,计算机设备400可以是执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图4所示,本实施例的计算机设备400至少包括但不限于:可通过系统总线相互通信连接的存储器401、处理器402、网络接口403。需要指出的是,图4仅示出了具有组件401-403的计算机设备400,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

本实施例中,存储器403至少包括一种类型的计算机可读存储介质,可读存储介质包括包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器401可以是计算机设备400的内部存储单元,例如该计算机设备400的硬盘或内存。在另一些实施例中,存储器401也可以是计算机设备400的外部存储设备,例如该计算机设备400上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器401还可以既包括计算机设备400的内部存储单元也包括其外部存储设备。在本实施例中,存储器401通常用于存储安装于计算机设备400的操作系统和各类应用软件,例如生成主键的方法的程序代码等。此外,存储器401还可以用于暂时地存储已经输出或者将要输出的各类数据。

处理器402在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器402通常用于控制计算机设备400的总体操作。例如执行与计算机设备400进行数据交互或者通信相关的控制和处理等的生成主键的方法的程序代码。

在本实施例中,存储于存储器401中的生成主键的方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器402)所执行,以完成本发明。

网络接口403可包括无线网络接口或有线网络接口,该网络接口403通常用于在计算机设备400与其他计算机设备之间建立通信链接。例如,网络接口403用于通过网络将计算机设备400与外部终端相连,在计算机设备400与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,简称为GSM)、宽带码分多址(Wideband CodeDivision MultipleAccess,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。

实施例四

本实施例四还提供一种计算机可读存储介质,包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等,其上存储有计算机程序,所述计算机程序被处理器执行时实现生成主键的方法。进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种生成主键的方法和分布式系统
  • 一种数据库主键生成方法、分表定位方法和装置
技术分类

06120113148603