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

基于分布式存储系统的序列号生成方法、装置及电子设备

文献发布时间:2024-04-18 19:59:31


基于分布式存储系统的序列号生成方法、装置及电子设备

技术领域

本申请涉及大数据技术领域,具体而言,涉及一种基于分布式存储系统的序列号生成方法、装置及电子设备。

背景技术

在分布式存储系统中,通常需要对大量数据和消息进行唯一标识,在金融行业中,分布式存储系统可以用来处理大量的交易数据,但是,随着交易量的增大,需要全局考虑序列号的生成问题,要求序列号满足全局唯一性。

其中,现有技术通常采用雪花算法和数据缓存的方式生成序列号,其中,通过雪花算法生成序列号虽然无需与数据库直接交互,但是其过于依赖服务器时间,导致在出现时钟回拨的异常时存在序列号重复率高的问题,因此不满足序列号全局唯一性的要求。而通过数据缓存的方式生成序列号,虽然可以满足序列号全局唯一性的要求,但是需要频繁与数据库交互,因此会导致数据库性能浪费、资源利用率的问题,在分布式存储系统的节点增多时,还会影响到分布式存储系统的稳定性。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本申请提供了一种基于分布式存储系统的序列号生成方法、装置及电子设备,以至少解决现有技术中分布式存储系统需要频繁与数据库交互以生成全局唯一的序列号,导致的数据库性能浪费、资源利用率低的技术问题。

根据本申请的一个方面,提供了一种基于分布式存储系统的序列号生成方法,包括:在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号,其中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量;通过预设规则对目标节点接收到序列号生成请求的目标时刻进行转换,得到时间序列号;依据目标时刻在目标时间单位上的值确定单位时间内序列号,其中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位;将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

可选地,基于分布式存储系统的序列号生成方法还包括:获取N个机器序列号中的每个机器序列号的时间标识,得到N个时间标识,其中,每个机器序列号的时间标识表征该机器序列号最后一次被占用的时刻;从N个时间标识中确定X个第一时间标识,其中,第一时间标识与目标时刻的间隔时长大于预设心跳时长,预设心跳时长为间歇性检测每个机器序列号的占用状态时所采用的间隔时长,X为大于或等于1的整数;将X个第一时间标识中与目标时刻的间隔时长最大的第一时间标识作为目标时间标识;将目标时间标识所对应的机器序列号作为目标机器序列号。

可选地,基于分布式存储系统的序列号生成方法还包括:在从预设的N个机器序列号中获取一个目标机器序列号之后,在目标节点持续占用目标机器序列号的情况下,每间隔预设心跳时长对目标机器序列号的目标时间标识进行一次更新操作,其中,更新操作用于将目标时间标识更新为当前时刻。

可选地,基于分布式存储系统的序列号生成方法还包括:在目标节点停止占用目标机器序列号的情况下,禁止对目标时间标识进行更新操作。

可选地,基于分布式存储系统的序列号生成方法还包括:计算目标时刻与第一预设时刻的间隔时长,其中,第一预设时刻为预设时间周期的起始时刻,分布式存储系统在预设时间周期内生成的所有目标序列号不重复;依据目标时间单位对间隔时长进行转换,得到时间序列号。

可选地,基于分布式存储系统的序列号生成方法还包括:将目标时刻在目标时间单位上的值作为参考值,依据参考值确定分布式存储系统生成的目标历史序列号,其中,目标历史序列号为分布式存储系统在上一次目标时间单位上的值为参考值时所生成的历史序列号;从目标历史序列号中提取处于第一预设位数上的数值,得到第一数值;检测第一数值是否等于预设阈值;在第一数值等于预设阈值时,对第一数值进行自增累加,得到第二数值;基于第二数值以及第一预设长度生成单位时间内序列号,其中,第一预设长度用于表征单位时间内序列号的序列长度。

可选地,基于分布式存储系统的序列号生成方法还包括:在第一数值等于预设阈值时,将第一数值设置为第三数值,其中,第三数值为0;基于第三数值以及第一预设长度生成单位时间内序列号。

根据本申请的另一方面,还提供了一种基于分布式存储系统的序列号生成装置,其中,包括:获取单元,用于在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号,其中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量;转换单元,用于通过预设规则对目标节点接收到序列号生成请求的目标时刻进行转换,得到时间序列号;确定单元,用于依据目标时刻在目标时间单位上的值确定单位时间内序列号,其中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位;拼接单元,用于将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

根据本申请的另一方面,还提供了一种计算机可读存储介质,其中,计算机可读存储介质中存储有计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述任意一项的基于分布式存储系统的序列号生成方法。

根据本申请的另一方面,还提供了一种电子设备,其中,电子设备包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述任意一项的基于分布式存储系统的序列号生成方法。

在本申请中,采用为分布式存储系统中的启动节点分配一个未被其他节点占用的机器序列号的方式,在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号,其中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量。随后,通过预设规则对目标节点接收到序列号生成请求的目标时刻进行转换,得到时间序列号,并依据目标时刻在目标时间单位上的值确定单位时间内序列号,其中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位。最后,将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

由上述内容可知,依据本申请的技术方案,分布式存储系统中的每个节点启动之后都可以获取得到一个其他节点未占用的机器序列号,因此,基于有限数量的预设机器序列号,本申请便可以实现为分布式存储系统中的每个节点对应不同的机器序列号的目的,从而确保不同节点所处理的数据对应的目标序列号一定是不同的。此外,本申请还通过预设规则对目标时刻进行转换,得到时间序列号,以及依据目标时刻在目标时间单位上的值确定单位时间内序列号,从而保证了即便是同一个节点处理的多个数据,也可以根据时间序列号和单位时间内序列号确保每个数据对应的目标序列号是唯一的。另外,由于本申请的技术方案不需要分布式存储系统频繁地与数据库交互,因此还可以避免对数据库性能不必要的消耗,从而提高数据库性能资源的利用率。

由此可见,本申请的技术方案实现了确保分布式存储系统生成的序列号是全局唯一的目的,并且解决了现有技术中分布式存储系统需要频繁与数据库交互以生成全局唯一的序列号,导致的数据库性能浪费、资源利用率低的技术问题。

附图说明

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

图1是根据本申请实施例的一种可选的基于分布式存储系统的序列号生成方法的流程图;

图2是根据本申请实施例的一种目标序列号的拼接过程示意图;

图3是根据本申请实施例的一种可选的获取目标机器序列号的流程图;

图4是根据本申请实施例的一种可选的生成单位内时间序列号的示意图;

图5是根据本申请实施例的一种生成目标序列号的示意图;

图6是根据本申请实施例的一种可选的基于分布式存储系统的序列号生成装置的示意图;

图7是根据本申请实施例的一种电子设备的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,本申请所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。例如,本系统和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构反馈的同意信息后,获取相关信息。

实施例1

根据本申请实施例,提供了一种基于分布式存储系统的序列号生成方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本申请实施例的一种可选的基于分布式存储系统的序列号生成方法的流程图,如图1所示,该方法包括如下步骤:

步骤S101,在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号。

在步骤S101中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量。

可选地,目标节点为分布式存储系统中的任意一个节点。假设分布式存储系统共有30个节点,则为了满足30个节点全部启动后,每个节点均对应不同的机器序列号,则预设的机器序列号的数量需要大于或等于30。

此外,假设目标节点为30个节点中的节点A,则为节点A分配的机器序列号一定是30个机器序列号中未被其他节点正在占用的机器序列号,例如,假设机器序列号C1已经被节点B所占用,则机器序列号C1不能分配给节点A;假设机器序列号C2当前未被30个节点中的任何一个节点所占用,则可以将机器序列号C2分配给节点A。

步骤S102,通过预设规则对分布式存储系统接收到序列号生成请求的目标时刻进行转换,得到时间序列号。

在步骤S102中,目标时刻为分布式存储系统接收到序列号生成请求时的系统时间,例如2021年2月17日14时10分23秒。序列号生成请求用于请求生成一个唯一序列号。

可选地,预设规则为时间换算规则,例如,一分钟等于60秒,一小时等于60分钟,一天等于24小时等等,分布式存储系统可以通过时间换算规则将目标时刻转换为一串数字字符,从而得到时间序列号。例如,目标时刻为2022年04月01日10:23:40,以时分秒为精度,则距离当天00:00:00时刻秒数为10*60*60+23*60+40=37420,时间序列号则为37420。

步骤S103,依据目标时刻在目标时间单位上的值确定单位时间内序列号。

在步骤S103中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位。

可选地,在分布式存储系统对应的多个时间单位分别为时、分、秒时,则目标时间单位为秒;在分布式存储系统对应的多个时间单位分别为时、分、秒、毫秒时,则目标时间单位为毫秒。

步骤S104,将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

可选地,图2是根据本申请实施例的一种目标序列号的拼接过程示意图,如图2所示,假设时间序列号为36950,目标机器序列号为0729,单位时间内序列号为01238,则目标序列号为36950072901238。

基于上述步骤S101至步骤S104的内容可知,在本申请中,采用为分布式存储系统中的启动节点分配一个未被其他节点占用的机器序列号的方式,在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号,其中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量。随后,通过预设规则对目标节点接收到序列号生成请求的目标时刻进行转换,得到时间序列号,并依据目标时刻在目标时间单位上的值确定单位时间内序列号,其中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位。最后,将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

由上述内容可知,依据本申请的技术方案,分布式存储系统中的每个节点启动之后都可以获取得到一个其他节点未占用的机器序列号,因此,基于有限数量的预设机器序列号,本申请便可以实现为分布式存储系统中的每个节点对应不同的机器序列号的目的,从而确保不同节点所处理的数据对应的目标序列号一定是不同的。此外,本申请还通过预设规则对目标时刻进行转换,得到时间序列号,以及依据目标时刻在目标时间单位上的值确定单位时间内序列号,从而保证了即便是同一个节点处理的多个数据,也可以根据时间序列号和单位时间内序列号确保每个数据对应的目标序列号是唯一的。另外,由于本申请的技术方案不需要分布式存储系统频繁地与数据库交互,因此还可以避免对数据库性能不必要的消耗,从而提高数据库性能资源的利用率。

由此可见,本申请的技术方案实现了确保分布式存储系统生成的序列号是全局唯一的目的,并且解决了现有技术中分布式存储系统需要频繁与数据库交互以生成全局唯一的序列号,导致的数据库性能浪费、资源利用率低的技术问题。

在一种可选的实施例中,图3是根据本申请实施例的一种可选的获取目标机器序列号的流程图,如图3所示,包括如下步骤:

步骤S301,获取N个机器序列号中的每个机器序列号的时间标识,得到N个时间标识。

在步骤S301中,每个机器序列号的时间标识表征该机器序列号最后一次被占用的时刻。

可选地,假设机器序列号C1的时间标识为2023年02月20日11时00分16秒,则说明分布式存储系统最后一次检测到机器序列号C1被占用的时刻为2023年02月20日11时00分16秒。假设机器序列号C2的时间标识为2023年02月20日12时00分16秒,则说明分布式存储系统最后一次检测到机器序列号C2被占用的时刻为2023年02月20日12时00分16秒。

步骤S302,从N个时间标识中确定X个第一时间标识。

在步骤S302中,第一时间标识与目标时刻的间隔时长大于预设心跳时长,预设心跳时长为间歇性检测每个机器序列号的占用状态时所采用的间隔时长,X为大于或等于1的整数。

可选地,预设心跳时长可以自定义设置,例如,可以将预设心跳时长设置为2分钟,假设目标时刻为2023年02月20日12时01分16秒,则结合上述示例中的机器序列号C1的时间标识为2023年02月20日11时00分16秒,机器序列号C2的时间标识为2023年02月20日12时00分16秒,则可以确定机器序列号C2的时间标识不是第一时间标识(其对应的时刻与目标时刻的间隔为1分钟,小于预设心跳时长),机器序列号C1的时间标识为一个第一时间标识(其对应的时刻与目标时刻的间隔为1小时1分钟,大于预设心跳时长)。

步骤S303,将X个第一时间标识中与目标时刻的间隔时长最大的第一时间标识作为目标时间标识。

可选地,如果X为大于1的整数,则可以将X个第一时间标识中与目标时刻的间隔时长最大的第一时间标识作为目标时间标识。

步骤S304,将目标时间标识所对应的机器序列号作为目标机器序列号。

需要说明的是,在从预设的N个机器序列号中获取一个目标机器序列号之后,在目标节点持续占用目标机器序列号的情况下,分布式存储系统会每间隔预设心跳时长对目标机器序列号的目标时间标识进行一次更新操作,并且,在目标节点停止占用目标机器序列号的情况下,分布式存储系统禁止对目标时间标识进行更新操作。其中,更新操作用于将目标时间标识更新为当前时刻。

可选地,机器序列号存储于数据库中,机器序列号的长度可以自定义设置,另外,分布式存储系统可以通过一张参数表用于记录预设的机器序列号,其中,参数表中至少包括以下信息:

主键ID(数据类型:BIGINT),使用场景ID(数据类型:VARCHAR),使用场景描述(数据类型:VARCHAR),机器序列号(数据类型:BIGINT),最后更新时间戳(数据类型:timestamp)。

可选地,在建立机器序列号的数据表时,可以预设机器序列号的数量,其中,预设的机器序列号的数量应不小于分布式节点的总数。

同时,当分布式存储系统的一个节点获取到一个机器序列号后,需要定时定频的发送心跳指令,并更新数据库中的时间戳,以标记该机器序列号已经被占用。此外,当分布示存储系统的一个节点在抢占机器序列号时,将会筛选出预设的所有机器序列号中心跳时间戳(即时间标识)与目标时刻的间隔时长大于预设心跳时长的机器序列号(即筛选出所有携带第一时间标识的机器序列号),并从中挑选出与目标时刻间隔时长最大的机器序列号作为目标机器序列号来使用,当目标机器序列号被启用时,对应的节点将依据预设心跳时长定时定频的发送心跳,以此来标记目标机器序列号已被占用,那么此时其它节点将无法抢占该目标机器序列号。

另外,当获取到目标机器序列号后,在具体使用时,可以将获取的目标机器序列号进行左补零(长度m),另外,还可以预设一张日志表记录每次机器序列号的获取情况。其中,日志表至少包括以下信息:

主键ID(数据类型:BIGINT)、场景ID(数据类型:VARCHAR)、机器IP(数据类型:VARCHAR)、机器名称(数据类型:VARCHAR)、机器序列号(数据类型:BIGINT)、最后更新时间戳(数据类型:VARCHAR)。

举例而言,目标时刻为2023-02-28 16:02:11.670882,分布式存储系统中有6个分布式节点,其中一个节点进行了重启,需要获取机器序列号。定义机器序列号长度为5,使用场景为ID为scene1,预设10个机器序列号供这些节点抢占,具体预设如表1所示,心跳周期预设为2分钟,此时被获取的机器序列号为101,在具体业务使用时,该机器序列号可以被左补零进行使用,即实际使用的机器序列号为00101。

表1

在一种可选的实施例中,为了获取得到时间序列号,分布式存储系统计算目标时刻与第一预设时刻的间隔时长,并依据目标时间单位对间隔时长进行转换,得到时间序列号。其中,第一预设时刻为预设时间周期的起始时刻,分布式存储系统在预设时间周期内生成的所有目标序列号不重复。

可选地,时间序列号的生成规则(即预设规则)包括但不限于如下所示:

(1)在以时分秒为精度时,计算目标时刻距离当天(即预设时间周期)00:00:00(即第一预设时刻)时的间隔时长,将间隔时长转换为秒数值(在以秒为目标时间单位时),得到时间序列号,长度为5,不足则左补零。

(2)在以日时分秒为精度时,计算目标时刻距离当月第一天的00:00:00时的间隔时长,将间隔时长转换为秒数值(在以秒为目标时间单位时),得到时间序列号,长度为7,不足则左补零。

(3)在以月日时分秒为精度时,计算目标时刻距离当年第一个月的第一天的00:00:00时的间隔时长,将间隔时长转换为秒数值(在以秒为目标时间单位时),得到时间序列号,长度为8,不足则左补零。

(4)在以年日时分秒为精度时,计算目标时刻距离某一历史时刻的间隔时长,将间隔时长转换为秒数值(在以秒为目标时间单位时),得到时间序列号,长度为10,不足则左补零。

