一种用于数据库的序列号生成方法、装置、设备及介质转让专利

申请号 : CN202310801719.4

文献号 : CN116541428B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谢清泉

申请人 : 深圳前海环融联易信息科技服务有限公司

摘要 :

本申请涉及数据库技术领域,公开了一种用于数据库的序列号生成方法、装置、设备和介质,用于降低系统性能开销。方法部分包括:在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述记录为所述虚拟机新的序列号当前值。

权利要求 :

1.一种用于数据库的序列号生成方法,其特征在于,所述方法包括:在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括所述虚拟机的缓存大小和步长;

将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;

当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述新的序列号记录为所述虚拟机新的序列号当前值;

其中,按照所述步长,对所述序列号当前值进行自增,以生产所述新的序列号,其中,所述新的序列号的序列号数值<所述序列号最大值;

所述序列号配置信息还包括所述虚拟机的IP地址、端口号和填充方式,所述按照所述步长,对所述序列号当前值进行自增,包括:按照所述虚拟机的IP地址和端口号生成基础序列号信息;

按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值;

将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号;

所述序列号配置信息还包括所述虚拟机的业务名称,所述按照所述虚拟机的IP地址和端口号生成基础序列号信息,包括:对所述虚拟机的IP地址、业务名称和端口号进行拼接,以生成基础序列号信息;

所述虚拟机至少包括两个,不同所述虚拟机的所述序列号申请号段的范围不相同,并且所述不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。

2.如权利要求1所述的序列号生成方法,其特征在于,所述根据所述序列号当前值、步长和序列号最大值生成新的序列号之后,所述方法还包括:当判断所述虚拟机能使用的序列号申请号段使用完时,检测所有的所述虚拟机中已有的序列号申请号段中的最大值;

根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,作为所述虚拟机能使用的序列号申请号段。

3.如权利要求2所述的序列号生成方法,其特征在于,所述根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,包括:在所述已有的序列号申请号段中的最大值加预设值,得到号段初始值;

将所述号段初始值加上所述虚拟机的缓存大小,得到号段终止值;

将所述号段初始值与所述号段终止值之间的号段范围,生成为所述新的序列号申请号段。

4.一种用于数据库的序列号生成装置,其特征在于,所述装置包括:加载模块,用于在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括所述虚拟机的缓存大小和步长;

获取模块,用于将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;

生成模块,用于当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号;

记录模块,用于将所述新的序列号记录为所述虚拟机新的序列号当前值;

其中,按照所述步长,对所述序列号当前值进行自增,以生产所述新的序列号,其中,所述新的序列号的序列号数值<所述序列号最大值;

所述序列号配置信息还包括所述虚拟机的IP地址、端口号和填充方式,所述按照所述步长,对所述序列号当前值进行自增,包括:按照所述虚拟机的IP地址和端口号生成基础序列号信息;

按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值;

将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号;

所述序列号配置信息还包括所述虚拟机的业务名称,所述按照所述虚拟机的IP地址和端口号生成基础序列号信息,包括:对所述虚拟机的IP地址、业务名称和端口号进行拼接,以生成基础序列号信息;

所述虚拟机至少包括两个,不同所述虚拟机的所述序列号申请号段的范围不相同,并且所述不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。

5.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至

3任一项所述的序列号生成方法的步骤。

6.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述的序列号生成方法的步骤。

说明书 :

一种用于数据库的序列号生成方法、装置、设备及介质

技术领域

[0001] 本申请涉及数据库技术领域,尤其涉及一种用于数据库的序列号生成方法、装置、设备及介质。

背景技术

