CN106649566B - 一种序列号生成方法及装置 - Google Patents
一种序列号生成方法及装置 Download PDFInfo
- Publication number
- CN106649566B CN106649566B CN201611001202.3A CN201611001202A CN106649566B CN 106649566 B CN106649566 B CN 106649566B CN 201611001202 A CN201611001202 A CN 201611001202A CN 106649566 B CN106649566 B CN 106649566B
- Authority
- CN
- China
- Prior art keywords
- data source
- sequence number
- numerical value
- target data
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种序列号生成方法及装置。该方法包括:序列号生成器当从与所述序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源;序列号生成器从所述目标数据源中获取数值;序列号生成器根据所获取的数值生成序列号。由于序列号生成器当从所关联第一数据源中获取数值失败时,可以从与该序列号生成器关联的第二数据源中确定出目标数据源,从该目标数据源中获取数值,并根据从目标数据源中获取的数值生成序列号。从而解决了现有技术中,从数据源中获取数值失败时,无法生成序列号的问题。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种序列号生成方法及装置。
背景技术
序列号通常用来作为业务的唯一标识,在业务处理过程中得到了广泛的应用。比如,在生成订单的过程中,通过序列号来唯一标识对应的订单;在记录交易的过程中,通过序列号来唯一标识每一笔交易。
目前通常使用诸如hilo高低位算法、数据库自增主键等方式生成序列号。当通过hilo高低位算法生成序列号时,将该hilo高低位算法作为数据源,从该数据源中获得数值(hilo高低位算法得到的值)之后,通过该数值生成序列号;当通过数据库自增主键等其它方式生成序列号时,也是将数据库自增序列(该自增序列通常可以作为数据库的主键)等作为数据源,并通过从数据源中获取的数值生成序列号。
然而,在实际应用中,从数据源中获取数值时,通常会出现数值获取失败的情况。目前的这种序列号生成方式,当从某个数据源中获取数值失败时,会导致无法生成序列号。
发明内容
本申请实施例提供一种序列号生成方法及装置,用于解决现有技术中当从某个数据源中获取数值失败时,导致无法生成序列号的问题。
本申请实施里提供了一种序列号生成方法,该方法包括:
序列号生成器当从与所述序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源;
序列号生成器从所述目标数据源中获取数值;
序列号生成器根据所获取的数值生成序列号。
优选地,根据所获取的数值生成序列号,具体包括:
获取序列号定义表的数据源标识字段的第一属性值;
根据所获取的数值以及所述第一属性值生成序列号。
优选地,根据所获取的数值以及所述第一属性值生成序列号,具体包括:
将所述数值以及所述第一属性值,根据所述序列号定义表的序列号格式化字段的第二属性值的格式进行格式化处理;
根据格式化处理的结果生成序列号。
优选地,从所述目标数据源中获取数值,具体为:
根据序列号定义表的序列号当前值字段的第三属性值从所述目标数据源中获取数值,所述第三属性值与上一次所生成的序列号相对应。
优选地,根据所获取的数值生成序列号,具体包括:
将所获取的所述数值与获取所述数值时的时间点相结合生成序列号。
优选地,从与所述序列号生成器关联的第二数据源中确定出目标数据源,具体包括:
根据预设的数据源优先级顺序,从与所述序列号生成器关联的第二数据源中确定出目标数据源;或,根据用户的输入信息,从与所述序列号生成器关联的第二数据源中确定出目标数据源。
优选地,从所述目标数据源中获取数值,具体包括:
获取所述目标数据源对应的锁对象或接口函数;
根据所获取的锁对象或接口函数从所述目标数据源中获取数值。
优选地,通过如下方式确定从第一数据源中获取数值失败:
当从所述第一数据源中获取数据的时间大于预设时间阈值时,确定从所述第一数据源中获取数值失败。
优选地,当从与所述序列号生成器关联的第一数据源中获取数值成功时,根据所获取的所述数值生成序列号。
本申请实施例还提供了一种序列号生成装置,所述装置用于序列号生成器,所述装置包括:确定单元、获取单元以及生成单元,其中:
所述确定单元,当从与所述序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源;
所述获取单元,从所述目标数据源中获取数值;
所述生成单元,根据所获取的数值生成序列号。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
采用很申请实施例所提供的序列号生成方法,由于序列号生成器当从所关联第一数据源中获取数值失败时,可以从与该序列号生成器关联的第二数据源中确定出目标数据源,从该目标数据源中获取数值,并根据从目标数据源中获取的数值生成序列号。从而解决了现有技术中,从数据源中获取数值失败时,无法生成序列号的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例1提供的一种序列号生成方法的具体实现流程示意图;
图2为本申请实施例1提供的一种序列号生成方法,在实际应用中各个数据源通过序列号生成器进行关联的示意图;
图3为本申请实施例1提供的一种序列号生成方法,在实际应用中生成序列号的流程图;
图4为本申请实施例2提供的一种序列号生成装置的具体结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
实施例1提供了一种序列号生成方法,用于解决现有技术中的问题。该方法用于序列号生成器,该序列号生成器能够用于生成序列号。其中,该序列号生成器关联多个数据源,各数据源中包括第一数据源以及第二数据源。需要另外说明的是,该第一数据源可以是与该序列号生成器关联的多个数据源中的任意一个数据源,也可以是与该序列号生成器关联的多个数据源中特定的某一个数据源;第二数据源可以是与该序列号生成器关联的多个数据源中,第一数据源之外的任意一个数据源,也可以是与该序列号生成器关联的多个数据源中,特定的某个数据源,这里并不对第一数据源与第二数据源之间的关系进行限定。
比如说,在实际应用中,该第一数据源为主数据源,第二数据源备用数据源;或者,第一数据源为与该序列号生成器关联的多个数据源中,数据源优先级顺序最高的数据源,第一数据源之外的数据源为第二数据源;或者,第一数据源为与该序列号生成器关联的多个数据源中,使用频率最高的数据源,第一数据源之外的数据源为第二数据源;或者,第一数据源为与该序列号生成器关联的多个数据源中,任意的一个数据源,第一数据源之外的数据源为第二数据源。
通常与序列号生成器关联的多个数据源,可以是如下数据源中任意的至少两个数据源;数据库Sequence、Redis、数据库预定义元数据、hilo高低位算法、数据库自增序列等。
例如,多个数据源分别为数据库Sequence、Redis、数据库预定义元数据,其中,第一数据源为Redis,第二数据源为数据库Sequence和数据库预定义元数据。
本申请实施例提供的序列号生成方法的具体流程示意图如图1所示,包括下述步骤:
步骤S11:序列号生成器从第一数据源中获取数值,当从第一数据源中获取数值失败时,执行步骤S12至步骤S14,当从第一数据源中获取数值成功,时执行步骤S15。
在实际应用中,从第一数据源中获取数值的方式通常可以有多种,这里可以列举几种常用的方式。
方式一:可以先获取第一数据源对应的锁对象,再根据该锁对象来获取第一数据源中的数值。
这种方式只有在获取锁对象之后,才能根据该锁对象获取第一数据源中的数值,如果获取锁对象失败,则不能实现从第一数据源中获取数值。因此可以通过这种方式来保持数据源的一致性,增加安全性。
方式二:可以先获取第一数据源对应的接口函数,然后通过该接口函数从第一数据源中获取数值。
例如,当该第一数据源为数据库预定义元数据时,可以通过接口函数nextKey从该第一数据源中获取数值。
通常导致从第一数据源中获取数据失败的原因有多种,比如说,第一数据源对应的锁对象被其它程序长时间占用(死锁的情况)而导致失败,或者说,由于请求从第一数据源中获取数值的业务请求的数量过多(高并发的情况),导致业务请求的队列过长,使得长时间不能从第一数据源中获取数值,而导致失败。
因此,确定从第一数据源中获取数值是否失败时,通常可以预先设置一个时间阈值,当从第一数据源中获取数据的时间大于该预设时间阈值时,可以确定从第一数据源中获取数值失败。
比如,该预设时间阈值为2分钟(也可以根据需要设置为其它时间),当从第一数据源中获取数据的时间大于2分钟时,可以确定从第一数据源中获取数值失败。这样,当出现死锁或者业务请求的队列过长时,可以通过获取数值的时间与预设时间阈值之间对比的结果,方便的确定从第一数据源中获取数值是否失败。
步骤S12:序列号生成器从第二数据源中确定出目标数据源。
当与序列号生成器关联的第二数据源有多个时,从各个第二数据源中确定出目标数据源的方式可以有多种,这里可以列举几种常用的方式:
方式一:根据预设的数据源优先级顺序从各所述第二数据源中确定出目标数据源。
数据源优先级顺序规定了这些第二数据源的各自优先级。根据预设的数据源优先级顺序从各第二数据源中确定出目标数据源,通常可以是将数据源优先级顺序最高的第二数据源确定为目标数据源。
例如,第二数据源分别为:数据库Sequence、Redis、数据库预定义元数据;数据源优先级顺序依次为Redis、数据库Sequence、数据库预定义元数据,则可以将Redis确定为目标数据源。
另外,数据源优先级顺序可以预先进行设定和修改,这种根据预设的数据源优先级顺序从各第二数据源中确定出目标数据源,在从第一数据源中获取数值失败后,能够自动地从各第二数据源中确定出目标数据源,因此减少了人工操作。
方式二:根据用户的输入信息从各所述第二数据源中确定出目标数据源。
当从第一数据源中获取数值失败之后,用户也可以从各个第二数据源中,选择其中某一个作为目标数据源。因此,可以在接收到用户的输入信息之后,根据该输入信息从各个第二数据源中确定出目标数据源。
在实际应用中,用户根据不同的应用场景可以选择不同的第二数据源作为目标数据源。通常不同的数据源具有不同的特点,比如,Redis响应速度较快,数据库自增序列较为稳定等,因此用户可以根据具体的应用场景(比如说,高并发的场景需要响应速度快的数据源,稳定性要求较高的场景需要较为稳定的数据源)来从不同的第二数据源中选择出目标数据源。
当然,还可以通过其他方式从各第二数据源中确定出目标数据源,也可以将方式一与方式二相结合来确定目标数据源,当接收到用户的输入信息时,根据该输入信息从各第二数据源中确定出目标数据源,如果没有接收到用户的输入信息,根据预设的数据源优先级顺序从各第二数据源中确定出目标数据源等。
此外,当与序列号生成器相关联的第二数据源只有一个时,在从第一数据源中获取数值失败之后,可以直接将该第二数据源确定为目标数据源。
步骤S13:序列号生成器从所述目标数据源中获取数值。
在这里,从目标数据源中获取数值的方法,可以与步骤S11中从第一数据源中获取数值的方法相同。
比如,获取目标数据源对应的锁对象,然后根据所获取的锁对象从目标数据源中获取数值;或获取目标数据源对应的接口函数;然后根据所获取的接口函数从目标数据源中获取数值。
当然,在实际应用中从目标数据源中获取数值,也可以采用与步骤S11从第一数据源中获取数值不同的方法。
步骤S14:序列号生成器根据从目标数据源中所获取的数值生成序列号。
在获取目标数据源中的数值之后,可以根据该数值生成序列号。在实际应用中,通常会出现从不同数据源中获取的数值相同的情况,为了使得该序列号具有唯一性(每一次生成序列号的均不相同),在根据该数值生成序列号时,可以将该数值与获取数值时的时间点相结合,来生成序列号。
比如,获取该数值的时间点为2016年9月12号上午10点20分23秒,该数值为175,则可以将20160912102023175作为所生成的序列号。由于获取该数值的时间点具有唯一性,因此能够使得该序列号具有唯一性。
当然,将该数值与获取数值时的时间点相结合时,可以有多种结合方式,这里就不再一一列举。
此外,将该数值与获取数值时的时间点相结合生成序列号时,可以先计算该数值与该时间点结合后的字符串的信息摘要,然后将该信息摘要作为序列号。
在实际应用中,通常可以通过诸如MD5(Message Digest Algorithm,消息摘要算法第五版)等散列算法来计算该字符串的信息摘要。通过计算该字符串的信息摘要,并将该信息摘要作为序列号,可以实现对该数值的加密,在一些安全性要求较高的场景下较为适用。
当然,为了使得所生成的序列号具有唯一性,在根据从目标数据源中所获取的数值生成序列号时,还可以将该数值结合序列号定义表的数据源标识字段中的第一属性值,根据该数值以及该第一属性值来生成序列号。
该序列号定义表包括数据源标识字段,该数据源标识字段中的第一属性值与所获取到的该数值的数据源之间具有一一对应关系,也就是说不同的第一属性值对应不同的数据源。
比如说,第一属性值为A,对应的数据源为Redis;第一属性值为B,对应的数据源为数据库Sequence;第一属性值为C,对应的数据源为数据库预定义元数据等。当然,第一属性值与数据源的对应关系通常可以预先进行设定。
因此,步骤S14根据从目标数据源中所获取的数值生成序列号,还可以通过步骤S141~步骤S142的方式来实现。
步骤S141:获取序列号定义表的数据源标识字段的第一属性值;
步骤S142:根据所获取的目标数据源中的数值以及该第一属性值生成序列号。
当然,根据所获取的目标数据源中的数值以及第一属性值生成序列号,通常可以将该数值与第一属性值相结合,并作为所生成的序列号。
比如,目标数据源为Redis,所对应的第一属性值为A,从目标数据源中获取的数值为105,可以将A105作为序列号(结合方式可以有多种,比如说,也可以将105A作为序列号)。此时,该序列号中包括第一属性值为以及从目标数据源中获取的数值,因此可以使得序列号具有唯一性。
此外,在步骤S142中,根据所获取的目标数据源中的数值以及第一属性值生成序列号时,由于所获取数值的位数等可能不同,通常会导致所生成的序列号不规整,不便于统一管理。因此在步骤S142中,根据所获取的目标数据源中的数值以及第一属性值生成序列号,通常可以是,将该数值以及该第一属性值,根据序列号定义表的序列号格式化字段的第二属性值的格式进行格式化处理,然后根据格式化处理的结果生成序列号。
此时,该序列号定义表包括数据源标识字段以及序列号格式化字段。该序列号格式化字段中的第二属性值的格式,通常能够反应所需要生成的序列号的格式,因此能够根据该第二属性值的格式来对该数值和第一属性值进行格式化处理,并根据格式化处理的结果生成序列号。
表1
数据源标识 | 序列号格式化 |
A | A00143 |
如表1所示为实际应用中的一种序列号定义表,该序列号定义表中的数据源标识字段的第一属性值为A,表示获取数值的目标数据源为Redis,序列号格式化字段的第二属性值为A00143,表示所生成的序列号由数字和字母共六位组成,第一位为第一属性值(对应于获取数值的目标数据源),143为从目标数据源获取的数值,A和143之外的位数为0。此时,如果从Redis获取的数值为25,则,所生成的序列号为A00025。
当然,序列号格式化字段中的第二属性值的格式也可以结合时间信息,从而对从目标数据源中获取的数值和第一属性值进行格式化处理。
表2
数据源标识 | 序列号格式化 |
B | 20160814B00148 |
如表2所示为实际应用中的另一种序列号定义表,该序列号定义表中的数据源标识字段的第一属性值为B,表示获取数值的目标数据源为数据库Sequence,序列号格式化字段的第二属性值为20160814B00148,表示所生成的序列号由数字和字母十四位组成,20160814为时间信息(日期),A为第一属性值(对应于获取数值的目标数据源),148为从目标数据源获取的数值,20160814、A和143之外的位数为0。此时,如果2016年9月1号,从数据库Sequence获取的数值为96,则,所生成的序列号为20160901B00096。
当然,第二属性值还可以是其它的格式,以便对从目标数据源中获取的数值以及第一属性值进行对应的格式化处理,生成规整且具有唯一性的序列号,更加便于统一管理。
步骤S15:序列号生成器根据从第一数据源中所获取的数值生成序列号。
当从第一数据源中获取数值成功,可以直接根据该数据生成序列号。
根据从第一数据源中获取的数值生成序列号的方式,可以与步骤S14中,根据从目标数据源中获取的数值生成序列号的方式相同。
比如,可以将从第一数据源中获取的数值结合获取该数值的时间点,生成序列号,也可以将该数值和该时间点结合后的字符串的信息摘要作为序列号,也可以获取序列号定义表的数据源标识字段的第一属性值,然后根据从第一数据源中获取的数值以及该第一属性值生成序列号,这里就不再进行赘述。
当然,通过从第一数据源中所获取的数值生成序列号的方式,也可以与步骤S14中,根据从目标数据源中获取的数值生成序列号的方式不同。
采用实施例1提供的该序列号生成方法,序列号生成器当从所关联第一数据源中获取数值失败时,可以从与该序列号生成器关联的第二数据源中确定出目标数据源,从该目标数据源中获取数值,并根据从目标数据源中获取的数值生成序列号。从而解决了现有技术中,从数据源中获取数值失败时,无法生成序列号的问题。
比如说,现有技术中,通常可以将数据库Sequence、Redis或数据库预定义元数据等作为数据源,从数据源中获取数值来生成序列号。但是,这些数据源之间相互独立,当从某个数据源中获取数值失败时,并不能从其他数据源中获取数据,从而导致无法生成序列号;而本申请中,数据库预定义元数据、数据库Sequence和Redis分别与序列号生成器关联,可以将其中数据源优先级最高的数据源作为第一数据源,其它的作为第二数据源,当从第一数据源中获取数值失败时,可以从第二数据源中确定出目标数据源(根据数据源优先级顺序等方式),从而能够从目标数据源中获取数值来生成序列号。
在实际应用中,还可以通过序列号定义表来对序列号生成规则做统一管理。这里的序列号定义表可以包括数据源标识字段、序列号格式化字段以及序列号当前值字段;其中,数据源标识字段和序列号格式化字段与步骤S14中的相同,序列号当前值字段所记录的第三属性值与上一次所生成的序列号相对应。
比如,上一次所生成的序列号为C00154,则,该第三属性值为可以154(也可以为C00154、00154等)。
这样,当序列号生成器从所关联的第一数据源中获取数值失败时,可以从与该序列号生成器关联的第二数据源中确定出目标数据源,然后,根据序列号定义表的序列号当前值字段的第三属性值从目标数据源中获取数值,并根据获取到的数值生成序列号。
当然,由于序列号当前值字段所记录的第三属性值与上一次所生成的序列号相对应,因此根据该第三属性值从目标数据源中获取数值的方式,可以使得所获取的数值具有唯一性(每次获取的数值不同),从而也可以所生成的序列号具有唯一性。
表3
序列号当前值 | 数据源标识 | 序列号格式化 |
35 | A(对应Redis) | A0019 |
在表3中,序列号当前值字段的第三属性值为35,说明上一次生成的序列号为A0035,可以根据该第三属性值为35,从Redis获取数值,所获取的数值可以为第三属性值35加上步长(通常为1),然后通过该数值结合A,根据序列号格式化字段的第二属性值(A0019)的格式进行格式化处理,从而生成序列号A0036。通过在序列号定义表中增加序列号当前值,使得从目标数据源中所获取的数值具有连续性(相差等于步长),使得所生成的序列号更加规整,更加便于统一管理。
此外,在实际应用中,为了提高从目标数据源中获取数值的速度,通常还可以将目标数据源中的数值预先加载到缓存中,然后将该缓存作为资源池,当需要从目标数据源中获取数值时,可以通过从该资源池中获取数值来获取目标数据源中的数值。
当然,在实际应用中,序列号定义表除了数据源标识字段、序列号格式化字段以及序列号当前值字段之外,还可以有其他的字段,如表4所示为实际应用中的另一种序列号定义表。
表4
表4所示的序列号定义表中包括序列号名称字段,用于记录序列号的名称;序列号别名字段,用于记录序列号的别名;序列号描述字段,用于对序列号的用途等进行描述;资源池大小字段,用于记录资源池中预存的数值的数量;序列号当前值字段;序列号格式化字段;数据源标识字段等。
根据表4所示,预先从目标数据源中加载到资源池(缓存)中的数值数量为5个,序列号当前值为22,说明上一次所生成的序列号为A0022,本次需要从目标数据源中获取的数值为23(假设步长为1),若资源池中有数值23,可以从资源池中直接获取该数值23,若资源池中没有数值23(比如,资源池中最大的数值小于23),则可以直接从目标数据源中获取该数值23,当然也可以将数值23等多个数值先加载到资源池,然后从资源池中获取该数值23。
上述是对本申请实施例所提供的序列号生成方法的具体说明,为了便于理解,下面可以结合具体的示例再一次进行说明。在该示例中,各数据源分别为数据库Sequence、Redis和数据库预定义元数据;如图2所示,数据库Sequence、Redis和数据库预定义元数据分别关联序列号生成器,并且三个数据源的优先级顺序依次为数据库预定义元数据、Redis和数据库Sequence。通常可以将优先级顺序最高的数据库预定义元数据作为第一数据源,将Redis和数据库Sequence作为第二数据源;序列号定义表如表5所示,包括序列号当前值字段、资源池大小字段、序列号格式化字段以及数据源标识字段,在数据源标识字段中,如果属性值(第一属性值)为A表示获取到数值的数据源为数据库预定义元数据,如果属性值为B表示获取到数值的数据源为Redis,如果属性值为C表示获取到数值的数据源为数据库Sequence。
表5
序列号当前值 | 资源池大小 | 序列号格式化 | 数据源标识 |
58 | 3 | A0541 | A |
结合图3,该示例的具体步骤如下:
步骤S21:序列号生成器将数据库预定义元数据中的数值59、60和61加载到缓存中;
步骤S22:序列号生成器获取接口函数nextKey,其中nextKey的当前值为序列号定义表中序列号当前值字段的属性值(第三属性值)58。
在实际应用中,如果第一次通过该序列号生成器生成序列号,nextKey的当前值通常为0,此时需要根据该序列号当前值字段的属性值58,来对nextKey的当前值进行更新,使得nextKey的当前值更新为序列号当前值字段的属性值58;如果已经连续多次通过该序列号生成器生成序列号,通常该nextKey的当前值与序列号当前值字段的属性值相同,此时可以不用通过序列号当前值字段的属性值来更新nextKey的当前值。
步骤S23:序列号生成器根据nextKey的当前值58,从缓存中获取数值59,当获取失败时,执行步骤S24~步骤S28,当获取成功时,执行步骤S29;
该59为通过58加1确定,其中1为步长。在实际应用中,步长也可以为诸如2等其它值。
步骤S24:序列号生成器根据数据源优先级顺序从Redis和数据库Sequence中,将Redis确定为目标数据源;
步骤S25:序列号生成器将Redis中的数值59、60和61加载到缓存中;
步骤S26:序列号生成器获取锁对象,然后根据序列号定义表中的序列号当前值字段的属性值58,从缓存中获取数值59;
步骤S27:序列号生成器将该数值59结合序列号定义表中的数据源标识字段的属性值B(与数据源相对应),并根据序列号格式化字段的属性值(第二属性值)的格式进行格式化处理;
步骤S28:序列号生成器根据格式化处理的结果生成的序列号为B0059。
步骤S29:序列号生成器根据所获取的数值59结合序列号定义表中的数据源标识字段的属性值A(与数据源相对应),并根据序列号格式化字段的属性值(第二属性值)的格式进行格式化处理,从而生成的序列号A0059。
当然,对于该示例中所得到的序列号(包括B0059或者A0059),可以与获取对应的数值的时间相结合,或者是计算信息摘要,从而得到新的序列号。
实施例2
基于与实施例1相同的发明构思,本申请实施例2提供了一种序列号生成装置,该装置用于序列号生成器,能够解决现有技术中的问题。其中,该序列号生成器关联多个数据源,各数据源中包括第一数据源以及第二数据源。该第一数据源可以是与该序列号生成器关联的多个数据源中的任意一个数据源,也可以是与该序列号生成器关联的多个数据源中特定的某一个数据源;第二数据源可以是与该序列号生成器关联的多个数据源中,第一数据源之外的任意一个数据源,也可以是与该序列号生成器关联的多个数据源中,特定的某个数据源,这里并不对第一数据源与第二数据源之间的关系进行限定。需要特别说明的是,对于本申请实施例2中的所提到的各个词语或术语的说明,若有不清楚之处,可以参考实施例1。如图4所示,该装置40包括:确定单元401、获取单元402以及生成单元403,其中:
所述确定单元,当从与序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源;
所述获取单元,从所述目标数据源中获取数值;
所述生成单元,根据所获取的数值生成序列号。
采用实施例2提供的该装置40,由于该装置40采用与实施例1相同的发明构思,因此能够解决现有技术中的问题。此外,在实际应用中,该装置40还可以通过与具体的软件或硬件相结合而取得其它的技术效果,比如说,在序列号生成器中使用该装置40时,该序列号生成器当从某一个数据源获取数值失败时,能够从关联的其它数据源中获取数值,从而生成序列号,这样该序列号生成器能够适应于序列号需求量加大的场景(在实际应用中,在序列号需求量较大时,通常会由于死锁等原因导致数值获取失败),能够提高该序列号生成器的商业价值。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (6)
1.一种序列号生成方法,其特征在于,所述方法包括:
序列号生成器当从与所述序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源,具体包括:当接收到用户的输入信息时,根据该输入信息从各第二数据源中确定出目标数据源,如果没有接收到用户的输入信息,根据预设的数据源优先级顺序从各第二数据源中确定出目标数据源;
序列号生成器从所述目标数据源中获取数值,具体包括:获取所述目标数据源对应的锁对象或接口函数;根据所获取的锁对象或接口函数从所述目标数据源中获取数值;
序列号生成器根据所获取的数值生成序列号,具体包括:
获取序列号定义表的数据源标识字段的第一属性值,该第一属性与所获取到的该数值的数据源之间具有一一对应关系;
将所述数值以及所述第一属性值,根据所述序列号定义表的序列号格式化字段的第二属性值的格式进行格式化处理;
根据格式化处理的结果生成序列号。
2.如权利要求1所述方法,其特征在于,从所述目标数据源中获取数值,具体为:
根据序列号定义表的序列号当前值字段的第三属性值从所述目标数据源中获取数值,所述第三属性值与上一次所生成的序列号相对应。
3.如权利要求1所述方法,其特征在于,根据所获取的数值生成序列号,具体包括:
将所获取的所述数值与获取所述数值时的时间点相结合生成序列号。
4.如权利要求1所述方法,其特征在于,通过如下方式确定从第一数据源中获取数值失败:
当从所述第一数据源中获取数据的时间大于预设时间阈值时,确定从所述第一数据源中获取数值失败。
5.如权利要求1所述方法,其特征在于,当从与所述序列号生成器关联的第一数据源中获取数值成功时,根据所获取的所述数值生成序列号。
6.一种序列号生成装置,其特征在于,所述装置用于序列号生成器,所述装置包括:确定单元、获取单元以及生成单元,其中:
所述确定单元,当从与所述序列号生成器关联的第一数据源中获取数值失败时,从与所述序列号生成器关联的第二数据源中确定出目标数据源,具体用于:当接收到用户的输入信息时,根据该输入信息从各第二数据源中确定出目标数据源,如果没有接收到用户的输入信息,根据预设的数据源优先级顺序从各第二数据源中确定出目标数据源;
所述获取单元,从所述目标数据源中获取数值,具体用于:获取所述目标数据源对应的锁对象或接口函数;根据所获取的锁对象或接口函数从所述目标数据源中获取数值;
所述生成单元,根据所获取的数值生成序列号,具体用于:
获取序列号定义表的数据源标识字段的第一属性值,该第一属性与所获取到的该数值的数据源之间具有一一对应关系;
将所述数值以及所述第一属性值,根据所述序列号定义表的序列号格式化字段的第二属性值的格式进行格式化处理;
根据格式化处理的结果生成序列号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611001202.3A CN106649566B (zh) | 2016-11-14 | 2016-11-14 | 一种序列号生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611001202.3A CN106649566B (zh) | 2016-11-14 | 2016-11-14 | 一种序列号生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106649566A CN106649566A (zh) | 2017-05-10 |
CN106649566B true CN106649566B (zh) | 2019-10-15 |
Family
ID=58806509
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611001202.3A Active CN106649566B (zh) | 2016-11-14 | 2016-11-14 | 一种序列号生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106649566B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108664521B (zh) | 2017-04-01 | 2020-09-01 | 北京京东尚科信息技术有限公司 | 一种提供序列号的方法、装置、电子设备和可读存储介质 |
CN108363708A (zh) * | 2017-06-08 | 2018-08-03 | 国云科技股份有限公司 | 一种业务订单号生成方法 |
CN115292314B (zh) * | 2022-07-28 | 2023-11-24 | 上海数禾信息科技有限公司 | 序列号生成方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866601A (zh) * | 2015-06-01 | 2015-08-26 | 走遍世界(北京)信息技术有限公司 | 序列号生成方法及装置 |
CN104951519A (zh) * | 2015-06-04 | 2015-09-30 | 无锡天脉聚源传媒科技有限公司 | 一种生成序列号的方法及装置 |
CN105353976A (zh) * | 2015-10-21 | 2016-02-24 | 百度在线网络技术(北京)有限公司 | 一种获取缓存数据的方法和装置 |
-
2016
- 2016-11-14 CN CN201611001202.3A patent/CN106649566B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866601A (zh) * | 2015-06-01 | 2015-08-26 | 走遍世界(北京)信息技术有限公司 | 序列号生成方法及装置 |
CN104951519A (zh) * | 2015-06-04 | 2015-09-30 | 无锡天脉聚源传媒科技有限公司 | 一种生成序列号的方法及装置 |
CN105353976A (zh) * | 2015-10-21 | 2016-02-24 | 百度在线网络技术(北京)有限公司 | 一种获取缓存数据的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106649566A (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109034809B (zh) | 区块链的生成方法、装置、区块链节点及存储介质 | |
CN110188096B (zh) | 一种数据记录的索引创建方法、装置及设备 | |
EP3561674B1 (en) | Method and apparatus for verifying block data in a blockchain | |
US11100284B2 (en) | Blockchain-based text similarity detection method, apparatus and electronic device | |
KR102099544B1 (ko) | 스트리밍 데이터의 분배 처리 방법 및 디바이스 | |
CN108171601B (zh) | 区块链溯源追踪方法、装置和系统 | |
CN110162662A (zh) | 一种块链式账本中数据记录的验证方法、装置及设备 | |
CN106649566B (zh) | 一种序列号生成方法及装置 | |
CN110162526A (zh) | 一种块链式账本中数据记录的查询方法、装置及设备 | |
CN110349019B (zh) | 一种块链式账本中的验证方法、装置及设备 | |
CN112487083B (zh) | 一种数据校验方法和设备 | |
CN104714957B (zh) | 一种表结构的变更方法及装置 | |
CN108399175B (zh) | 一种数据存储、查询方法及其装置 | |
US10691640B1 (en) | Storing an asset update record | |
CN110879687B (zh) | 一种基于磁盘存储的数据读取方法、装置及设备 | |
CN110008743A (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN110968554A (zh) | 一种基于文件链分块的区块链存储方法、存储系统及存储介质 | |
CN106844288A (zh) | 一种随机字符串生成方法及装置 | |
US9336334B2 (en) | Key-value pairs data processing apparatus and method | |
CN109829076B (zh) | 一种生成区块链的方法及设备 | |
CN107515807B (zh) | 一种存储监控数据的方法及装置 | |
CN105512564B (zh) | 一种数据防篡改验证方法和装置 | |
CN110059088A (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN111046267A (zh) | 一种基于区块链处理网络谣言的方法、设备及介质 | |
CN116910820A (zh) | 数据报表处理方法、装置、计算机设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |