CN116975069A - 一种标识的生成方法和装置 - Google Patents

一种标识的生成方法和装置 Download PDF

Info

Publication number
CN116975069A
CN116975069A CN202210426332.0A CN202210426332A CN116975069A CN 116975069 A CN116975069 A CN 116975069A CN 202210426332 A CN202210426332 A CN 202210426332A CN 116975069 A CN116975069 A CN 116975069A
Authority
CN
China
Prior art keywords
generating
sequence number
identification
generation
current
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.)
Pending
Application number
CN202210426332.0A
Other languages
English (en)
Inventor
李建胜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Tuoxian Technology Co Ltd
Original Assignee
Beijing Jingdong Tuoxian Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Tuoxian Technology Co Ltd filed Critical Beijing Jingdong Tuoxian Technology Co Ltd
Priority to CN202210426332.0A priority Critical patent/CN116975069A/zh
Publication of CN116975069A publication Critical patent/CN116975069A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2322Optimistic concurrency control using timestamps
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种标识的生成方法和装置,涉及大数据技术领域。该方法的具体实施方式包括:向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;接收标识生成请求;其中,所述标识生成请求指示了标识数量;根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号;根据当前时间,生成当前时间戳;响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。该实施方式能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求。

Description

一种标识的生成方法和装置
技术领域
本发明涉及大数据技术领域,尤其涉及一种标识的生成方法和装置。
背景技术
分布式系统通常应用于大数据处理,面对不同的分析目标,需要通过全局唯一标识来获取对应数据以便于分析,比如,用户编号、订单编号、客户编号等。现有的全局唯一标识生成方式主要有UUID(Universally Unique Identifier,即通用唯一识别码,生成具有随机性,是16字节128位长的数字,通常以36字节的字符串表示)、MYSQL(关系型数据库管理系统)的自增主键等。
现有的全局唯一标识生成方法中,UUID的长度过长,占用内存大,其无序性导致查询效率低下且存储时无序插入严重影响数据稳定性;MYSQL的自增主键无法应对高并发压力场景、算法简单使得标识容易泄露,安全性较低,而且扩容或者主从结构下自增主键容易发生冲突,导致迁移成本较高。
发明内容
有鉴于此,本发明实施例提供一种标识的生成方法和装置,能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求。
为实现上述目的,根据本发明实施例的一个方面,提供了一种标识的生成方法,所述方法应用于标识生成服务器,包括:
向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;
接收标识生成请求;其中,所述标识生成请求指示了标识数量;
根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号;
根据当前时间,生成当前时间戳;
响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
可选地,所述标识生成服务器包括多个生成线程;所述向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号,包括:
利用多个生成线程,分别向所述序列号数据库发送所述序列号获取请求,并分别接收所述序列号数据库返回的预设数量的所述预生成的序列号;
所述从所述预生成的序列号中选取与所述标识数量对应的目标序列号,包括:
为所述标识生成请求分配任意一个所述生成线程作为当前生成线程;
确定所述当前生成线程的序列号的数量是否大于等于所述标识数量,如果是,从所述当前生成线程的序列号中选取目标序列号。
可选地,在所述从当前生成线程的序列号中选取目标序列号的过程中,还包括:
确定所述当前生成线程的序列号的使用率;
在所述使用率不小于第一预设比例阈值的情况下,确定除所述当前生成线程以外的其它生成线程的序列号是否为空;
如果是,利用为空的所述其它生成线程向所述序列号数据库发送序列号获取请求。
可选地,在所述当前生成线程的序列号的数量小于所述标识数量的情况下,循环执行以下步骤,直至得到目标序列号:
选取所述当前生成线程的全部序列号;
为所述标识生成请求分配除所述当前生成线程之外的任意一个所述生成线程作为当前生成线程。
可选地,在所述生成当前时间戳之后,还包括:
判断所述当前时间戳是否大于与前一个标识生成请求对应的前一时间戳;
如果否,递增时间戳判断次数;
确定所述时间戳判断次数是否超过预设次数阈值;
在所述时间戳判断次数超过所述预设次数阈值的情况下,生成警报信息。
可选地,所述根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识,包括:
确定所述唯一标识的最高位的值;其中,所述最高位为符号位,所述符号位的值为0或者1;
根据所述最高位符号位的值、所述当前时间戳和所述目标序列号的组合结果,确定所述唯一标识。
可选地,所述唯一标识为64位长整型数据。
根据本发明实施例的再一个方面,提供了一种标识的生成装置,所述装置应用于标识生成服务器,包括:
收发模块,用于向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;
收发模块,还用于接收标识生成请求;其中,所述标识生成请求指示了标识数量;
选取模块,用于从所述预生成的序列号中选取与所述标识数量对应的目标序列号;
生成模块,用于根据当前时间,生成当前时间戳;
响应模块,用于响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
根据本发明实施例的另一个方面,提供了一种标识的生成的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明提供的标识的生成方法。
根据本发明实施例的还一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明提供的标识的生成方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用利用序列号数据库预生成的序列号,根据当前时间戳和序列号的组合结果,生成唯一标识的技术手段,所以克服了现有的全局唯一标识生成方法占用内存大、查询效率低下、无序、数据稳定性差,无法应对高并发压力场景、容易泄露导致安全性较低,数据迁移成本较高,标识重复、生成服务故障的技术问题,进而达到能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求的技术效果。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的标识的生成方法的主要流程的示意图;
图2是根据本发明实施例的目标序列号的确定方法的主要流程的示意图;
图3是根据本发明实施例的生成线程的序列号的更新方法的主要流程的示意图;
图4是根据本发明实施例的唯一标识的示意图;
图5是根据本发明实施例的时间戳的判断方法的主要流程的示意图;
图6(a)是根据本发明实施例的序列号数据库的示意图;
图6(b)是根据本发明另一个实施例的标识的生成方法的示意图一;
图6(c)是根据本发明另一个实施例的标识的生成方法的示意图二;
图7是根据本发明实施例的标识的生成装置的主要模块的示意图;
图8示出了适于应用于本发明实施例的标识的生成方法或标识的生成装置的示例性系统架构图;
图9是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的标识的生成方法的主要流程的示意图,如图1所示,本发明的标识的生成方法包括如下步骤:
随着计算机技术的发展,各个平台生成的数据越来越多,需要保存的数据量也越来越大。在保存数据时,往往需要对订单、物品、用户、消息等进行唯一标识(即,唯一ID)。然而,数据库的自增ID数量有限;UUID由于无序性的特点,不便于查询和保存,还可能泄露隐私数据;MYSQL的自增主键可以反向推测,安全性较差,分库扩展性弱等,皆无法满足高并发场景下唯一标识的生成要求。通过本发明的标识的生成方法,可以生成全局唯一、趋势递增、单调递增、安全性、高可用的唯一标识,满足任意场景的使用需求。
步骤S101,向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号。在本发明实施例中,序列号数据库中保存有预生成的多个序列号,用于随时响应序列号获取请求。序列号采用bit位设计,通过22-bit表示从序列号数据库获取的序列号,相应地,序列号数据库中一毫秒可以生成的序列号为2的22次方即222=419,4304个序列号;进一步地,当获取的序列号数据库的序列号超过419,4304时,序列号可以采用左位移的运算方式进行处理,最低位用0补齐。
进一步地,一毫秒生成的419,4304个序列号呈单调递增趋势。
在本发明实施例中,序列号获取请求可以与标识类型对应,相应地,序列号可以与业务类型相对应。序列号数据库生成的序列号可以按照不同的业务类型进行分表存储,相应地,序列号数据库可以按照标识类型、业务类型等,查询对应的序列号表并分配序列号。
在本发明实施例中,序列号数据库一毫秒生成的419,4304个序列号可以服务于419,4304个唯一标识的生成请求。比如,第1毫秒到第1000毫秒共接收到400,0000个唯一标识的生成请求,第1毫秒生成了419,4304个序列号,则第1毫秒生成的序列号可以满足第1毫秒到第1000毫秒的唯一标识的生成请求对应的序列号要求,序列号数据库在第2毫秒到第1000毫秒无需生成序列号。
进一步地,序列号数据库实时对序列号的剩余比例进行判断,当序列号的剩余比例小于等于库存的警戒比例阈值的情况下,序列号数据库重新生成序列号。比如,警戒比例阈值为10%,相应地,警戒比例阈值对应的序列号数量为419,4304*10%=41,9430;其中,警戒比例阈值可以根据需要进行设置。
在本发明实施例中,本发明的标识的生成方法可以通过标识生成服务器执行。序列号数据库根据预设的序列步长响应序列号获取请求,向标识生成服务器返回与序列步长指示的预设数量对应的预生成的序列号。比如,序列步长为1000,序列号数据库接收到标识生成服务器的序列号获取请求后,向标识生成服务器返回1000个序列号。
进一步地,标识生成服务器包括多个生成线程,多个生成线程分别向序列号数据库发送序列号获取请求,并分别接收序列号数据库返回的预设数量的预生成的序列号。比如,序列步长为1000,序列号数据库接收到标识生成服务器的多个生成线程的序列号获取请求后,分别向每一个生成线程返回1000个序列号。
更进一步地,多个生成线程可以同步或者异步向序列号数据库发送序列号获取请求,序列号数据库响应序列号获取请求时,可以按照序列号的递增顺序,按序将序列号以序列步长的预设数量向各个生成线程发送;或者,可以根据序列步长,随机抽取序列号向各个生成线程发送。比如,多个生成线程同步或者异步向序列号数据库发送序列号获取请求,序列号数据库根据序列步长,按照1-1000、1001-2000、2001-3000、……的顺序,将序列号向各个生成线程发送;或者,序列号数据库根据序列步长,随机抽取序列号2001-3000、419,3001-419,4000、、21,2001-21,3000、……,将序列号向各个生成线程发送。
进一步地,通过本发明的标识的生成方法,标识生成服务器提前向序列号数据库获取目标序列号并存储至各个生成线程,因此,即使数据库短暂崩溃,也不会影响生成线程生成唯一标识的服务,保证了标识生成服务的稳定性。
步骤S102,接收一个或多个标识生成请求;其中,所述标识生成请求指示了标识数量。
在本发明实施例中,一个标识生成请求可以包括一个或多个唯一标识的生成请求。标识生成请求还指示了标识类型,标识生成请求的标识类型可以与业务类型相对应,比如,业务类型包括订单、销售单,标识生成请求可以是订单的唯一标识生成请求、销售单的唯一标识生成请求等。
步骤S103,根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号。
在本发明实施例中,根据标识生成请求所需要的唯一标识的标识数量,利用各个生成线程存储的序列号,从中选取与标识数量对应的目标序列号以生成唯一标识。
在本发明实施例中,如图2所示,本发明的目标序列号的确定方法包括如下步骤:
步骤S201,为所述标识生成请求分配任意一个所述生成线程作为当前生成线程。
在本发明实施例中,选取任意一个序列号不为空的生成线程作为当前生成线程。
步骤S202,确定所述当前生成线程的序列号的数量是否大于等于所述标识数量,如果是,转至步骤S203;如果否,转至步骤S204。
在本发明实施例中,比如,当前生成线程的序列号的数量为1000个,标识生成请求一为请生成1500个唯一标识,相应地,标识数量为1500个,目标序列号为1500个,标识生成请求一需要1500个预生成的序列号,当前生成线程的序列号的数量1000小于标识数量1500;标识生成请求二为请生成500个唯一标识,相应地,标识数量为500个,目标序列号为500个,标识生成请求二需要500个预生成的序列号,当前生成线程的序列号的数量1000大于标识数量500。
步骤S203,从所述当前生成线程的序列号中选取目标序列号。
在本发明实施例中,在当前生成线程的序列号的数量大于等于标识数量的情况下,当前生成线程的序列号即可满足标识生成请求的需要,也即,可以直接从当前生成线程选取标识数量个序列号作为目标序列号,以生成与标识数量对应的唯一标识。比如,对于标识生成请求二来说,当前生成线程的序列号即可满足标识生成请求的需要,也即,可以直接从当前生成线程选取500个序列号作为目标序列号,以生成500个唯一标识。
步骤S204,选取所述当前生成线程的全部序列号。
在本发明实施例中,在当前生成线程的序列号的数量小于标识数量的情况下,当前生成线程的序列号无法满足标识生成请求的需要,因此,需要从其他的一个或多个生成线程选取序列号以满足标识生成请求的需要。比如,对于标识生成请求一来说,当前生成线程的序列号无法满足标识生成请求的需要,需要从其他的一个或多个生成线程选取500个序列号以满足标识生成请求的需要。
步骤S205,为所述标识生成请求分配除所述当前生成线程之外的任意一个所述生成线程作为当前生成线程,转至步骤S202。
在本发明实施例中,根据多个生成线程储备的预生成的序列号,组成目标序列号。
在本发明实施例中,通过本发明的目标序列号的确定方法,能够从预生成的序列号中选取与标识数量对应的目标序列号,以便后续唯一标识的生成,由于序列号是生成线程提前获取的,因此,即使数据库短暂崩溃,也不会影响唯一标识的生成,保证了标识生成服务的稳定性。
在本发明实施例中,如图3所示,本发明的生成线程的序列号的更新方法包括如下步骤:
步骤S301,确定所述当前生成线程的序列号的使用率。
在本发明实施例中,在从当前生成线程的序列号中选取目标序列号的过程中,还需对当前生成线程的序列号的使用率进行判断,确定所述当前生成线程的序列号的使用率,从而提前利用其它生成线程进行序列号储备,保证标识生成服务器永远存储有预生成的序列号,也即,标识生成服务器永远处于可以提供唯一标识生成服务的状态。
在本发明实施例中,在当前生成线程的序列号的使用率小于预设比例阈值,和/或,当前生成线程以外的其它生成线程的序列号不为空的情况下,持续对当前生成线程的序列号的使用率进行监测。
步骤S302,确定所述当前生成线程的序列号的使用率是否大于等于预设比例阈值,如果是,转至步骤S303;如果否,转至步骤S301。
在本发明实施例中,比如,预设比例阈值为10%。
步骤S303,确定除所述当前生成线程以外的其它生成线程的序列号是否为空,如果是,转至步骤S304;如果否,转至步骤S301。
在本发明实施例中,比如,当前生成线程的序列号的使用率不小于10%(也即,大于等于10%),则对其它生成线程的序列号进行监测,确定其它生成线程的序列号是否为空,从而提前对其它生成线程的序列号进行加载,以备标识生成服务器的生成服务的使用。
步骤S304,利用为空的所述其它生成线程向所述序列号数据库发送序列号获取请求。
在本发明实施例中,通过本发明的生成线程的序列号的更新方法,能够在当前生成线程的使用过程中,对当前生成线程的序列号的使用率进行监测,在使用率超过预设比例阈值的情况下对其它生成线程的序列号进行监测,提前利用其它生成线程进行序列号储备,使得标识生成服务器随时可以生成唯一标识,保证标识生成服务的稳定性。
步骤S104,根据当前时间,生成当前时间戳。
在本发明实施例中,当前时间戳采用bit位设计,通过41-bit表示当前时间戳,41-bit的时间戳可以表示(1L<<41)/(1000L*3600*24*365)=69年的时间。
步骤S105,响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
在本发明实施例中,唯一标识为长整型(即,Long型)数据,占用8个字节,64个bit,采用bit位设计,以“1+41+22”的方式进行组合。其中:
如图4所示,64bit的第1位(或称为最高位)为符号位,用于表示唯一标识的正负,当最高位为0时,表示唯一标识为正数;当最高位为1时,表示唯一标识为负数。符号位默认为0。
64bit的第2位至第42位为时间戳。
64bit的第43位至第64位为序列号,22-bit的序列号可以表示222=419,4304个序列号。
在本发明实施例中,根据最高位符号位的值、当前时间戳和目标序列号的组合结果,确定唯一标识。
在本发明实施例中,如图5所示,本发明的时间戳的判断方法包括如下步骤:
步骤S501,获取当前时间戳。
步骤S502,判断当前时间戳是否大于与前一个标识生成请求对应的前一时间戳,如果是,转至步骤S503;如果否,转至步骤S504。
在本发明实施例中,标识生成服务器根据历史生成数据,判断当前时间戳是否大于前一时间戳,从而确定是否存在时钟回拨(比如,时间倒退几毫秒)等异常情况以便及时处理,防止标识重复现象的发生,保证唯一标识的生成。
步骤S503,利用当前生成线程生成唯一标识以响应标识生成请求。
在本发明实施例中,响应于标识生成请求,在当前时间戳大于前一时间戳的情况下,利用当前生成线程生成与标识生成请求对应的唯一标识。
在本发明实施例中,在当前时间戳不大于前一时间戳的情况
步骤S504,递增时间戳判断次数。
序列号数据库1毫秒419,4304个序列号的生产速度完全可以满足日常的唯一标识的生成需求,时间戳的对比是为了防止瞬时生成需求过量的极特殊/极端情况,在此情况下,如果当前时间戳下419,4304个序列号无法满足唯一标识的生成需求,则会进行等待,该等待通过时间戳判断次数的方式实现,从而利用下一时间戳+序列号的方式继续生成唯一标识,保证标识服务的唯一性和稳定性。
步骤S505,确定时间戳判断次数是否超过预设次数阈值,如果是,转至步骤S506;如果否,转至步骤S502。步骤S506,生成警报信息。在本发明实施例中,时间戳判断次数超过预设次数阈值表示存在时钟服务故障,可以生成警报信息并发送给开发人员,向开发人员报警,使得开发人员尽快解除时钟服务的故障,恢复时钟服务,保证唯一标识的正常生成服务。
在本发明实施例中,通过本发明的唯一标识的生成方法,基于当前时间戳、当前时间戳下的唯一序列号的组合结果,能够生成全局唯一标识,序列号为单调递增生成的序列号,在当前时间的对应下,可以满足高并发场景的唯一标识生成要求,保证标识安全性和唯一性,扩展性强,数据稳定性强。且由于唯一标识的有序性和数据类型限制,可以提高索引/查询效率,降低内存成本。
在本发明实施例中,通过向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;接收标识生成请求;其中,所述标识生成请求指示了标识数量;根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号;根据当前时间,生成当前时间戳;响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识等步骤,能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求。
在本发明实施例中,如图6(a)所示,本发明的序列号数据库包括标识类型biz_type、当前序列号current_id、序列步长step、业务类型ext、更新时间update_time等,在接收到序列号获取请求后,序列号数据库可以根据业务类型与序列号的对应关系,查找序列号并发送给标识生成服务器,比如,更新序列号和查找序列号的脚本如下所示:
Begin
UPDATE table SET current_id=current_id+step WHERE biz_type=xxx;
SELECT biz_type,current_id,step FROM table WHERE biz_type=xxx;
Commit
其中,“FROM table”表示序列号数据库内不同业务类型的序列号可以是分表存储的。
在本发明实施例中,如图6(b)所示,本发明的标识的生成系统包括序列号数据库、标识生成服务器和业务应用产生的标识生成请求。标识生成服务器包括多个生成线程;序列号数据库存储预生成的序列号。
标识生成服务器向序列号数据库发送序列号获取请求,序列号数据库根据序列号获取请求,向标识生成服务器的各个生成线程返回预生成的序列号,比如,多个生成线程分别获得1-1000、1001-2000、2001-3000、……的序列号。
标识生成服务器接收标识生成请求。
标识生成服务器根据标识数量,选取目标序列号。
标识生成服务器的各个生成线程根据当前时间,生成当前时间戳。
在本发明实施例中,如图6(c)所示,本发明的当前生成线程(对应序列号为1001-2000)根据最高位符号位的值、当前时间戳和当前生成线程选取的目标序列号的组合结果,生成唯一标识;其中,指针(比如,id pos)的起始位置对应当前生成线程的第一个序列号。
在选取序列号的过程中,判断当前生成线程的使用率是否达到10%(即100个),如果是,判断其它生成线程(比如,第二生成线程)的序列号是否为空。
如果第二生成线程的序列号为空,利用第二生成线程向序列号数据库发送序列号获取请求,以更新第二生成线程的序列号;如果第二生成线程的序列号不为空(比如,第二生成线程对应序列号为1001-2000),判断当前生成线程的使用率是否达到100%。
如果当前生成线程的使用率达到100%,将指针位置指向第二生成线程的第一个序列号,将第二生成线程作为当前生成线程生成唯一标识,以此类推。
图7是根据本发明实施例的标识的生成装置的主要模块的示意图,如图7所示,本发明的标识的生成装置700包括:
收发模块701,用于向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号。
在本发明实施例中,本发明的标识的生成装置700应用于标识生成服务器,序列号数据库中保存有预生成的多个序列号,所述收发模块701用于向序列号数据库发送序列号获取请求,序列号数据库根据预设的序列步长响应序列号获取请求,所述收发模块701再接收序列号数据库返回的与序列步长指示的预设数量对应的预生成的序列号。
收发模块701,还用于接收标识生成请求;其中,所述标识生成请求指示了标识数量。
在本发明实施例中,收发模块701还用于接收标识生成请求,一个标识生成请求可以包括一个或多个唯一标识的生成请求。
选取模块702,用于从所述预生成的序列号中选取与所述标识数量对应的目标序列号。
在本发明实施例中,根据标识生成请求所需要的唯一标识的标识数量,利用各个生成线程存储的序列号,所述选取模块702从中选取与标识数量对应的目标序列号以生成唯一标识。
生成模块703,用于根据当前时间,生成当前时间戳。
所述生成模块703用于根据当前时间,生成41-bit的当前时间戳。
,用于响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
在本发明实施例中,唯一标识为长整型(即,Long型)数据,占用8个字节,64个bit,采用bit位设计,以“1+41+22”的方式进行组合。其中:
所述响应模块704确定64bit的第1位(或称为最高位)的值,最高位为符号位,用于表示唯一标识的正负。当最高位为0时,表示唯一标识为正数;当最高位为1时,表示唯一标识为负数。符号位默认为0。
64bit的第2位至第42位为时间戳。
64bit的第43位至第64位为序列号。
所述响应模块704确定根据最高位符号位的值、当前时间戳和目标序列号的组合结果,确定唯一标识。
在本发明实施例中,通过收发模块、选取模块、生成模块和响应模块,能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求。
图8示出了适于应用于本发明实施例的标识的生成方法或标识的生成装置的示例性系统架构图,如图8所示,本发明实施例的标识的生成方法或标识的生成装置的示例性系统架构包括:
如图8所示,系统架构800可以包括终端设备801、802、803,网络804和服务器805。网络804用以在终端设备801、802、803和服务器105之间提供通信链路的介质。网络804可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备801、802、803通过网络804与服务器805交互,以接收或发送消息等。终端设备801、802、803上可以安装有各种通讯客户端应用,例如标识类应用、购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备801、802、803可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器805可以是提供各种服务的服务器,例如对用户利用终端设备801、802、803所浏览的标识类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的标识生成请求等数据进行分析等处理,并将处理结果(例如唯一标识)反馈给终端设备801、802、803。
需要说明的是,本发明实施例所提供的标识的生成方法一般由服务器805执行,相应地,标识的生成装置一般设置于服务器805中。
应该理解,图8中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图9是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图,如图9所示,本发明实施例的终端设备或服务器的计算机系统900包括:
中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。在RAM903中,还存储有系统900操作所需的各种程序和数据。CPU901、ROM902以及RAM903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括收发模块、选取模块、生成模块和响应模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,响应模块还可以被描述为“响应于标识生成请求,根据当前时间戳和目标序列号,生成与标识生成请求对应的唯一标识的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;接收标识生成请求;其中,所述标识生成请求指示了标识数量;根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号;根据当前时间,生成当前时间戳;响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
现有的复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识,比如,京东商城、京东金融、京东白条支付等系统中,对数据分库分表后需要唯一ID标识一条数据或消息,数据库的自增ID无法满足需求。现有的唯一ID生成技术多种多样,比如,UUID,MYSQL自增主键,雪花算法等,但现有的唯一ID生成技术无法同时满足高并发场景下唯一ID的生成要求。
UUID生成的唯一ID的字符串太长,通常为16字节128位,字符串无序且太长,占用内存空间大,不易于存储和查询。甚至在一些场景下(比如,MAC地址),生成UUID的算法可能会造成数据泄露。UUID生成的ID不是自增的,目前大多数场景数据库使用MYSQL的innodb引擎(MySQL的默认存储引擎),底层存储结构为B+TREE(树数据结构),由于其无序性,每次插入位置无序,导致数据索引结构变化,可能会引起数据位置频繁变动,严重影响系统性能。
MYSQL的自增主键对数据库压力巨大,无法应对高并发场景(比如,双11生成订单)。自增主键每次自增一,通过两个ID相减可以推测ID数量,从而推断订单数量,安全性差。自增主键的扩展性也不是很好,如果扩容分库分表,主键ID不容易迁移(比如,一张表id是1、2、3、4,扩展成两张分表,分表一为1、3分表二为2、4。接下来生成的5、6主键就会冲突,需要更改主键生成策略,id可能需要重新生成,相比来说迁移成本较大)。
根据本发明实施例的技术方案,适用于各种唯一标识生成场景,同时具备全局唯一性、趋势递增、单调递增、信息安全、高可用的特征,方便快捷。
根据本发明实施例的技术方案,能够降低内存成本,提高索引/查询效率,保证标识安全性和唯一性,扩展性强,数据稳定性强,可以满足高并发场景下唯一标识的生成要求。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种标识的生成方法,其特征在于,所述方法应用于标识生成服务器,包括:
向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;
接收标识生成请求;其中,所述标识生成请求指示了标识数量;
根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号;根据当前时间,生成当前时间戳;
响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
2.根据权利要求1所述的方法,其特征在于,所述标识生成服务器包括多个生成线程;所述向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号,包括:
利用所述多个生成线程,分别向所述序列号数据库发送所述序列号获取请求,并分别接收所述序列号数据库返回的预设数量的所述预生成的序列号;
所述根据所述标识数量,从所述预生成的序列号中选取与所述标识数量对应的目标序列号,包括:
为所述标识生成请求分配任意一个所述生成线程作为当前生成线程;
确定所述当前生成线程的序列号的数量是否大于等于所述标识数量,如果是,从所述当前生成线程的序列号中选取目标序列号。
3.根据权利要求2所述的方法,其特征在于,在所述从当前生成线程的序列号中选取目标序列号的过程中,还包括:
确定所述当前生成线程的序列号的使用率;
在所述使用率不小于第一预设比例阈值的情况下,确定除所述当前生成线程以外的其它生成线程的序列号是否为空;
如果是,利用为空的所述其它生成线程向所述序列号数据库发送序列号获取请求。
4.根据权利要求2所述的方法,其特征在于,在所述当前生成线程的序列号的数量小于所述标识数量的情况下,循环执行以下步骤,直至得到目标序列号:
选取所述当前生成线程的全部序列号;
为所述标识生成请求分配除所述当前生成线程之外的任意一个所述生成线程作为当前生成线程。
5.根据权利要求1所述的方法,其特征在于,在所述生成当前时间戳之后,还包括:
判断所述当前时间戳是否大于与前一个标识生成请求对应的前一时间戳;
如果否,递增时间戳判断次数;
确定所述时间戳判断次数是否超过预设次数阈值;
在所述时间戳判断次数超过所述预设次数阈值的情况下,生成警报信息。
6.根据权利要求1所述的方法,其特征在于,所述根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识,包括:
确定所述唯一标识的最高位的值;其中,所述最高位为符号位,所述符号位的值为0或者1;
根据所述最高位符号位的值、所述当前时间戳和所述目标序列号的组合结果,确定所述唯一标识。
7.根据权利要求1-6中任一所述的方法,其特征在于,所述唯一标识为64位长整型数据。
8.一种标识的生成装置,其特征在于,所述装置应用于标识生成服务器,包括:
收发模块,用于向序列号数据库发送序列号获取请求,并接收所述序列号数据库返回的预生成的序列号;
收发模块,还用于接收标识生成请求;其中,所述标识生成请求指示了标识数量;
选取模块,用于从所述预生成的序列号中选取与所述标识数量对应的目标序列号;
生成模块,用于根据当前时间,生成当前时间戳;
响应模块,用于响应于所述标识生成请求,根据所述当前时间戳和所述目标序列号,生成与所述标识生成请求对应的唯一标识。
9.一种标识的生成的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
CN202210426332.0A 2022-04-22 2022-04-22 一种标识的生成方法和装置 Pending CN116975069A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210426332.0A CN116975069A (zh) 2022-04-22 2022-04-22 一种标识的生成方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210426332.0A CN116975069A (zh) 2022-04-22 2022-04-22 一种标识的生成方法和装置