举例而言,在目标时刻为2022年04月02日10:15:50时,分布式存储系统在以时分秒为精度,以秒为目标时间单位时,依据预设规则对目标时刻进行转换,通过计算10:15:50与00:00:00时的间隔时长,将间隔时长转换为秒数值:10*60*60+15*60+50=36950,得到时间序列号为36950;在以日时分秒为精度时,通过计算04月02日10:15:50与04月01日00:00:00时的间隔时长,分布式存储系统将间隔时长转换为秒数值1*24*60*60+10*60*60+15*60+50=123350,得到时间序列号为0123350。

需要说明的是,分布式存储系统通过以时分秒为精度得到时间序列号,能够实现时间序列号当天内不重复的技术效果;分布式存储系统通过以日时分秒为精度得到时间序列号,能够实现时间序列号当月内不重复的技术效果;分布式存储系统通过以月日时分秒为精度得到时间序列号,能够实现时间序列号当年内不重复的技术效果;分布式存储系统通过以年月日时分秒为精度得到时间序列号,能够实现时间序列号在未来不重复的技术效果。

在一种可选的实施例中,分布式存储系统将目标时刻在目标时间单位上的值作为参考值,并依据参考值确定分布式存储系统生成的目标历史序列号,其中,目标历史序列号为分布式存储系统在上一次目标时间单位上的值为参考值时所生成的历史序列号。

随后,分布式存储系统从目标历史序列号中提取处于第一预设位数上的数值,得到第一数值,并检测第一数值是否等于预设阈值。在第一数值等于预设阈值时,分布式存储系统对第一数值进行自增累加,得到第二数值,并基于第二数值以及第一预设长度生成单位时间内序列号,其中,第一预设长度用于表征单位时间内序列号的序列长度。

此外,在第一数值等于预设阈值时,分布式存储系统将第一数值设置为第三数值,并基于第三数值以及第一预设长度生成单位时间内序列号。其中,第三数值为0。

可选地,每个历史序列号为分布式存储系统在目标时间单位上的值为参考值时所生成的序列号,目标历史序列号为分布式存储系统在上一次目标时间单位上的值为参考值时所生成的历史序列号。例如,在目标时刻为14时10分23秒时,若目标时间单位为秒,此时分布式存储系统确定参考值为23秒,并查询在每个23秒对应的时间点上,分布式存储系统生成的历史序列号(例如在14时10分23秒之前,每个23秒对应的时间点,分布式存储系统生成的历史序列号依次为00001-01234),然后分布式存储系统通过从每个23秒对应的时间点所生成的历史序列号(即从00001-01234)中,确定在23秒对应的最后一个时间点生成的历史序列号(即01234)为目标历史序列号。

需要说明的是,由于每个历史序列号为分布式存储系统在目标时间单位上的值为参考值时所生成的序列号,目标历史序列号为分布式存储系统在上一次目标时间单位上的值为参考值时所生成的历史序列号,因此分布式存储系统得到的目标历史序列号一定不会是由于发生时钟回拨所导致出现的重复的序列号。

可选地,在得到目标序列号之后,分布式存储系统通过从目标历史序列号中提取处于第一预设位数上的数值,得到第一数值,然后分布式存储系统通过检测第一数值是否等于预设阈值来确定是否对第一数值进行归零处理,其中,预设阈值为预先设定的第一预设位数对应的最大值。系统在第一数值小于预设阈值(即第一数值不等于预设阈值)时,对第一数值进行加一处理,得到第二数值,基于第二数值以及第一预设长度生成单位时间内序列号;系统在第一数值等于预设阈值时,对第一数值进行归零处理,得到第三数值,基于第三数值以及第一预设长度生成单位时间内序列号。例如,在预设阈值为999,第一数值为998时,确定第一数值小于预设阈值,此时生成单位时间内序列号为00999;在预设阈值为999,第一数值为999时,确定单位时间内序列号小于预设阈值,此时生成单位时间内序列号为00000。

可选的,第一预设长度为预先设定的单位时间内序列号的序列长度,例如,单位时间内序列号中的序号可以为0-999…9(在占n位时,最长为n个9)。

需要说明的是,通过从目标历史序列号H中提取处于第一预设位数上的数值,得到第一数值,然后分布式存储系统通过检测第一数值是否等于预设阈值来确定是否对第一数值进行归零处理,能够使生成的单位时间内序列号在满足用户要求的情况下实现生成的单位时间内序列号不重复的目的。

在一种可选的实施例中,单位时间内序列号可以由程序生成,值为0~99…9,长度由使用方自行设置。假设单位时间内序列号长度为n,程序在加载时会用一个ArrayList在内存中加载每个单位时间的初始序列号值,均从0开始,每个单位时间序列号每被使用一次,均自增一次,达到最大值后,再次从0开始计数。

例如:n=5,当时间序列号以时分秒为精度进行计算序列号时,需要在内存中加载的ArrayListnumList长度为60,并且每个元素初始值为0。

每次使用时根据系统当前时间的秒数(即目标时刻的第一预设位数)取出对应的值,进行自增1使用,例如系统时间为12:30:23时最后一次生成的序列号为356,即numList.get(23)=356,此时序列号为00356,假设系统时间变为12:31:23,在12:31:23时刻共有12笔交易需要生成对应的单位时间内序列号,则单位时间内序列号的变化情况如图4所示,第一次生成的序号为357,对应序列号为00357,第二次生成的序号为358,对应的序列号为00358,依次类推,每生成一次更新一次numList(numList.set(23,358))。

在一种可选的实施例中,图5是根据本申请实施例的一种生成目标序列号的示意图,如图5所示,首先输入机器序列号长度(例如m)、单位时间内序列号长度(例如n)以及机器序列号对应的预设心跳时间频率(例如t),然后初始单位时间内序列号,将每秒的单位时间内序列号初始化为0,例如(0,0)、(1,0)(2,0)……(59,0)。随后,通过获取当前秒数值,查询得到对应单位时间内序列号最后一次使用值NUM(对应第一数值),判断NUM是否等于预设阈值MAX_NUM,如果NUM=MAX_NUM,则更新对应秒的NUM值为0;如果NUM不等于MAX_NUM,则更新对应秒的NUM值为NUM+1。最后输出单位时间内序列号NUM。

可选地,如图5所示,分布式存储系统还可以将一个已经检测到处于心跳停止状态(即未被任何一个节点所占用)的机器序列号作为目标机器序列号,并向目标机器序列号定时定频地发送心跳检测指令,更新目标机器序列号对应的时间标识,以保证该目标机器序列号不被其他节点抢占。分布式存储系统还可以将机器IP、机器名称、容器IP、机器序列号、每个机器序列号对应的时间标识全部记录在机器序列号日志表中。最后,分布式存储系统输出目标机器序列号MACHINE_NO。

可选地,如图5所示,为了生成时间序列号,分布式存储系统首先获取系统时间(即接收到序列号生成请求时的目标时刻),然后将系统时间按照不同时间精度进行转换,得到时间序列号,最后,分布式存储系统输出时间序列号TIME_SEQ。

可选地,如图5所示,分布式存储系统最后将时间序列号TIME_SEQ、目标机器序列号MACHINE_NO以及单位时间内序列号NUM按照各自对应的设置长度进行左补零,然后拼接成目标序列号。

由上述内容可知,依据本申请的技术方案,分布式存储系统中的每个节点启动之后都可以获取得到一个其他节点未占用的机器序列号,因此,基于有限数量的预设机器序列号,本申请便可以实现为分布式存储系统中的每个节点对应不同的机器序列号的目的,从而确保不同节点所处理的数据对应的目标序列号一定是不同的。此外,本申请还通过预设规则对目标时刻进行转换,得到时间序列号,以及依据目标时刻在目标时间单位上的值确定单位时间内序列号,从而保证了即便是同一个节点处理的多个数据,也可以根据时间序列号和单位时间内序列号确保每个数据对应的目标序列号是唯一的。另外,由于本申请的技术方案不需要分布式存储系统频繁地与数据库交互,因此还可以避免对数据库性能不必要的消耗,从而提高数据库性能资源的利用率。

由此可见,本申请的技术方案实现了确保分布式存储系统生成的序列号是全局唯一的目的,并且解决了现有技术中分布式存储系统需要频繁与数据库交互以生成全局唯一的序列号,导致的数据库性能浪费、资源利用率低的技术问题。

实施例2

本实施例提供了一种可选的基于分布式存储系统的序列号生成装置,该基于分布式存储系统的序列号生成装置中的各个实施单元对应于实施例1中各个实施步骤。