[0002] 发明人研究发现,现有的基于数据库的序列号生成机制大致有两种,一种是数据库的sequence序号的自增,另外一种是mysql的主键自增机制,这两种都存在性能开销比较大,比如mysql中,每个表的自增主键就是使用的次机制,插入一条数据,主键就是1,再插入1条数据就是2,插入完成了,再查询就获取出来了这个序号了。因此,从应用层面,每获取一个序号都要到数据库层面去操作。
[0003] 可见,传统的数据库序列号生成方式性能开销较大。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种用于数据库的序列号生成方法、装置、设备和介质,以解决性能开销较大的技术问题。
[0005] 一种用于数据库的序列号生成方法,所述方法包括:
[0006] 在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0007] 将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0008] 当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述新的序列号记录为所述虚拟机新的序列号当前值。
[0009] 进一步地,所述根据所述序列号当前值、步长和序列号最大值生成新的序列号,包括:
[0010] 按照所述步长,对所述序列号当前值进行自增,以生产所述新的序列号,其中,所述新的序列号的序列号数值<所述序列号最大值。
[0011] 进一步地,所述序列号配置信息还包括所述虚拟机的IP地址、端口号和填充方式,所述按照所述步长,对所述序列号当前值进行自增,包括:
[0012] 按照所述虚拟机的IP地址和端口号生成基础序列号信息;
[0013] 按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值;
[0014] 将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号。
[0015] 进一步地,所述序列号配置信息还包括所述虚拟机的业务名称,所述按照所述虚拟机的IP地址和端口号生成基础序列号信息,包括:
[0016] 对所述虚拟机的IP地址、业务名称和端口号进行拼接,以生成基础序列号信息。
[0017] 与传统的方案不同的是,本申请实施例中的生成的序列号中,利用机器的端口不能重复占用的特点,结合机器的IP地址能体现新的序列号的唯一性,在充分保证序列号的唯一性的同时,还添加了业务名称,能够让产生的序列号具有可观性和便于管理。
[0018] 进一步地,所述虚拟机至少包括两个,不同所述虚拟机的所述序列号申请号段的范围不相同,并且所述不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。
[0019] 进一步地,所述根据所述序列号当前值、步长和序列号最大值生成新的序列号之后,所述方法还包括:
[0020] 当判断所述虚拟机能使用的序列号申请号段使用完时,检测所有的所述虚拟机中已有的序列号申请号段中的最大值;
[0021] 根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,作为所述虚拟机能使用的序列号申请号段。
[0022] 进一步地,所述根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,包括:
[0023] 在所述已有的序列号申请号段中的最大值加预设值,得到号段初始值;
[0024] 将所述号段初始值加上所述虚拟机的缓存大小,得到号段终止值;
[0025] 将所述号段初始值与所述号段终止值之间的号段范围,生成为所述新的序列号申请号段。
[0026] 在虚拟机根据缓存大小已申请的序列号申请号段已使用完时,会再结合缓存大小和所有虚拟机jvm已经申请到序列号申请号段的使用情况,再次结合缓存大小生成新的号段,以便不断生成序列号,保证序列号自增的进行,保证业务的进行。
[0027] 一种用于数据库的序列号生成装置,所述装置包括:
[0028] 加载模块,用于在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0029] 获取模块,用于将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0030] 生成模块,用于当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号;
[0031] 记录模块,用于将所述新的序列号记录为所述虚拟机新的序列号当前值。
[0032] 一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前述任一项所述的序列号生成方法的步骤。
[0033] 一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述任一项所述的序列号生成方法的步骤。
[0034] 上述所实现的其中一个方案中,可利用分布式架构中虚拟机的内存的缓存大小实现高效生产数据库序列号,而不用频繁和数据库交互自增的方式,可有效地降低性能开销的情况,效率更高;而且值得说明的是,在该实施例中,由于根据虚拟机的内存的缓存大小生成序列号,在虚拟机jvm异常宕机的时候,也仅是会丢失号段,而不影响序列号的生成和使用。

附图说明

[0035] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0036] 图1是本申请一实施例中序列号生成方法的一流程示意图;
[0037] 图2是本申请一实施例中的一序列号生成方法的一个系统示意图;
[0038] 图3是本申请一实施例中序列号生成装置的一结构示意图;
[0039] 图4是本申请一实施例中计算机设备的一结构示意图。

具体实施方式

[0040] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0041] 需要说明的是,自应用架构不断地发展和演变,应用面临的请求压力也组件增大,数据量也不断地增多,单点的应用服务难以再满足性能和迭代要求,为了满足面对互联网好海量的用户冲击,应用架构从而从开始的单体架构,经过水平拆分,垂直拆分等方案,再到后来的分布式架构,微服务架构,经过了多层次的变迁,本申请实施例中提供了用于数据库的序列号生成方法,可应用于分布式架构、微服务架构等应用架构中,具体不做限定,其中,值得说明的是,在分布式架构、微服务架构登应用架构中,分布式序列号极为关键,需要在单应用边界内保持全局唯一性,而传统的序列号生成方式依赖于自增的方式产生,比如mysql,每个表的自增主键就是使用的次机制,插入一条数据,主键就是1,再插入1条数据就是2,插入完成了,在查询就获取出来了这个序列号了,作为应用,每获取一个序列号都要到数据库层面去操作,性能开销比较大,为解决该技术问题,提供了一种用于数据库的序列号生成方法,以解决性能开销大的技术问题。
[0042] 本申请实施例提供了一种用于数据库的序列号生成方法,所述方法包括:
[0043] S10:在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0044] S20:将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0045] S30:当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述新的序列号记录为所述虚拟机新的序列号当前值。
[0046] 如图2所示,图2是本申请一实施例中提供的分布式架构的架构示意图,包括数据库(mysql)和多个虚拟机,如虚拟机1(jvm1)和虚拟机2(jvm2),虚拟机jvm运行在机器上,该实施例中,对于分布式架构中的任何一个虚拟机而言,在虚拟机启动时,辉加载序列号配置信号,该序列号配置信息包括该对应虚拟机内的缓存大小和步长。需要说明的是,该缓存大小指的是该虚拟机的缓存大小,而步长指序号增长步长。
[0047] 在加载了序列号配置信息后,将解析出该虚拟机的缓存大小和步长,所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值,虚拟机的序列号当前值指的是该虚拟机当前的记录的最新的序列号值,当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述新的序列号记录为所述虚拟机新的序列号当前值。
[0048] 可见,该实施例中,提供了一种用于数据库的序列号生成方法,可利用分布式架构中虚拟机的内存的缓存大小实现高效生产数据库序列号,而不用频繁和数据库交互自增的方式,可有效地降低性能开销的情况,效率更高。
[0049] 而且值得说明的是,在该实施例中,由于根据虚拟机的内存的缓存大小生成序列号,在虚拟机jvm异常宕机的时候,也仅是会丢失号段,而不影响序列号的生成和使用。
[0050] 在一实施例中,步骤S30中,也即:所述根据所述序列号当前值、步长和序列号最大值生成新的序列号,包括:
[0051] 按照所述步长,对所述序列号当前值进行自增,以生产所述新的序列号,其中,所述新的序列号的序列号数值<所述序列号最大值。
[0052] 比如,假设有两个虚拟机jvm,分别是虚拟机jvm1,虚拟机jvm2,有一个序号配置配置编码叫ProjectNo,两个虚拟机jvm的缓存大小为5000,以虚拟机jvm1为例,那么虚拟机jvm1启动的时候内存里面最小就是1,最大就是5000,虚拟机jvm2启动的时候最小就是5001,最大就是10000,该实施例中,假如虚拟机jvm1的序列号当前值为499,该序列号499会被虚拟机jvm1中的序列号记录器记录下来,该虚拟机jvm1启动的时候内存号段还有500‑
5000,当虚拟机jvm1收到序列号生成请求时, 若步长为1,则按照步长1对序列号当前值499进行自增,以生产所述新的序列号500,该序列号500<序列号最大值。
[0053] 可见,该实施例中,提供了一种具体根据所述序列号当前值、步长和序列号最大值生成新的序列号,保证分布式序列号产生的具体方式,保证方案的实施。
[0054] 结合上述实施例,在一实施例中,所述序列号配置信息还包括所述虚拟机的IP地址、端口号和填充方式,所述按照所述步长,对所述序列号当前值进行自增,包括:
[0055] S301:按照所述虚拟机的IP地址和端口号生成基础序列号信息;
[0056] S302:按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值;
[0057] S303:将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号。
[0058] 在一实施例中,所述序列号配置信息还包括所述虚拟机的业务名称,所述按照所述虚拟机的IP地址和端口号生成基础序列号信息,包括:对所述虚拟机的IP地址、业务名称和端口号进行拼接,以生成基础序列号信息。
[0059] 可以理解的是,填充方式可以包括左边填充或右边填充,以及填充字符,示例性的,假设填充字符数字0且5位,第一个序列号是1,采用左边填充方式,则需要填充成00001,也可以采用右边填充,左边填充和右边填充,填充字符都可以编号或者是其他字符,具体不做限定。
[0060] 每台机器具有对应的IP地址和多个端口号,虚拟机的端口号是该虚拟机暴露的端口号,而一台机器上面的端口号不能重复占用,因此,虚拟机的IP地址和端口的结合具有唯一性,该实施例中,在按照所述步长,对所述序列号当前值进行自增的时候,将序列号分为两部分,一部分是IP地址和端口号,另一部分是序号自增数值,因此,在虚拟机收到序列号生成请求时,将按照所述虚拟机的IP地址和端口号生成基础序列号信息。
[0061] 比如,假设一台机器(IP:10.12.13.11)上面有两个虚拟机jvm,这两个虚拟机jvm的应用名称都相同,设为devops,端口分别是8080和8081,那么这两个虚拟机jvm的唯一标识就是10.12.13.11‑devops‑8080,以及10.12.13.11‑devops‑8081,也即得到唯一的基础序列号信息。
[0062] 按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值,最后将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号。
[0063] 其中,按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,与单纯的序列号当前值仅包含序列号数值的自增方式相同,该实施例中,是在自增后还结合填充方式进行了填充。比如,以虚拟机jvm1为例,那么虚拟机jvm1启动的时候内存里面最小就是1,最大就是5000,该实施例中,假如虚拟机jvm1的序列号当前值为00000499,该序列号00000499会被虚拟机jvm1中的序列号记录器记录下来,该虚拟机jvm1启动的时候内存号段还有500‑5000,当虚拟机jvm1收到序列号生成请求时,若步长为1,则按照步长1对序列号当前值0000499中的序列号数值进行自增和填充,以生产序号自增数值00000500。
[0064] 最后,将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号,比如,虚拟机jvm1的唯一标识是10.12.13.11‑devops‑8080,序号自增数值00000500,最后新的序列号则为10.12.13.11‑devops‑8080‑00000500,下次该虚拟机jvm1自增产生的序列号则为10.12.13.11‑devops‑8080‑00000501、10.12.13.11‑devops‑8080‑00000502、、、10.12.13.11‑devops‑8080‑000005000,以此类推。
[0065] 可见,该实施例中,与传统的方案不同的是,本申请实施例中的生成的序列号中,利用机器的端口不能重复占用的特点,结合机器的IP地址能体现新的序列号的唯一性,在充分保证序列号的唯一性的同时,还添加了业务名称,能够让产生的序列号具有可观性和便于管理。
[0066] 需要说明的是,在一实施例中,序列号配置信息可通过序列号管理列表进行管理,如下表1所示:
[0067]字段 描述
sequence_key 序列号编码
sequence_name 序列号名称
cache_size 缓存大小
step_size 步长
sequence_max 序列号最大值
sequence_min 序列号最小值
sequence_current 序列号当前值
full_type 是否填充
full_char 填充字符
sequence_length 序号长度
[0068] 表1
[0069] 其中,序列号名称指的是最后生成的序列号。
[0070] 在一实施例中,所述虚拟机至少包括两个,不同所述虚拟机的所述序列号申请号段的范围不相同,并且所述不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。
[0071] 比如,假设机器有两个虚拟机jvm,分别是虚拟机jvm1和虚拟机jvm2,虚拟机的缓存大小为5000,那么虚拟机jvm1启动的时候内存里面最小就是1,最大就是5000,jvm2启动的时候最小就是5001,最大就是10000,也即,不同所述虚拟机的所述序列号申请号段的范围不相同,并且不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。该实施例中,各个虚拟机通过顺序号段的方式,将分布式架构中不同的分布式序列号区别开,有利于单应用边界内保持全局唯一性和便于分布式序列号的全局管理。
[0072] 需要说明的是,在一实施例中,虚拟机jvm中还包括序列号注册记录表,如下表2所示:
[0073] 字段 描述sequence_key 序列号编码
step_size 步长
sequence_current 序列号当前值
sequence_max 序列号最大值
sequence_status 序列号状态1:标识启动,0:标识待启动
service_name 也而无名称,标识唯一的jvm
[0074] 表2
[0075] 其中,该实施例中,通过虚拟机中的序列号管理器维护该序列号注册记录表,用于记录每个序列号配置,在每个虚拟机jvm内的序列号使用情况。比如,序列号状态1:标识启动,0:标识待启用,服务名称,标识唯一的虚拟机jvm、序列号最大值、序列号当前值等序列号使用情况信息。
[0076] 该实施例中,在生成序列号的过程中,会不断记录序列号的使用情况,便于对序列号的使用情况进行记录以及对序列号自增过程进行监控,防止序列号生成过程存在问题。
[0077] 在一实施例中,步骤S30中,也即所述根据所述序列号当前值、步长和序列号最大值生成新的序列号之后,所述方法还包括如下步骤:
[0078] S40:当判断所述虚拟机能使用的序列号申请号段使用完时,检测所有的所述虚拟机中已有的序列号申请号段中的最大值;
[0079] S50:根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,作为所述虚拟机能使用的序列号申请号段。
[0080] 在一实施例中,步骤S50中,也即所述根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,包括:
[0081] S51:在所述已有的序列号申请号段中的最大值加预设值,得到号段初始值;
[0082] S52:将所述号段初始值加上所述虚拟机的缓存大小,得到号段终止值;
[0083] S53:将所述号段初始值与所述号段终止值之间的号段范围,生成为所述新的序列号申请号段。
[0084] 该实施例中,当判断所述虚拟机能使用的序列号申请号段使用完时,检测所有的所述虚拟机中已有的序列号申请号段中的最大值,再根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,作为所述虚拟机能使用的序列号申请号段。具体而言,会在所述已有的序列号申请号段中的最大值加预设值,作为号段初始值,将所述号段初始值加上所述虚拟机的缓存大小,得到号段终止值,最后将所述号段初始值与所述号段终止值之间的号段范围,生成为所述新的序列号申请号段。后续该虚拟机接收到新的序列号生成请求时,便可按照该新的序列号申请号段不断生成序列号。
[0085] 示例性的,虚拟机jvm1能使用的序列号申请号段是1‑5000,如果检测到1‑5000的所有号段都用完了,则重新去检测所有的虚拟机jvm已经申请到序列号申请号段的最大值,比如所有的虚拟机jvm已经申请到序列号申请号段的最大值为15000,则再加,加缓存大小作为新的号段,A6中已经到了15000,那么重新生成新的序列号申请号段便是15001‑20000,将该号段15001‑20000作为所述虚拟机能使用的序列号申请号段。
[0086] 该实施例中,在虚拟机根据缓存大小已申请的序列号申请号段已使用完时,会再结合缓存大小和所有虚拟机jvm已经申请到序列号申请号段的使用情况,再次结合缓存大小生成新的号段,以便不断生成序列号,保证序列号自增的进行,保证业务的进行。
[0087] 需要说明的是,在本申请实施例中,上述提及的缓存大小、步长等数字,在本申请中仅为示例性说明,并不对本申请实施例造成限定。
[0088] 各个步骤的详细内容,可对应参阅前述实施例中的对应描述,这里不再描述。
[0089] 应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
[0090] 在一实施例中,提供了一种用于数据库的序列号生成装置,所述用于数据库的序列号生成装置包括加载模块101、获取模块102、生成模块103和记录模块104,如图3所示,所述数据库的序列号生成装置包括:
[0091] 加载模块101,用于在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0092] 获取模块102,用于将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0093] 生成模块103,用于当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号;
[0094] 记录模块104,用于将所述新的序列号记录为所述虚拟机新的序列号当前值。
[0095] 在一实施例中,生成模块103具体用于:
[0096] 按照所述步长,对所述序列号当前值进行自增,以生产所述新的序列号,其中,所述新的序列号的序列号数值<所述序列号最大值。
[0097] 在一实施例中,生成模块103具体用于:
[0098] 按照所述虚拟机的IP地址和端口号生成基础序列号信息;
[0099] 按照所述步长,对所述序列号当前值的序列号数值进行自增并按照所述填充方式对自增结果进行填充,得到序号自增数值;
[0100] 将所述基础序列号信息与所述序号自增数值进行组合,以得到所述新的序列号。
[0101] 在一实施例中,生成模块103具体用于:
[0102] 对所述虚拟机的IP地址、业务名称和端口号进行拼接,以生成基础序列号信息。
[0103] 可见,该实施例中,与传统的方案不同的是,本申请实施例中的生成的序列号中,利用机器的端口不能重复占用的特点,结合机器的IP地址能体现新的序列号的唯一性,在充分保证序列号的唯一性的同时,还添加了业务名称,能够让产生的序列号具有可观性和便于管理。
[0104] 在一实施例中,所述虚拟机至少包括两个,不同所述虚拟机的所述序列号申请号段的范围不相同,并且所述不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。
[0105] 比如,假设机器有两个虚拟机jvm,分别是虚拟机jvm1和虚拟机jvm2,虚拟机的缓存大小为5000,那么虚拟机jvm1启动的时候内存里面最小就是1,最大就是5000,jvm2启动的时候最小就是5001,最大就是10000,也即,不同所述虚拟机的所述序列号申请号段的范围不相同,并且不同所述虚拟机的所述序列号申请号段之间按照对应的缓存大小顺序排序。该实施例中,各个虚拟机通过顺序号段的方式,将分布式架构中不同的分布式序列号区别开,有利于单应用边界内保持全局唯一性和便于分布式序列号的全局管理。
[0106] 在一实施例中,所述根据所述序列号当前值、步长和序列号最大值生成新的序列号之后,所述生成模块103还用于:
[0107] 当判断所述虚拟机能使用的序列号申请号段使用完时,检测所有的所述虚拟机中已有的序列号申请号段中的最大值;
[0108] 根据所述虚拟机的缓存大小和所述已有的序列号申请号段中的最大值,重新生成新的序列号申请号段,作为所述虚拟机能使用的序列号申请号段。
[0109] 在一实施例中,所述生成模块103还用于:
[0110] 在所述已有的序列号申请号段中的最大值加预设值,得到号段初始值;
[0111] 将所述号段初始值加上所述虚拟机的缓存大小,得到号段终止值;
[0112] 将所述号段初始值与所述号段终止值之间的号段范围,生成为所述新的序列号申请号段。
[0113] 示例性的,虚拟机jvm1能使用的序列号申请号段是1‑5000,如果检测到1‑5000的所有号段都用完了,则重新去检测所有的虚拟机jvm已经申请到序列号申请号段的最大值,比如所有的虚拟机jvm已经申请到序列号申请号段的最大值为15000,则再加,加缓存大小作为新的号段,A6中已经到了15000,那么重新生成新的序列号申请号段便是15001‑20000,将该号段15001‑20000作为所述虚拟机能使用的序列号申请号段。
[0114] 该实施例中,在虚拟机根据缓存大小已申请的序列号申请号段已使用完时,会再结合缓存大小和所有虚拟机jvm已经申请到序列号申请号段的使用情况,再次结合缓存大小生成新的号段,以便不断生成序列号,保证序列号自增的进行,保证业务的进行。
[0115] 可见,该实施例中,提供了一种用于数据库的,可利用分布式架构中虚拟机的内存的缓存大小实现高效生产数据库序列号,而不用频繁和数据库交互自增的方式,可有效地降低性能开销的情况,效率更高;而且值得说明的是,在该实施例中,由于根据虚拟机的内存的缓存大小生成序列号,在虚拟机jvm异常宕机的时候,也仅是会丢失号段,而不影响序列号的生成和使用。
[0116] 其中,关于所述生成模块103中各模块具体实现细节或步骤,可对应参阅前述方法实施例中的描述,为避免冗余,这里不再重复描述。
[0117] 在一个实施例中,提供了一种计算机设备,该计算机设备运行有至少一个虚拟机jvm,该计算机设备用于实现数据库的序列号生成方法的步骤,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备还包括计算机可读存储介质、存储器。该计算机设备的网络接口用于与外部的数据库,比如Mysql通过网络连接通信。该计算机可读指令被处理器执行时以实现一种数据库的序列号生成方法中的功能或步骤。本实施例所提供的计算机可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
[0118] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现前述一种数据库的序列号生成方法中的步骤或者功能。
[0119] 在一实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现如下步骤:
[0120] 在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0121] 将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0122] 当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述记录为所述虚拟机新的序列号当前值。
[0123] 在一个实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述一种数据库的序列号生成方法中的步骤或者功能。
[0124] 在一个实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:
[0125] 在虚拟机启动时,加载序列号配置信息,所述序列号配置信息包括缓存大小和步长;
[0126] 将所述缓存大小作为所述虚拟机能使用的序列号申请号段的序列号最大值,并获取所述虚拟机的序列号当前值;
[0127] 当所述虚拟机收到序列号生成请求时,根据所述序列号当前值、步长和序列号最大值生成新的序列号,并将所述记录为所述虚拟机新的序列号当前值。
[0128] 一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如前述一种实现前述一种数据库的序列号生成方法中的步骤或者功能。
[0129] 需要说明的是,关于该计算机设备或计算机可读存储介质实现的更多细节,可对应参阅前述实施例,具体这里不重复描述。
[0130] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0131] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0132] 以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。