Publications (1)

Publication Number Publication Date
CN116975069A true CN116975069A (zh) 2023-10-31

Family

ID=88480134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210426332.0A Pending CN116975069A (zh) 2022-04-22 2022-04-22 一种标识的生成方法和装置

Country Status (1)

Country Link
CN (1) CN116975069A (zh)

Similar Documents

Publication Publication Date Title
CN112445626B (zh) 一种基于消息中间件的数据处理方法和装置
CN108846753B (zh) 用于处理数据的方法和装置
CN112948498A (zh) 一种分布式系统全局标识的生成方法和装置
CN111460129B (zh) 标识生成的方法、装置、电子设备和存储介质
CN110321252B (zh) 一种技能服务资源调度的方法和装置
CN111800513A (zh) 用于推送信息的方法、装置、电子设备计算机可读介质
CN113127564B (zh) 一种参数同步方法和装置
CN110909022A (zh) 一种数据查询方法和装置
CN117950850A (zh) 一种数据传输方法、装置、电子设备及计算机可读介质
CN112114856A (zh) 一种热更新方法及装置
CN112948138A (zh) 一种处理消息的方法和装置
CN113220705A (zh) 慢查询识别的方法和装置
CN115168440A (zh) 数据读写方法、分布式存储系统、装置、设备和存储介质
CN116975069A (zh) 一种标识的生成方法和装置
CN116185578A (zh) 计算任务的调度方法和计算任务的执行方法
CN111949648A (zh) 内存缓存数据系统和数据索引方法
CN115629909A (zh) 业务数据处理的方法、装置、电子设备和存储介质
CN113127416B (zh) 数据查询方法和装置
CN114449031A (zh) 信息获取方法、装置、设备和存储介质
US20160127496A1 (en) Method and system of content caching and transmission
CN113760876A (zh) 一种数据过滤方法和装置
CN113076343A (zh) 数据查询方法、装置、设备及存储介质
CN112948430B (zh) 一种日期数据查询方法和装置
CN112711572A (zh) 适用于分库分表的在线扩容方法和装置
CN111459981A (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