CN111078693B - 用于生成数据库记录主键的方法和装置 - Google Patents
用于生成数据库记录主键的方法和装置 Download PDFInfo
- Publication number
- CN111078693B CN111078693B CN201911198000.6A CN201911198000A CN111078693B CN 111078693 B CN111078693 B CN 111078693B CN 201911198000 A CN201911198000 A CN 201911198000A CN 111078693 B CN111078693 B CN 111078693B
- Authority
- CN
- China
- Prior art keywords
- database record
- time
- primary key
- time slice
- database
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种用于生成数据库记录主键的方法和装置、电子设备、数据库记录主键的分布式发号器以及非瞬时性计算机可读存储介质。该方法包括:获取当前系统时间,生成数据库记录主键;记录新生成的所述数据库记录主键时的系统时间,根据与上一次生成同一时间片下的所述数据库记录主键时所记录的系统时间作比较,确定是否发生同一时间片下的时钟回拨;以及基于所确定的结果,生成新的所述数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位并且每发生一次时钟回拨进行一次数据切换。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种用于生成数据库记录主键的方法和装置、电子设备、数据库记录主键的分布式发号器以及非瞬时性计算机可读存储介质。
背景技术
记录主键是数据库系统中标识每一条记录的唯一标识。目前,主流的数据库记录主键(也称为唯一ID)生成策略是使用序列号,即通过顺序递增的方式生成长整型的记录主键。但是,在多机房或多数据库实例的情况下,使用序列号生成的记录主键难以满足唯一性的要求,这是因为不同实例的数据库可能会生成完全一样的整型数值。为了解决这个问题,可采用雪花算法(snowflake)开发一个独立的系统(通常称为分布式ID发号器)来生成唯一ID。雪花算法是开源的分布式ID生成算法,其核心思想是把一个64位的二进制长整型数值划分为多个组成部分,包括时间戳、机器ID和序列号等,通过时间戳、机器ID和序列号来保证所生成ID的唯一性。
然而,这种算法严重依赖于服务器时钟,如果服务器时钟回拨了,生成的ID就不能保证唯一性。时钟回拨是指计算机服务器的时间由于某种原因在某一时刻的时间比之前的时间还早,则称之为时钟回拨。有多种可能造成服务器时钟回拨,例如:运维人员手动设置了比服务器当前时间更早的时间,服务器时钟在运行的时候走的比标准时间慢,或者是服务器时钟走的比标准时钟快、运行远程时钟同步后导致服务器时钟回拨等。当服务器时钟发生回拨时,分布式ID发号器会产生重复的ID导致进入不可用状态。
当前的分布式ID发号器对服务器时钟回拨的处理方式一般有两种,一种是发现时钟回拨了即时报错,拒绝生成新的ID,另一种是阻塞等待,直到服务器时钟追上最后生成ID的时间。然而,无论是以上哪种方式,都会影响该发号器的可用性,进而影响上层调用者。
发明内容
为了解决现有技术中出现的上述问题,本申请提供了一种用于生成数据库记录主键的方法和装置、电子设备、数据库记录主键的分布式发号器以及非瞬时性计算机可读存储介质。
根据本申请的一个方面,提供了一种用于生成数据库记录主键的方法,包括:
获取当前系统时间,生成数据库记录主键;
记录新生成的所述数据库记录主键时的系统时间,根据与上一次生成同一时间片下的所述数据库记录主键时所记录的系统时间作比较,确定是否发生同一时间片下的时钟回拨;以及
基于所确定的结果,生成新的所述数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位并且每发生一次时钟回拨进行一次数据切换。
根据一个实施方式,基于所确定的结果,生成新的所述数据库记录主键包括:
在确定发生同一时间片下的时钟回拨的情况下,修改所述时间片数据的值;以及
基于修改后的时间片数据的值,生成所述数据库记录主键。
根据一个实施方式,基于所确定的结果,生成所述数据库记录主键包括:
步骤A:在确定发生同一时间片下的时钟回拨的情况下,修改所述时间片数据的值;
步骤B:重新获取当前系统时间;
步骤C:将重新获取的当前系统时间与上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间作比较;
步骤D:若重新获取的当前系统时间在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则在所述修改后的时间片下生成数据库记录主键;以及
步骤E:若重新获取的当前系统时间不在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则返回步骤A。
根据一个实施方式,将生成所述数据库记录主键时的系统时间保存在本地磁盘或远程保存。
根据一个实施方式,该方法还包括:
将当前时间片数据的值保存于内存中。
根据本申请的另一方面,提供了一种用于生成数据库记录主键的装置,包括:
获取单元,获取当前系统时间,生成数据库记录主键;
确定单元,记录新生成的所述数据库记录主键的系统时间,根据与上一次生成同一时间片下的所述数据库记录主键时所记录的系统时间作比较,确定是否发生同一时间片下的时钟回拨;以及
生成单元,基于所确定的结果,生成新的所述数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位并且每发生一次时钟回拨进行一次数据切换。
根据本申请的另一方面,提供了一种电子设备,包括:
处理器;
存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如上所述的方法。
根据本申请的另一方面,提供了一种数据库记录主键的分布式发号器,包括如上所述的电子设备。
根据本申请的另一方面,提供了一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如上所述的方法。
由此,由于数据库记录主键中包含的多个数据位反映了时间片信息,从而可以解决由于时钟回拨所带来的数据库记录主键的唯一性问题。在发生时钟回拨的情况下,虽然新生成的数据库记录主键的时间戳可能会与之前已生成的数据库记录主键相同,但可通过改变数据库记录主键中的时间片信息而使二者区分开,从而确保了生成的数据库记录主键的唯一性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本申请一个实施方式用于生成数据库记录主键的方法的流程图。
图2示出了根据本申请所生成的数据库记录主键的一个示例。
图3示出了第一次发生时钟回拨时对时间片数据进行的第一次切换的示意图。
图4示出了对时间片数据进行第十六次切换的示意图。
图5示出了根据本申请一个实施方式根据当前系统时间确定是否发生同一时间片下的时钟回拨的流程图。
图6示出了根据本申请一个实施方式基于所确定的结果生成数据库记录主键的流程图。
图7示出了根据本申请另一实施方式基于所确定的结果生成数据库记录主键的流程图。
图8示出了根据本申请一个实施方式用于生成数据库记录主键的装置。
图9示出了适于用来实现本申请实施例的服务器的计算机系统的结构示意图。
具体实施方式
为了更好地理解本申请的技术方案及优点,下面结合附图和具体实施例对本申请的内容做进一步详细说明。但此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。此外,以下所描述的本申请的各实施方式中所涉及到的技术特征除彼此构成冲突的情况外均可以组合使用,从而构成本申请范围内的其他实施方式。
下文中描述的内容提供了许多不同的实施方式或例子用来实现本申请的不同结构。为了简化本申请的公开内容,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本申请。此外,本申请可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。
图1示出了根据本申请一个实施方式用于生成数据库记录主键的方法的流程图。如图1所示,该方法100可包括步骤S110、S120、S130。在步骤S110中,获取当前系统时间。在本申请中将要生成的数据库记录主键(也称为唯一ID)将包括时间戳信息,该时间戳信息即为此步骤中得到的当前系统时间。此处所述的当前系统时间指的是执行该方法100的主体的当前系统时间。例如,该方法通常可在应用服务器和业务系统服务器上执行,那么为了减少与数据库服务器的交互次数,在步骤S110中所获取的当前系统时间指的是该应用服务器或业务系统服务器的当前系统时间。
在步骤S120中,根据当前系统时间,确定是否发生同一时间片下的时钟回拨。在本申请中,以服务器时钟发生回拨的时刻为分界线,把服务器时间(即,系统时间)记录到一组不同的变量中,则该组变量中的每一个变量记录的时间即称为时间片,每个时间片中的时间趋势递增。在此步骤中具体的确定方式将在下文中进行详细描述。
在步骤S130中,基于所确定的结果,生成数据库记录主键。该数据库记录主键包括时间片数据,该时间片数据占用数据库记录主键的多个数据位。具体地,如果确定在同一时间片下没有发生时钟回拨,则可根据当前时间片数据生成数据库记录主键;如果确定在同一时间片下发生了时钟回拨,则需要先修改时间片数据的数值,再根据修改后的时间片数据生成数据库记录主键。该具体过程将在下文中结合实例详细描述。
由此,由于数据库记录主键中包含的多个数据位反映了时间片信息,从而可以解决由于时钟回拨所带来的数据库记录主键的唯一性问题。在发生时钟回拨的情况下,虽然新生成的数据库记录主键的时间戳可能会与之前已生成的数据库记录主键相同,但可通过改变数据库记录主键中的时间片信息而使二者区分开,从而确保了生成的数据库记录主键的唯一性。
图2示出了根据本申请所生成的数据库记录主键的一个示例。如图2所示,数据库记录主键可以是一个64位的二进制数据,该长整型的64位数据可划分为:符号位(图2中第1位)、时间戳(图2中第2-32位)、时间片数据(图2中第33-36位)、机器码(图2中第37-48位)、序列号(图2中第49-64位)。
当需要生成数据库记录主键时,可采用初始的时间片数据0000(初始时间片数据也可设置为其他数值)生成记录主键,即所生成的数据库记录主键中时间片数据位上的数值为0000。当发生服务器时钟回拨时,为了确保所生成的数据库记录主键的唯一性,可进行时间片切换操作,即将时间片数据由0000修改为其他数值,例如0001。因此,即便发生了时钟回拨,由于切换了时间片数据,那么也能够保证所生成的数据库记录主键不会与先前已生成的记录主键重复。
那么,每发生一次时钟回拨,都可以切换一次时间片数据,由于图2所示的示例中时间片数据为4位,因此时间片数据可以有16个不同的数值:0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111。这16个时间片数据的数值可以视为16个不同的通道,当发生时钟回拨时,只要将时间片数据切换到不同的通道,即可确保生成的数据库记录主键的唯一性。
图3示出了第一次发生时钟回拨时对时间片数据进行的第一次切换,将时间片数据从0000切换为0001。当发生了15次时钟回拨时,时间片数据切换到最后一个通道1111,此时若再次发生时钟回拨,则可将时间片数据切换回第一个通道0000,如图4所示。因此,时间片数据的数值可循环使用,只要服务器时间在短时间内回拨的次数不超过15次,则所生成的ID就是全局唯一的。
本领域技术人员可以理解,图2、图3、图4所示仅仅是为了便于描述所示出的数据库记录主键和时间片的一个示例,本申请不限于此。例如,根据本申请所生成的数据库记录主键可包括非64位的位数(如,32位,128位等),在数据库记录主键中可根据实际需要还包括表征其他信息的数据位,其各部分的位数也可根据实际需要设定。在图2所示出的数据库记录主键中包含了用于表征时间片的4个数据位,本申请不限于此,可根据实际需要设置更少或更多的数据位以用于表示时间片,例如,3位或5位。表征时间片的数据位越多,可供时间片切换的数值就越多,当然另一方面,其也占用了记录主键中更多的位数,使得表征其他信息的位数变少。
根据本申请一个实施方式,上述方法100还可包括记录生成数据库记录主键时的系统时间的步骤。在每次生成数据库记录主键时,需记录当前的系统时间,以用于后续比较之用,从而确定是否发生了服务器时钟回拨。
图5示出了根据本申请一个实施方式根据当前系统时间确定是否发生同一时间片下的时钟回拨的流程图。如图5所示,上述步骤S120可包括子步骤S121和S122。在子步骤S121中,将当前系统时间与上一次生成同一时间片下的数据库记录主键时所记录的系统时间作比较。如上所述,在每次生成数据库记录主键时,都记录了当前的系统时间。那么,在下一次生成数据库记录主键时,可先将当前系统时间与最近一次生成同一时间片下的数据库记录主键时所记录的系统时间进行比较。
在子步骤S122中,根据比较结果,确定是否发生同一时间片下的时钟回拨。如果当前系统时间大于最近一次生成同一时间片下的数据库记录主键时所记录的系统时间,则可认为没有发生同一时间片下的时钟回拨(但实际上有可能也发生了时钟回拨,只不过在同一时间片下感受不到)。反之,如果当前系统时间小于最近一次生成同一时间片下的数据库记录主键时所记录的系统时间,则确定发生了同一时间片下的时钟回拨。另外,如果当前系统时间恰巧等于最近一次生成同一时间片下的数据库记录主键时所记录的系统时间,那么可以认为没有发生时钟回拨,此时可通过主键中的序列号(例如,如图2所示)来区分所生成的数据库记录主键,以保证其唯一性。
图6示出了根据本申请一个实施方式基于所确定的结果生成数据库记录主键的流程图。如图6所示,上述步骤S130可包括子步骤S131和S132。在子步骤S131中,在确定发生同一时间片下的时钟回拨的情况下,修改时间片数据的值。如以上结合图2的描述,当发生服务器时钟回拨时,可将时间片切换到另一个通道,例如,将其数值从0000修改为0001。
在子步骤S132中,基于修改后的时间片数据的值,生成数据库记录主键。由此,因为发生了服务器时钟回拨,因此切换了时间片数据的值,而新生成的数据库记录主键中的时间片数据位上,将采用修改后的数值,从而确保所生成ID的唯一性。
图7示出了根据本申请另一实施方式基于所确定的结果生成数据库记录主键的流程图。如图7所示,上述步骤S130可包括子步骤S134至S138。在子步骤S134中,在确定发生同一时间片下的时钟回拨的情况下,修改时间片数据的值。该子步骤与上述实施例中的子步骤S131类似,为了简要起见,在此不再赘述。
在子步骤S135中,重新获取当前系统时间,并且在子步骤S136中,将重新获取的当前系统时间与上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间作比较。在子步骤S134中修改了时间片数据的数值之后,将会在新的通道中(即,采用修改后的时间片数据)生成数据库记录主键,因此需要重新获取当前系统时间,并与修改后的时间片下最后一次生成数据库记录主键时记录的系统时间做比较。该比较即与上述实施例中的子步骤S121的操作类似,为了简要起见,在此不再赘述。
在子步骤S137中,若重新获取的当前系统时间在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则在修改后的时间片下生成数据库记录主键。如果重新获取的当前系统时间大于修改后的时间片下最近一次生成数据库记录主键时记录的系统时间,则说明在该时间片下可认为没有发生时钟回拨,因此可以在该时间片下生成数据库记录主键,而不会影响所生成ID的唯一性。
在子步骤S138中,若重新获取的当前系统时间不在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则返回子步骤134。如果重新获取的当前系统时间小于修改后的时间片下最近一次生成数据库记录主键时记录的系统时间,则说明在该时间片下发生了时钟回拨,因此需要返回子步骤S134再次切换时间片。
由此,在每次切换时间片数据后,都重新获取当前系统时间,并在切换后的时间片下判断是否发生时钟回拨,如果在新的时间片下也判断出具有时钟回拨的情况,则再次切换时间片,直至在同一时间片下没有时钟回拨现象出现,从而确保所生成ID的唯一性。
根据本申请一个实施方式,将生成数据库记录主键时的系统时间保存在本地磁盘或远程保存。如上所述,在每次生成数据库记录主键时,都会记录当前的系统时间,以用于后续比较之用。那么,将所记录的系统时间保存在本次磁盘或远程保存,将使得该信息能够在系统重启后,还能够被获取到,从而在系统重启后依然能够检查是否发生了服务器时钟回拨。
根据本申请一个实施方式,该方法100还可包括将当前时间片数据的值保存于内存中的步骤。由于将当前时间片数据的数值在内存中进行了缓存,因此可实时地利用该数值生成数据库记录主键。
图8示出了根据本申请一个实施方式用于生成数据库记录主键的装置。如图8所示,该装置200可包括获取单元210、确定单元220、生成单元230。获取单元210用于获取当前系统时间。确定单元220根据当前系统时间,确定是否发生同一时间片下的时钟回拨。生成单元230基于所确定的结果,生成数据库记录主键。该数据库记录主键包括时间片数据,该时间片数据占用数据库记录主键的多个数据位。
根据本申请的另一方面,提供了一种电子设备,其包括处理器和存储器,该存储器存储有计算机程序,当该计算机程序被该处理器执行时,使得该处理器执行如以上任一个实施方式所述的方法。
根据本申请的另一方面,提供了一种数据库记录主键的分布式发号器,该发号器可包括上述电子设备。
根据本申请的另一方面,提供了一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当该指令被处理器执行时,能够使得该处理器执行如以上任一个实施方式所述的方法。
下面参考图9,其示出了适于用来实现本申请实施例的服务器的计算机系统300的结构示意图。图9示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图9所示,计算机系统300包括中央处理单元(CPU)301,其可以根据存储在只读存储器(ROM)302中的程序或者从存储部分308加载到随机访问存储器(RAM)303中的程序而执行各种适当的动作和处理。在RAM 303中,还存储有系统300操作所需的各种程序和数据。CPU 301、ROM 302以及RAM 303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。
以下部件连接至I/O接口305:包括键盘、鼠标等的输入部分306;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分307;包括硬盘等的存储部分308;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分309。通信部分309经由诸如因特网的网络执行通信处理。驱动器310也根据需要连接至I/O接口305。可拆卸介质311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器310上,以便于从其上读出的计算机程序根据需要被安装入存储部分308。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分309从网络上被下载和安装,和/或从可拆卸介质311被安装。在该计算机程序被中央处理单元(CPU)301执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括获取单元、确定单元和生成单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,获取单元还可以被描述为“获取当前系统时间的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:获取当前系统时间;根据所述当前系统时间,确定是否发生同一时间片下的时钟回拨;以及基于所确定的结果,生成数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本申请的方法及其核心思想。同时,本领域技术人员依据本申请的思想,基于本申请的具体实施方式及应用范围上做出的改变或变形之处,都属于本申请保护的范围。综上所述,本说明书内容不应理解为对本申请的限制。
Claims (8)
1.一种用于生成数据库记录主键的方法,包括:
获取当前系统时间,生成数据库记录主键;
记录新生成的所述数据库记录主键的系统时间,根据与上一次生成同一时间片下的所述数据库记录主键时所记录的系统时间作比较,确定是否发生同一时间片下的时钟回拨;以及
基于所确定的结果,生成新的所述数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位并且每发生一次时钟回拨进行一次数据切换。
2.如权利要求1所述的方法,其中基于所确定的结果,生成新的所述数据库记录主键包括:
在确定发生同一时间片下的时钟回拨的情况下,修改所述时间片数据的值;以及
基于修改后的时间片数据的值,生成所述数据库记录主键。
3.如权利要求1所述的方法,其中基于所确定的结果,生成所述数据库记录主键包括:
步骤A:在确定发生同一时间片下的时钟回拨的情况下,修改所述时间片数据的值;
步骤B:重新获取当前系统时间;
步骤C:将重新获取的当前系统时间与上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间作比较;
步骤D:若重新获取的当前系统时间在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则在所述修改后的时间片下生成数据库记录主键;以及
步骤E:若重新获取的当前系统时间不在上一次生成修改后的时间片下的数据库记录主键时所记录的系统时间之后,则返回步骤A。
4.如权利要求1所述的方法,其中将生成所述数据库记录主键时的系统时间保存在本地磁盘或远程保存。
5.一种用于生成数据库记录主键的装置,包括:
获取单元,获取当前系统时间,生成数据库记录主键;
确定单元,记录新生成的所述数据库记录主键的系统时间,根据与上一次生成同一时间片下的所述数据库记录主键时所记录的系统时间作比较,确定是否发生同一时间片下的时钟回拨;以及
生成单元,基于所确定的结果,生成新的所述数据库记录主键,所述数据库记录主键包括时间片数据,所述时间片数据占用所述数据库记录主键的多个数据位并且每发生一次时钟回拨进行一次数据切换。
6.一种电子设备,包括:
处理器;
存储器,存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1-4中任一项所述的方法。
7.一种数据库记录主键的分布式发号器,包括如权利要求6所述的电子设备。
8.一种非瞬时性计算机可读存储介质,其上存储有计算机可读指令,当所述指令被处理器执行时,使得所述处理器执行如权利要求1-4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911198000.6A CN111078693B (zh) | 2019-11-29 | 2019-11-29 | 用于生成数据库记录主键的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911198000.6A CN111078693B (zh) | 2019-11-29 | 2019-11-29 | 用于生成数据库记录主键的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078693A CN111078693A (zh) | 2020-04-28 |
CN111078693B true CN111078693B (zh) | 2021-10-22 |
Family
ID=70312334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911198000.6A Active CN111078693B (zh) | 2019-11-29 | 2019-11-29 | 用于生成数据库记录主键的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078693B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111694792A (zh) * | 2020-05-29 | 2020-09-22 | 中国建设银行股份有限公司 | 一种基于snowflake的标识生成方法和装置 |
CN111917897B (zh) * | 2020-07-15 | 2024-03-05 | 深圳市腾讯网域计算机网络有限公司 | 标识生成方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714010A (zh) * | 2009-10-28 | 2010-05-26 | 北京龙芯中科技术服务中心有限公司 | 跨时钟域的时序仿真系统及方法 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN108804545A (zh) * | 2018-05-18 | 2018-11-13 | 深圳市彬讯科技有限公司 | 分布式全局唯一id生成方法及设备 |
CN109987120A (zh) * | 2019-04-01 | 2019-07-09 | 北京锦鸿希电信息技术股份有限公司 | 列车通信传输方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8311199B2 (en) * | 2006-12-28 | 2012-11-13 | Verizon Services Corp. | Methods and systems for configuring and providing conference calls with customized caller id information |
US10657123B2 (en) * | 2015-09-16 | 2020-05-19 | Sesame Software | Method and system for reducing time-out incidence by scoping date time stamp value ranges of succeeding record update requests in view of previous responses |
CN109309736A (zh) * | 2017-07-28 | 2019-02-05 | 北京京东尚科信息技术有限公司 | 全局唯一id的生成方法和生成装置 |
CN109740120A (zh) * | 2018-12-14 | 2019-05-10 | 深圳壹账通智能科技有限公司 | 分布式环境下唯一标识的生成方法、装置、计算机设备 |
CN110147281A (zh) * | 2019-05-15 | 2019-08-20 | 上海淇毓信息科技有限公司 | 优化雪花算法在金融业务中应用的方法、装置、电子设备 |
CN110287184A (zh) * | 2019-05-28 | 2019-09-27 | 必成汇(成都)科技有限公司 | 生成分布式唯一id的方法 |
-
2019
- 2019-11-29 CN CN201911198000.6A patent/CN111078693B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714010A (zh) * | 2009-10-28 | 2010-05-26 | 北京龙芯中科技术服务中心有限公司 | 跨时钟域的时序仿真系统及方法 |
CN108804451A (zh) * | 2017-04-28 | 2018-11-13 | 北京京东尚科信息技术有限公司 | 生成主键的方法、装置、电子设备和可读存储介质 |
CN107247734A (zh) * | 2017-05-05 | 2017-10-13 | 上海斐讯数据通信技术有限公司 | 一种分布式数据库主键生成方法及系统 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN108804545A (zh) * | 2018-05-18 | 2018-11-13 | 深圳市彬讯科技有限公司 | 分布式全局唯一id生成方法及设备 |
CN109987120A (zh) * | 2019-04-01 | 2019-07-09 | 北京锦鸿希电信息技术股份有限公司 | 列车通信传输方法及系统 |
Non-Patent Citations (2)
Title |
---|
"A Simple Distributed ID Assignment Scheme for CSMA/IC Using Well Arranged Rotation ID in Ad Hoc Networks";Ki-seok Lee 等;《2009 International Conference on Advanced Information Networking and Applications》;20190619;全文 * |
"分享大厂分布式唯一ID设计方案,快来围观";老顾聊技术;《https://www.toutiao.com/i6682672464708764174?wid=1630915249835》;20190423;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111078693A (zh) | 2020-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11188560B2 (en) | Synchronizing object in local object storage node | |
CN111078693B (zh) | 用于生成数据库记录主键的方法和装置 | |
US11314553B2 (en) | Method, apparatus, and computer program product for determining usage change rate of storage system | |
WO2024041022A1 (zh) | 数据库表变更方法、装置、设备和存储介质 | |
CN114584480A (zh) | 用于服务降级处理的方法和装置 | |
CN110928715A (zh) | 一种提示错误描述信息的方法、装置、介质和电子设备 | |
CN113377770A (zh) | 一种数据处理方法和装置 | |
CN113886455A (zh) | 全局唯一序列号生成方法、装置、电子设备及存储介质 | |
CN111078418B (zh) | 操作同步方法、装置、电子设备及计算机可读存储介质 | |
US10761940B2 (en) | Method, device and program product for reducing data recovery time of storage system | |
CN114697398B (zh) | 数据处理方法、装置、电子设备、存储介质及产品 | |
US20230086991A1 (en) | Method, electronic device and computer program product for flushing metadata | |
CN115964436A (zh) | 一种数据库集群管理的方法和装置 | |
CN115510064A (zh) | Es告警数据回填方法、装置、设备及介质 | |
CN116166673A (zh) | 数据处理方法及装置、电子设备、计算机可读存储介质 | |
CN108733704B (zh) | 多数据库数据处理方法、装置及存储介质和电子设备 | |
CN112463887A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113220554A (zh) | 检测程序代码的性能的方法和设备 | |
CN112817701A (zh) | 定时器处理方法、装置、电子设备和计算机可读介质 | |
CN110879818A (zh) | 一种获取数据的方法、装置、介质和电子设备 | |
CN117193670B (zh) | 一种清除缓存的方法、装置、存储介质以及电子设备 | |
WO2023207213A1 (zh) | 数据处理方法及装置 | |
CN113312068B (zh) | 用于升级系统的方法、电子设备和计算机程序产品 | |
CN114116310B (zh) | 基于json的灾备切换的展示方法、装置、设备和存储介质 | |
CN113726830B (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 |