CN110597829A - 主键生成方法、装置及设备 - Google Patents
主键生成方法、装置及设备 Download PDFInfo
- Publication number
- CN110597829A CN110597829A CN201911098058.3A CN201911098058A CN110597829A CN 110597829 A CN110597829 A CN 110597829A CN 201911098058 A CN201911098058 A CN 201911098058A CN 110597829 A CN110597829 A CN 110597829A
- Authority
- CN
- China
- Prior art keywords
- queue
- key
- primary key
- primary
- key 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.)
- Granted
Links
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及数据处理技术领域,公开了一种主键生成方法、装置及设备。其中,该方法包括:获取初始最大键值和当前最大键值;根据所述初始最大键值和所述当前最大键值,在第一队列中按照递增顺序生成主键;在所述第一队列的主键生成完毕后,在第二队列中生成主键;接收主键读取指令;根据所述主键读取指令,为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取。通过上述方式,本发明实施例能够在分库分表时保持主键的唯一性。
Description
技术领域
本发明实施例涉及数据处理技术领域,具体涉及一种主键生成方法、装置及设备。
背景技术
为了区分数据表中的数据行,数据表中的记录须具有唯一的主键ID。但是在分布式系统中,通常会对一些数据量大的数据进行分拆,比如,将一张表拆分成多张表,分别存在不同数据库中,这种情况被称为分库分表。经过分库分表后,每张表的唯一主键也须在多张表中保持唯一。
目前的主键生成方法主要通过数据库内自建的主键生成机制,无法在分库分表时保证唯一性。
发明内容
鉴于上述问题,本发明实施例提供了一种主键生成方法、装置及设备,能够在分库分表时保持主键的唯一性。
根据本发明实施例的一个方面,提供了一种主键生成方法,所述方法包括:
获取第一初始最大键值和第一当前最大键值;
根据所述第一初始最大键值和所述第一当前最大键值,在第一队列中按照递增顺序生成主键;
在所述第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值;
根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间;
判断所述第二生成时间是否小于或等于所述第一读取时间;
若所述第二生成时间小于或等于所述第一读取时间,则在第二队列中生成主键,否则提示用户重新输入第二当前最大键值;
接收主键读取指令;
根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取;
当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键;
判断所述第一队列的主键是否被读取完毕;
若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键;
若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。
根据本发明实施例的另一方面,提供了一种主键生成装置,所述装置包括:
第一获取模块,用于获取第一初始最大键值和第一当前最大键值;
第一主键生成模块,用于根据所述第一初始最大键值和所述第一当前最大键值,在第一队列中按照递增顺序生成主键;
第二获取模块,用于在所述第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值;
确定模块,用于根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间;
第一判断模块,用于判断所述第二生成时间是否小于或等于所述第一读取时间;
第二主键生成模块,用于若所述第二生成时间小于或等于所述第一读取时间,则在第二队列中生成主键,否则提示用户重新输入第二当前最大键值;
接收模块,用于接收主键读取指令;
第一队列主键提供模块,用于根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取;
删除模块,用于当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键;
第二判断模块,用于判断所述第一队列的主键是否被读取完毕;
第二队列主键提供模块,用于若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键;
所述第一队列主键提供模块,还用于若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。
根据本发明实施例的又一方面,提供了一种主键生成设备,包括:处理器、存储器和通信接口,所述处理器、所述存储器和所述通信接口相互通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的主键生成方法的操作。
根据本发明实施例的另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上所述的主键生成方法。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并同时在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力,在第一队列中生成部分主键并为应用程序提供第一队列的主键的同时,在第二队列中生成其他主键,且在第一队列的主键读取完毕后,为应用程序提供第二队列的主键,与此同时又继续在第一队列中生成新的主键,整个过程循环往复,第二队列生成主键的过程不会影响第一队列的主键使用,第一队列生成主键的过程也不会影响第二队列的主键使用,使第一队列和第二队列轮流为应用程序提供主键ID,提高了分库分表数据存储的效率,可以获得较大的主键ID并发生成能力,胜任高并发的主键ID请求负载。此外,在第二队列中生成主键前先确定在第二队列中生成主键所需的时间不超过第一队列的主键被消耗的时间,否则提醒用户重新输入一个更大的第二当前最大键值,以保证第一队列的主键被消耗完后,能无缝衔接的提供第二队列的主键,而无需等待。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明其中一实施例提供的主键生成方法的流程图;
图2示出了第一队列和第二队列轮流提供主键的流程图;
图3示出了本发明另又一实施例提供的主键生成方法的流程图;
图4示出了本发明实施例提供的主键生成装置的结构示意图;
图5示出了本发明实施例提供的主键生成设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1示出了本发明其中一实施例提供的主键生成方法的流程图。该方法应用于主键生成设备中。如图1所示,该方法包括以下步骤:
步骤101、获取第一初始最大键值和第一当前最大键值。
其中,第一初始最大键值是指在初始状态时显示的最大键值,第一当前最大键值是指用户根据所需的队列长度新设置的最大键值。例如,第一初始最大键值为0,用户希望将队列长度设置为100,则将第一当前最大键值设置为100;又例如,第一初始最大键值为100,用户希望将队列长度设置为200,则将第一当前最大键值设置为300。若队列长度设置较长时,即第一当前最大键值设置较大时,能够抵御更长的宕机时长。
获取第一初始最大键值和第一当前最大键值,具体可以为:在开始工作时,获取系统当前记录下的第一初始最大键值,在用户输入最大键值后,将用户输入的最大键值作为第一当前最大键值。然后,将初始最大键值更新为此次用户输入的最大键值。下一次获取初始最大键值时,获取的是上一次用户输入的最大键值。例如,在开始工作时,获取系统当前记录下的第一初始最大键值0,在用户输入最大键值100后,将用户输入的最大键值100作为第一当前最大键值,然后,将初始最大键值0更新为此次用户输入的最大键值100。下一次获取初始最大键值时,获取的是上一次用户输入的最大键值100。
步骤102、根据第一初始最大键值和第一当前最大键值,在第一队列中按照递增顺序生成主键。
其中,主键可以为数字,则在步骤102中,具体可以为:确定键值步长,以第一初始最大键值增加一个键值步长为起点,每间隔一个键值步长生成一个主键,直至达到第一当前最大键值。例如,假设键值步长为1,第一初始最大键值为0,第一当前最大键值为100,则在第一队列中依次生成的键值为1、2、3…99、100;又例如,假设键值步长为2,第一初始最大键值为100,第一当前最大键值为200,则在第一队列中依次生成的键值为102、104、106…108、200。若第一当前最大键值不是键值步长的整数倍时,则按照键值步长生成键值,直至第一当前最大键值之前的生成的最大键值。例如,假设键值步长为3,第一初始最大键值为0,第一当前最大键值为100,则在第一队列中依次生成的键值为3、9、12…96、99。
步骤103、在第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值。第二初始最大键值则是上一次用户输入的最大键值,例如100。第二当前最大键值为用户当前输入的最大键值,例如200。
步骤104、根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间。
例如,第二初始最大键值为100,第二当前最大键值为200,每生成一个键值需要1ms,则确定在第二队列中生成主键所需的第二生成时间为(200-100)*1ms=100ms。第一队列的主键总共100个,每个主键被所述应用程序读取所需的时间为2ms,则第一队列的主键被所述应用程序读取完所需的第一读取时间为100*2ms=200ms。
步骤105、判断所述第二生成时间是否小于或等于所述第一读取时间,若所述第二生成时间小于或等于所述第一读取时间,则执行步骤106,否则执行步骤107。
由于200ms>100ms,因此,第二生成时间小于所述第一读取时间。
步骤106、在第二队列中生成主键。
第二生成时间小于所述第一读取时间,说明在第二队列中生成主键所需的时间不超过第一队列的主键被消耗的时间,可以保证第一队列的主键被消耗完后,能无缝衔接的提供第二队列的主键,而无需等待。
步骤107、提示用户重新输入第二当前最大键值。并继续执行步骤105。
具体地,在第二队列中生成主键,进一步包括:根据第二初始最大键值和第二当前最大键值,在第二队列中按照递增顺序生成主键,其中,所述第二初始最大键值为上一次获取的当前最大键值,所述上一次获取的当前最大键值为第一当前最大键值或者后文提及的第三当前最大键值。
其中,第二当前最大键值是指用户根据所需的队列长度在当前最大键值的基础上重新设置的最大键值。例如,假设当前最大键值为100,在第二队列中生成主键之前,用户将当前最大键值设置为200,则200为更新后的最大键值,则根据当前最大键值100和更新后的最大键值200,在第二队列中按照递增顺序生成主键。其中,在第二队列中按照递增顺序生成主键的步骤与在第一队列中按照递增顺序生成主键的步骤相同,此处不再赘述。
步骤108、接收主键读取指令。
其中,主键读取指令为用户或者其他设备在希望为应用程序提供主键时所发送的指令。例如,当进行把一个数据表拆分到若干个数据库时,则触发主键读取指令。
可选地,步骤108可以在步骤101、102、103、104、105、106、107之前执行,也可以在步骤101、102、103、104、105、106、107之后执行。
步骤109、根据主键读取指令,在第二队列中生成主键的同时为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取。
其中,根据主键读取指令,为应用程序提供第一队列的主键,具体可以为:当接收到主机读取指令后,判断第一队列的主键是否生成完毕,若是,则为应用程序提供第一队列的主键,若否,则继续在第一队列生成主键。通过预先生成主键后再供应用程序读取,能够避免边生成边读取造成的后台数据处理量过大。
步骤110、当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键。
队列中的主键是边读边删除的,例如,假设第一队列生成的主键包括1、2、3…99、100,当主键1被读取后,从第一队列中删去主键1,则第一队列中的主键变为2、3…99、100。
步骤111、判断所述第一队列的主键是否被读取完毕。
其中,由于队列中的主键是边读边删除的,则当第一队列中的主键全部被删除后,则确定第一队列的主键被读取完毕。
步骤112、若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键。
当确定第一队列的主键被读取完毕后,在第一队列中生成主键,同时判断第二队列的主键是否生成完毕,若确定第二队列的主键生成完毕,则为应用程序提供第二队列的主键,以使第二队列的主键被应用程序读取。其中,为应用程序提供第二队列的主键的步骤与上文中为应用程序提供第一队列的主键的步骤相同,此处不再赘述。
在为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取后,判断所述第二队列的主键是否被读取完毕;
若所述第二队列的主键被读取完毕,则为所述应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取,并同时执行所述获取第二初始最大键值和第二当前最大键值的步骤,从而在所述第二队列中生成主键。
所述同时在所述第一队列中生成主键,进一步包括:
获取第三初始最大键值和第三当前最大键值,根据所述第三初始最大键值和第三当前最大键值确定在第一队列中生成主键所需的第三生成时间,以及确定所述第二队列的主键被所述应用程序读取完所需的第二读取时间;
判断所述第三生成时间是否小于或等于所述第二读取时间;
若所述第三生成时间小于或等于所述第二读取时间,则在所述第二队列的主键被所述应用程序读取的同时在所述第一队列中生成主键,否则提示用户重新输入第三当前最大键值。
这里判断第三生成时间是否小于或等于所述第二读取时间和步骤104-107类似,若第三生成时间小于所述第二读取时间,说明在第一队列中生成主键所需的时间不超过第二队列的主键被消耗的时间,可以保证第二队列的主键被消耗完后,能无缝衔接的提供第一队列的主键,而无需等待。
若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤109。
如图2所示,当第一队列消费完毕后,消费第二队列,并填充第一队列,当第二队列消费完毕后,消费第一队列,并填充第二队列,如此循环往复,使得第一队列和第二队列轮流提供主键的消费服务。
可选地,为应用程序提供第一队列的主键,进一步包括:为若干不同应用程序提供第一队列的主键。即,多个应用程序可以读取同一个队列中的主键。例如,将表1拆分成表1.1和表1.2并分别储存在数据库1和数据库2中,当第一队列的数据生成完毕后,数据库1和数据库2随机或者依次从第一队列中读取主键。
可选地,为应用程序提供第一队列的主键,进一步还包括:为应用程序提供第一队列的一个或者多个主键。即,应用程序在队列中读取主键时,一次可读取一个或者多个主键。通过使一个应用程序同时读取多个主键,提高了主键的读取效率。
需要说明的是,本实施例并不限定队列的个数,在一些其他实施例中,还可以包括第三队列、第四队列等等,并且在队列中生成主键以及提供队列被读取的方法与第一队列和第二队列均相同。例如,当第一队列被读取时,在第二队列中生成主键,当第二队列被读取时,在第三队列中生成主键。
在一些实施例中,主键可以不为数字,主键可以为英文字母或者其他预设了递增顺序的文字。例如,当主键为英文字母时,预设递增顺序为a、b、c…z、aa、ab、ac…az、ba、bb、bc…bz…za、zb、zc…zz、aaa、aab、aac…aaz、aba、abb、abc…abz…baa、bab、bac…baz…zza、zzb、zzc…zzz…,,则初始最大键值为z,当前最大键值为za,则在第一队列生成的主键为:aa、ab、ac…az、ba、bb、bc…bz…za。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力。
此外,通过判断第一队列的主键是否被读取完毕,若是,则为应用程序提供所述第二队列的主键,以使第二队列的主键被应用程序读取,并在第一队列中生成主键,不仅能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,还能够通过两个队列使得主键的消费和生成同时进行,具有极高的主键并发支持能力,胜任高并发的主键ID请求负载。在第二队列中生成主键前先确定在第二队列中生成主键所需的时间不超过第一队列的主键被消耗的时间,否则提醒用户重新输入一个更大的第二当前最大键值,以保证第一队列的主键被消耗完后,能无缝衔接的提供第二队列的主键,而无需等待。
图3示出了本发明另又一实施例提供的主键生成方法的流程图。该方法应用于主键生成设备中。如图3所示,该方法还包括以下步骤:
步骤301、获取主键类别。
其中,主键类别是指在数据表中的名称的类别,例如用户ID、订单ID等等。
步骤302、确定与主键类别对应的初始最大键值和当前最大键值。
其中,每个主键类别均有其对应的初始最大键值和当前最大键值,例如用户ID对应的初始最大键值为100,当前最大键值为200;订单ID对应的初始最大键值为200,当前最大键值为400。
步骤101、获取第一初始最大键值和第一当前最大键值。
这里以及后文的第一初始最大键值和第一当前最大键值是针对单个主键类别而言,不同的主键类别具有不同的第一初始最大键值和第一当前最大键值。
步骤102、根据第一初始最大键值和第一当前最大键值,在第一队列中按照递增顺序生成主键。
具体的,每个主键类别对应的主键可以存储于同一个第一队列中,也可以存储于不同的第一队列中。
步骤103、在第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值。
步骤104、根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间。
步骤105、判断所述第二生成时间是否小于或等于所述第一读取时间,若所述第二生成时间小于或等于所述第一读取时间,则执行步骤106,否则执行步骤107。
步骤106、在第二队列中生成主键。
具体的,每个主键类别对应的主键可以存储于同一个第二队列中,也可以存储于不同的第二队列中。
步骤107、提示用户重新输入第二当前最大键值。并继续执行步骤105。步骤108、接收主键读取指令。
步骤109、根据主键读取指令,在第二队列中生成主键的同时为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取。
其中,一个主键类别可以对应一个应用程序,也可以对应多个应用程序,多个主键类别也可以对应多个应用程序。例如,假设将用户ID的数据储存到数据库1中,则主键类别为用户ID,主键类别对应的应用程序为数据库1,当第一队列中生成主键完毕后,根据主键读取指令,为数据库1提供第一队列的主键;又例如,假设将用户ID的数据储存到数据库1和数据库2中,则主键类别为用户ID,主键类别对应的应用程序为数据库1和数据库2,当第一队列中生成主键完毕后,根据主键读取指令,为数据库1和数据库2提供第一队列的主键。通过设置不同的主键类别,分别对应不同的初始最大键值,能够同时支持多种不同主键的生成,提高了数据处理速度。
可选地,不同主键类别以及主键类别对应的初始最大键值和当前最大键值可以储存在相同的不同的状态记录表中。当主键类别很多时,同时访问一个状态记录表容易造成拥塞,因此可将不同主键类别分开存放,以避免同时访问造成的拥塞。
步骤110、当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键。
步骤111、判断所述第一队列的主键是否被读取完毕。
步骤112、若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键。
步骤112、若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。其中,步骤101至步骤112与上述实施例中的步骤101至步骤112相同,此处不再赘述。
本发明实施例通过获取主键类别,确定与主键类别对应的初始最大键值和当前最大键值,并当队列中主键生成完毕后,为与主键类别对应的应用程序提供队列的主键,能够同时支持多种不同主键的生成,提高了数据处理速度。
图4示出了本发明实施例提供的主键生成装置的结构示意图。如图4所示,该装置200包括:第一获取模块201、第一主键生成模块202、第二获取模块203、确定模块204、第一判断模块205、第二主键生成模块206、接收模块207、第一队列主键提供模块208、删除模块209、第二判断模块210和第二队列主键提供模块211。
其中,第一获取模块201用于获取第一初始最大键值和第一当前最大键值;
第一主键生成模块202用于根据所述第一初始最大键值和所述第一当前最大键值,在第一队列中按照递增顺序生成主键;
第二获取模块203用于在所述第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值;
确定模块204用于根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间;
第一判断模块205用于判断所述第二生成时间是否小于或等于所述第一读取时间;
第二主键生成模块206用于若所述第二生成时间小于或等于所述第一读取时间,则在第二队列中生成主键,否则提示用户重新输入第二当前最大键值;
接收模块207于接收主键读取指令;
第一队列主键提供模块208用于根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取;
删除模块209用于当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键;
第二判断模块210用于判断所述第一队列的主键是否被读取完毕;
第二队列主键提供模块211用于若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键;
所述第一队列主键提供模块208还用于若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。
在一种可选的方式中,所述第一主键生成模块202还用于:
获取第三初始最大键值和第三当前最大键值,根据所述第三初始最大键值和第三当前最大键值确定在第一队列中生成主键所需的第三生成时间,以及确定所述第二队列的主键被所述应用程序读取完所需的第二读取时间;
判断所述第三生成时间是否小于或等于所述第二读取时间;
若所述第三生成时间小于或等于所述第二读取时间,则在所述第二队列的主键被所述应用程序读取的同时在所述第一队列中生成主键,否则提示用户重新输入第三当前最大键值。
在一种可选的方式中,所述装置200还包括第三判断模块,用于判断所述第二队列的主键是否被读取完毕;
第一队列主键提供模块208还用于若所述第二队列的主键被读取完毕,则为所述应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取,并同时使第二获取模块203执行所述获取第二初始最大键值和第二当前最大键值的步骤,从而使第二主键生成模块206在所述第二队列中生成主键。
在一种可选的方式中,该装置200还包括:主键类别获取模块和最大键值确定模块。主键类别获取模块用于获取主键类别;最大键值确定模块用于确定与所述主键类别对应的初始最大键值和当前最大键值;则第一队列主键提供模块208具体用于:为与所述主键类别对应的所述应用程序提供所述第一队列的主键。
在一种可选的方式中,第一队列主键提供模块208具体用于:为若干不同所述应用程序提供所述第一队列的主键。
在一种可选的方式中,第二主键生成模块206具体用于:根据第二初始最大键值和第二当前最大键值,在第二队列中按照递增顺序生成主键,其中,所述第二初始最大键值为上一次获取的当前最大键值,所述上一次获取的当前最大键值为第一当前最大键值或者第三当前最大键值。
根据第二初始最大键值和第二当前最大键值,在第二队列中按照递增顺序生成主键,其中,所述第二初始最大键值为上一次获取的当前最大键值,所述上一次获取的当前最大键值为第一当前最大键值或者第三当前最大键值。
需要说明的是,本发明实施例提供的主键生成装置是能够执行上述主键生成方法的装置,则上述主键生成方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力。
此外,通过判断第一队列的主键是否被读取完毕,若是,则为应用程序提供所述第二队列的主键,以使第二队列的主键被应用程序读取,并在第一队列中生成主键,不仅能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,还能够通过两个队列使得主键的消费和生成同时进行,具有极高的主键并发支持能力,胜任高并发的主键ID请求负载。在第二队列中生成主键前先确定在第二队列中生成主键所需的时间不超过第一队列的主键被消耗的时间,否则提醒用户重新输入一个更大的第二当前最大键值,以保证第一队列的主键被消耗完后,能无缝衔接的提供第二队列的主键,而无需等待。
本发明实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行上述任意方法实施例中的主键生成方法。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力。
本发明实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任意方法实施例中的主键生成方法。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力。
图5示出了本发明实施例提供的主键生成设备的结构示意图,本发明具体实施例并不对主键生成设备的具体实现做限定。
如图5所示,该主键生成设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述任意方法实施例中的主键生成方法。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。主键生成设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
本发明实施例通过获取初始最大键值和当前最大键值,根据初始最大键值和当前最大键值,在第一队列中按照递增顺序生成主键,接收主键读取指令,根据主键读取指令,为应用程序提供第一队列的主键,以使第一队列的主键被应用程序读取,并在第二队列中生成主键,能够方便地生成自增的数字类型主键,从而在分库分表时保持主键的唯一性,并且,具有极高的主键并发支持能力。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
Claims (9)
1.一种主键生成方法,其特征在于,所述方法包括:
获取第一初始最大键值和第一当前最大键值;
根据所述第一初始最大键值和所述第一当前最大键值,在第一队列中按照递增顺序生成主键;
在所述第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值;
根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间;
判断所述第二生成时间是否小于或等于所述第一读取时间;
若所述第二生成时间小于或等于所述第一读取时间,则在第二队列中生成主键,否则提示用户重新输入第二当前最大键值;
接收主键读取指令;
根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取;
当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键;
判断所述第一队列的主键是否被读取完毕;
若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键;
若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。
2.根据权利要求1所述的方法,其特征在于,所述同时在所述第一队列中生成主键,进一步包括:
获取第三初始最大键值和第三当前最大键值,根据所述第三初始最大键值和第三当前最大键值确定在第一队列中生成主键所需的第三生成时间,以及确定所述第二队列的主键被所述应用程序读取完所需的第二读取时间;
判断所述第三生成时间是否小于或等于所述第二读取时间;
若所述第三生成时间小于或等于所述第二读取时间,则在所述第二队列的主键被所述应用程序读取的同时在所述第一队列中生成主键,否则提示用户重新输入第三当前最大键值。
3.根据权利要求2所述的方法,其特征在于,在为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取后,判断所述第二队列的主键是否被读取完毕;
若所述第二队列的主键被读取完毕,则为所述应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取,并同时执行所述获取第二初始最大键值和第二当前最大键值的步骤,从而在所述第二队列中生成主键。
4.根据权利要求1所述的方法,其特征在于,
所述方法还包括:
获取主键类别;
确定与所述主键类别对应的初始最大键值和当前最大键值;
则,所述为应用程序提供所述第一队列的主键,进一步包括:
为与所述主键类别对应的所述应用程序提供所述第一队列的主键。
5.根据权利要求1所述的方法,其特征在于,所述为应用程序提供所述第一队列的主键,进一步包括:
为若干不同所述应用程序提供所述第一队列的主键。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述在第二队列中生成主键,进一步包括:
根据第二初始最大键值和第二当前最大键值,在第二队列中按照递增顺序生成主键,其中,所述第二初始最大键值为上一次获取的当前最大键值,所述上一次获取的当前最大键值为第一当前最大键值或者第三当前最大键值。
7.一种主键生成装置,其特征在于,所述装置包括:
第一获取模块,用于获取第一初始最大键值和第一当前最大键值;
第一主键生成模块,用于根据所述第一初始最大键值和所述第一当前最大键值,在第一队列中按照递增顺序生成主键;
第二获取模块,用于在所述第一队列的主键生成完毕后,获取第二初始最大键值和第二当前最大键值;
确定模块,用于根据所述第二初始最大键值和第二当前最大键值确定在第二队列中生成主键所需的第二生成时间,以及确定所述第一队列的主键被所述应用程序读取完所需的第一读取时间;
第一判断模块,用于判断所述第二生成时间是否小于或等于所述第一读取时间;
第二主键生成模块,用于若所述第二生成时间小于或等于所述第一读取时间,则在第二队列中生成主键,否则提示用户重新输入第二当前最大键值;
接收模块,用于接收主键读取指令;
第一队列主键提供模块,用于根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键,以使所述第一队列的主键被所述应用程序读取;
删除模块,用于当所述第一队列的主键被读取,在所述第一队列中删除被读取的所述主键;
第二判断模块,用于判断所述第一队列的主键是否被读取完毕;
第二队列主键提供模块,用于若所述第一队列的主键被读取完毕,则为所述应用程序提供所述第二队列的主键,以使所述第二队列的主键被所述应用程序读取,并同时在所述第一队列中生成主键;
所述第一队列主键提供模块,还用于若所述第一队列的主键没有被读取完毕,则继续执行所述根据所述主键读取指令,在第二队列中生成主键的同时为应用程序提供所述第一队列的主键的步骤。
8.一种主键生成设备,其特征在于,包括:处理器、存储器和通信接口,所述处理器、所述存储器和所述通信接口之间相互通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-6中任意一项所述的主键生成方法的操作。
9.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-6中任意一项所述的主键生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911098058.3A CN110597829B (zh) | 2019-11-12 | 2019-11-12 | 主键生成方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911098058.3A CN110597829B (zh) | 2019-11-12 | 2019-11-12 | 主键生成方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597829A true CN110597829A (zh) | 2019-12-20 |
CN110597829B CN110597829B (zh) | 2020-03-27 |
Family
ID=68852346
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911098058.3A Active CN110597829B (zh) | 2019-11-12 | 2019-11-12 | 主键生成方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597829B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130103658A1 (en) * | 2011-10-19 | 2013-04-25 | Vmware, Inc. | Time series data mapping into a key-value database |
CN104915353A (zh) * | 2014-03-13 | 2015-09-16 | 中国电信股份有限公司 | 分布式数据库下全局主键生成方法和系统 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
CN107818115A (zh) * | 2016-09-14 | 2018-03-20 | 苏宁云商集团股份有限公司 | 一种处理数据表的方法及装置 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN108959285A (zh) * | 2017-05-18 | 2018-12-07 | 北京京东尚科信息技术有限公司 | 数据库主键获取方法及装置 |
CN109446196A (zh) * | 2018-09-26 | 2019-03-08 | 努比亚技术有限公司 | 主键生成处理及确定方法、主键生成及应用服务器 |
CN109947411A (zh) * | 2019-03-29 | 2019-06-28 | 成都章鱼侠科技股份有限公司 | 分布式软件生成唯一id主键的方法 |
-
2019
- 2019-11-12 CN CN201911098058.3A patent/CN110597829B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130103658A1 (en) * | 2011-10-19 | 2013-04-25 | Vmware, Inc. | Time series data mapping into a key-value database |
CN104915353A (zh) * | 2014-03-13 | 2015-09-16 | 中国电信股份有限公司 | 分布式数据库下全局主键生成方法和系统 |
CN107818115A (zh) * | 2016-09-14 | 2018-03-20 | 苏宁云商集团股份有限公司 | 一种处理数据表的方法及装置 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
CN107133285A (zh) * | 2017-04-18 | 2017-09-05 | 北京北信源软件股份有限公司 | 一种分布式主键生成方法与装置 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
CN108959285A (zh) * | 2017-05-18 | 2018-12-07 | 北京京东尚科信息技术有限公司 | 数据库主键获取方法及装置 |
CN109446196A (zh) * | 2018-09-26 | 2019-03-08 | 努比亚技术有限公司 | 主键生成处理及确定方法、主键生成及应用服务器 |
CN109947411A (zh) * | 2019-03-29 | 2019-06-28 | 成都章鱼侠科技股份有限公司 | 分布式软件生成唯一id主键的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110597829B (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107710200B (zh) | 用于并行化smp数据库中的基于散列的运算符的系统和方法 | |
CN111913955A (zh) | 数据的排序处理装置、方法和存储介质 | |
AU2017268599B2 (en) | Method, device, server and storage medium of searching a group based on social network | |
CN103970870A (zh) | 数据库查询方法和服务器 | |
CN111143331B (zh) | 数据迁移方法、装置及计算机存储介质 | |
US9684684B2 (en) | Index updates using parallel and hybrid execution | |
TWI554945B (zh) | 例行工作的分配方法及應用其之多核心電腦 | |
CN108897858B (zh) | 分布式集群索引分片的评估方法及装置、电子设备 | |
CN112650449B (zh) | 缓存空间的释放方法、释放系统、电子设备及存储介质 | |
CN110597829B (zh) | 主键生成方法、装置及设备 | |
CN107544848B (zh) | 集群扩展方法、装置、电子设备及存储介质 | |
CN113722626A (zh) | 素材并发请求处理方法、计算设备及存储介质 | |
US11194619B2 (en) | Information processing system and non-transitory computer readable medium storing program for multitenant service | |
CN110909072B (zh) | 一种数据表建立方法、装置及设备 | |
CN110442619B (zh) | 搜索结果排序方法、装置、电子设备及存储介质 | |
CN110688223B (zh) | 数据处理方法及相关产品 | |
JP5899587B2 (ja) | ファイルの検索方法、ファイル検索装置及びプログラム | |
US9367347B1 (en) | Systems and methods for command execution order control in electronic systems | |
JP2957711B2 (ja) | スケジューリング方法 | |
WO2018103435A1 (zh) | 线路板订单分配方法及系统 | |
US11500790B1 (en) | Systems and methods for fast round robin for wide masters | |
JP2000235551A (ja) | データベース並列検索制御方法および記録媒体 | |
US11989590B2 (en) | Method and system for resource allocation | |
CN109344093B (zh) | 缓存结构、读写数据的方法和装置 | |
JP2901786B2 (ja) | スケジュール作成装置 |
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 | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 518000 4001, Block D, Building 1, Chuangzhi Yuncheng Lot 1, Liuxian Avenue, Xili Community, Xili Street, Nanshan District, Shenzhen, Guangdong Patentee after: Shenzhen Zhuyun Technology Co.,Ltd. Address before: 518000 East, 3rd floor, incubation building, China Academy of science and technology, 009 Gaoxin South 1st Road, Nanshan District, Shenzhen City, Guangdong Province Patentee before: SHENZHEN BAMBOOCLOUD TECHNOLOGY CO.,LTD. |