图6是根据本申请实施例的一种可选的基于分布式存储系统的序列号生成装置的示意图,如图6所示,包括:获取单元601、转换单元602、确定单元603以及拼接单元604。

可选地,获取单元601,用于在分布式存储系统中的目标节点启动之后,从预设的N个机器序列号中获取一个目标机器序列号,其中,目标机器序列号为N个机器序列号中未被分布式存储系统中除目标节点之外的节点所使用的机器序列号,N为大于1的整数,并且N大于或等于分布式存储系统中的节点数量;转换单元702,用于通过预设规则对分布式存储系统接收到序列号生成请求的目标时刻进行转换,得到时间序列号;确定单元703,用于依据目标时刻在目标时间单位上的值确定单位时间内序列号,其中,目标时间单位为分布式存储系统对应的多个时间单位中最小的时间单位;拼接单元704,用于将目标机器序列号、时间序列号以及单位时间内序列号拼接为目标序列号。

可选地,获取单元601,包括:第一获取子单元、第一确定子单元、第二确定子单元以及第三确定子单元。其中,第一获取子单元,用于获取N个机器序列号中的每个机器序列号的时间标识,得到N个时间标识,其中,每个机器序列号的时间标识表征该机器序列号最后一次被占用的时刻;第一确定子单元,用于从N个时间标识中确定X个第一时间标识,其中,第一时间标识与目标时刻的间隔时长大于预设心跳时长,预设心跳时长为间歇性检测每个机器序列号的占用状态时所采用的间隔时长,X为大于或等于1的整数;第二确定子单元,用于将X个第一时间标识中与目标时刻的间隔时长最大的第一时间标识作为目标时间标识;第三确定子单元,用于将目标时间标识所对应的机器序列号作为目标机器序列号。

可选地,基于分布式存储系统的序列号生成装置还包括:第一处理单元,用于在目标节点持续占用目标机器序列号的情况下,每间隔预设心跳时长对目标机器序列号的目标时间标识进行一次更新操作,其中,更新操作用于将目标时间标识更新为当前时刻。

可选地,基于分布式存储系统的序列号生成装置还包括:第二处理单元,用于在目标节点停止占用目标机器序列号的情况下,禁止对目标时间标识进行更新操作。

可选地,转换单元602,包括:计算子单元和转换子单元。其中,计算子单元,用于计算目标时刻与第一预设时刻的间隔时长,其中,第一预设时刻为预设时间周期的起始时刻,分布式存储系统在预设时间周期内生成的所有目标序列号不重复;转换子单元,用于依据目标时间单位对间隔时长进行转换,得到时间序列号。

可选地,确定单元603,包括:第四确定子单元、第五确定子单元、提取子单元、检测子单元、第一处理子单元以及生成子单元。其中,第四确定子单元,用于将目标时刻在目标时间单位上的值作为参考值;第五确定子单元,用于依据参考值确定分布式存储系统生成的目标历史序列号,其中,目标历史序列号为分布式存储系统在上一次目标时间单位上的值为参考值时所生成的历史序列号;提取子单元,用于从目标历史序列号中提取处于第一预设位数上的数值,得到第一数值;检测子单元,用于检测第一数值是否等于预设阈值;第一处理子单元,用于在第一数值等于预设阈值时,对第一数值进行自增累加,得到第二数值;生成子单元,用于基于第二数值以及第一预设长度生成单位时间内序列号,其中,第一预设长度用于表征单位时间内序列号的序列长度。

可选地,基于分布式存储系统的序列号生成装置还包括:设置单元以及生成单元。其中,设置单元,用于在第一数值等于预设阈值时,将第一数值设置为第三数值,其中,第三数值为0;生成单元,用于基于第三数值以及第一预设长度生成单位时间内序列号。

实施例3

根据本申请实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的计算机程序,其中,在计算机程序运行时控制计算机可读存储介质所在设备执行上述实施例1中的基于分布式存储系统的序列号生成方法。

实施例4

根据本申请实施例的另一方面,还提供了一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行上述实施例1中的基于分布式存储系统的序列号生成方法。

图7是根据本申请实施例的一种电子设备的示意图,如图7所示,本申请实施例提供了一种电子设备,电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现上述实施例1中的基于分布式存储系统的序列号生成方法。

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

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

技术分类

06120116521085