CN117349291A - 一种数据库主键短id生成方法、电子设备和介质 - Google Patents

一种数据库主键短id生成方法、电子设备和介质 Download PDF

Info

Publication number
CN117349291A
CN117349291A CN202311398667.7A CN202311398667A CN117349291A CN 117349291 A CN117349291 A CN 117349291A CN 202311398667 A CN202311398667 A CN 202311398667A CN 117349291 A CN117349291 A CN 117349291A
Authority
CN
China
Prior art keywords
service
primary key
database
time
sequence number
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
CN202311398667.7A
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.)
Dingdang Fast Medicine Technology Group Co ltd
Original Assignee
Dingdang Fast Medicine Technology Group 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 Dingdang Fast Medicine Technology Group Co ltd filed Critical Dingdang Fast Medicine Technology Group Co ltd
Priority to CN202311398667.7A priority Critical patent/CN117349291A/zh
Publication of CN117349291A publication Critical patent/CN117349291A/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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • 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/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种数据库主键短ID生成方法、电子设备和介质。其中,方法包括:获取待生成数据库主键的业务ID;根据业务信息在数据库主键ID中的设定位数,对所述业务ID取模;根据取模后的业务ID确定对应的业务分组,并提取所述业务分组下最后生成主键ID的时间和顺序号;根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID;其中,业务信息在数据库主键ID中的位数根据业务需求确定,生成主键ID的时间和顺序号的位数分别根据业务系统的服务年限和业务并发量确定,以减小位数冗余。本实施例能够生成更短的主键ID,并引入业务信息,适应实际需要。

Description

一种数据库主键短ID生成方法、电子设备和介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据库主键短ID生成方法、电子设备和介质。
背景技术
数据库主键ID指数据库中每一条数据记录的GUID(Global Unique ID,全局唯一标识)。随着分布式服务和微服务的普及,服务端需存储的数据量也越来越大。为每一条数据记录分发主键ID,是数据库构建的重要内容。
现有技术中生成GUID的常见方法是Snowflake算法,所生成的GUID为18到19位的十进制长整数。将该GUID作为存在用户输入检索需求的ID(例如订单ID、问诊单ID等)时,会增加用户的记忆负担,不利于使用。同时,Snowflake算法生成的GUID是没有业务含义的,当需要根据业务信息在数据库内分类存储时,该GUID无法满足这类需求。
发明内容
本发明实施例提供一种数据库主键短ID生成方法、电子设备和介质,生成更短的主键ID,并引入业务信息,适应实际需要。
第一方面,本发明实施例提供了一种数据库主键短ID生成方法,包括:
获取待生成数据库主键的业务ID;
根据业务信息在数据库主键ID中的设定位数,对所述业务ID取模;
根据取模后的业务ID确定对应的业务分组,并提取所述业务分组下最后生成主键ID的时间和顺序号;
根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID;
其中,业务信息在数据库主键ID中的位数根据业务需求确定,生成主键ID的时间和顺序号的位数分别根据业务系统的服务年限和业务并发量确定,以减小位数冗余。
第二方面,本发明实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任一实施例所述的数据库主键短ID生成方法。
第三方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一实施例所述的数据库主键短ID生成方法。
本发明实施例针对业务场景中对短ID和分类存储数据的应用需求,结合业务特点构建了更短的二进制序列,与业务ID融合生成数据库主键ID。对于二进制序列,本实施例根据业务系统的服务年限和单位时间内的并发量,为时间部分和序列号部分确定合理的位数,既能区分需要生成短ID的不同业务,又避免位数过长影响使用。对于业务信息,本实施例根据业务需求确定业务信息在主键ID中的位数,根据该位数对业务ID取模作为主键ID的一部分,既能在主键ID中保留直观的业务信息,又能通过取模后的业务ID对主键ID中的其他部分进行分组隔离,进一步拓宽了主键ID各部分的组合维度,扩大了可用ID的数量。通过以上方式生成的数据库主键ID具有全局唯一性,不但能够保证足够的ID数量满足业务需要,还缩短了主键ID的长度,方便用户记忆和使用,同时包含直观的业务信息,方便根据业务进行分库分表等系统扩容需求。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种原生Snowflake算法的二进制序列数据结构示意图;
图2是本发明实施例提供的优化后的二进制序列数据结构示意图;
图3是本发明实施例提供的一种数据库主键短ID生成方法的流程图;
图4是本发明实施例提供的另一种数据库主键短ID生成方法的流程图;
图5是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行清楚、完整的描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
本发明实施例提供的一种数据库主键短ID生成方法。为了阐述该方法,优先对本实施例的技术问题进行详细说明。原生Snowflake算法使用一个64bit的二进制整型数据来生成GUID,该64bit数据结构如图1所示,包括12bit的递增序列号、10bit的机器号、41bit的时间戳和1bit的符号位。其中,最高位是符号位,0表示正数,1表示负数,通常而言最高位不使用。41bit时间戳精确到毫秒,可表示的最大年限为69年。10bit机器位用于表示生成GUID的机器节点,代表最多能够部属1024台机器节点来生成GUID。最后12bit是序列号,用于表示单位毫秒内单台机器最大生成唯一ID的数量为4096个。将上述数据结构的64bit二进制序列转换为十进制,可以生成18到19位GUID。
但对于部分有用户检索需求的业务场景,这种长ID并不利于用户使用。例如将这种长GUID作为订单ID、问诊单ID时,用户需记住该ID,以便在检索列表输入该ID,或者请求客服人员支持时需要提供该ID,过长的ID不利于记忆和输入。同时,这种方式生成的GUID完全没有业务含义,对于部分需要根据业务信息分类处理的场景不够方便,例如需要按照用户ID或订单ID将数据分表处理的业务表。
基于以上问题,本实施例对上述二进制序列的数据结构进行优化,将用于生成主键ID的二进制序列划分为时间、机器标识码和序列号3个部分,如图2所示。其中,时间部分包括年份和年内分钟数两部分,年份部分可以包括5bit,用于记录当前年份减去基础年份的数字差,基础年份可以是业务系统上线的时间年。示例性的,业务系统2023年上线,则2023年生成的主键ID对应的年份均为0;而2024年生成的主键ID对应的年份均为1。以此类推,5bit年份部分最多可以使用64年。分钟数部分可以包括20bit,用于记录当前时间距离当年1月1日0点0分的分钟数,示例性的,当前时间为2023年01月20日10:23:23(时、分、秒),则此处的分钟数为:(20-1)×24×60+10×60+23=27983。机器识别码可以包括6bit,用于记录业务服务器的唯一ID,可以由业务服务器的IP+端口构成,6bit机器识别码最多支持64台业务服务器生成主键ID。顺序号可以包括6bit,用于记录同一分钟内已生成主键ID的数量。该顺序号从0开始递增,最大值为63。将以上二进制序列转换为十进制后,可以得到10~12位的十进制整数,加上2位业务信息,可以得到总长度为12~14位的十进制主键ID。其中,从第3年到22年之前,生成的主键ID都是11位的,总长度为13位,比原生Snowflake算法生成的18或19位的GUID短很多,更方便用户记忆和使用。
需要说明的是,上述二进制序列中各部分的二进制位数,以及业务信息的十进制位数,均可以根据实际应用具体设置,在满足业务需求前提下尽量减少长度,去除冗余位。其中,业务信息在数据库主键ID中的十进制位数可以根据业务需求确定,可以统计用户查询业务信息时使用的业务ID位数,作为业务信息在数据库主键ID中的位数。示例性的,业务ID可以为用户ID、订单ID等,实际应用中通常采用业务ID的后两位来查询相关业务,则可以将该位数设置为2。年份部分的二进制位数可以根据业务系统的服务年限来确定,上述实施例中选取5位,对应的业务系统服务年限为64年,能够满足大部分业务系统的服务时长。进一步的,还可以将业务系统的最大服务年限所占的位数,与年内时间单位(分钟)总量所占的位数相加,作为生成主键ID的时间位数。机器标识码可以通过业务系统的IP+端口来生成或远程获取。序列号部分可以依据业务并发量确定,可选的,将时间单位(分钟)内的最大业务并发量所占的位数,作为主键ID的顺序号位数,能够满足单位时间内并发的业务数量即可。实际应用中,可以根据业务情况灵活设置各部分的长度,甚至在仅存在单个业务服务器时,可以省略机器识别码部分,本实施例不作具体限制。
基于以上数据结构,本实施例采用分布式ID发号器(简称idGen)来构建数据库主键ID。idGen是一种在分布式软件架构中生成GUID的算法,由idGen服务端和idGen客户端配合完成。其中,idGen服务端用于提供获取配置参数的接口,同时也是idGen的管理控制台;idGen客户端封装了生成GUID的接口,嵌入在业务系统中运行。在一具体实施方式中,当业务系统启动时,根据配置去加载idGen客户端,实例化用于生成数据库主键ID的相关类。实例化的过程中,idGen客户端以业务系统的IP地址和端口作为参数访问idGen服务端,服务端根据所述IP地址和端口号确定该idGen客户端的机器识别码,并将该机器识别码和其他配置参数返回给idGen客户端。其中,所述其他配置参数可以包括基准年份,以及二进制序列中机器识别码部分和序列号部分的位数等。idGen客户端将上述参数保存到本地,并对配置参数进行验证和处理,如初始化基准年份(baseYear)等。初始化完成后,执行本实施例提供的数据库主键短ID生成方法。
图3是本发明实施例提供的一种数据库主键短ID生成方法的流程图。该方法主要应用于订单系统、互联网问诊系统、配送系统等业务系统,可以由嵌入在业务系统中的idGen客户端执行,用于生成更短的订单ID、问诊单ID或配送单ID等。如图3所示,该方法具体包括:
S110、获取待生成数据库主键的业务ID。
业务ID代表了需要最终体现在数据库主键ID中的业务信息,可以为用户ID,也可以是其它ID,是整个方法的输入参数。
S120、根据业务信息在数据库主键ID中的设定位数,对所述业务ID取模。
以十进制业务ID为例,可以首先获取业务信息在数据库主键ID中占用的十进制位数N,并以10N为除数对所述业务ID取模,取模后的业务ID将作为最终生成的数据库主键ID的一部分,以体现业务信息。由于每次获取新的业务ID后都会执行S120进行取模操作,还可以将取模后的业务ID相同的业务作为一个业务分组,并将相同的取模后的业务ID作为所述业务分组的ID,实现对数据库主键ID的分组管理。示例性的,当N取2时,以100为除数对所述业务ID取模,同时也会产生0至99共100个业务分组。
S130、根据取模后的业务ID确定对应的业务分组,并提取所述业务分组下最后生成主键ID的时间和顺序号。
本实施例在每次创建新的主键ID后,都会以业务分组为单位记录下当前业务ID所在的分组内最后一次生成主键ID的时间和顺序号。示例性的,同一年份内可以仅记录年内分钟数和顺序号。相应的,在针对当前业务ID取模之后,取模后的业务ID即为业务分组的ID,提取该组下已记录的最后生成主键ID的时间和顺序号。
S140、根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID。
仍以同一年份为例,当前时间即当前年内分钟数。本实施比较当前年内分钟数与当前分组下记录的最后生成主键ID的年内分钟数,并根据比较结果来确定本次年内分钟数部分的具体数值。
在一具体实施方式中,将当前时间记为t1,将业务分组下最后生成主键ID的时间记为t2,则根据比较结果会产生以下两种情况:
情况一、t1=t2,表明当前时间和组内最后一次生成ID的时间属于同一分钟。这是生成主键ID的正常状态,无需对当前时间进行额外处理,直接将当前时间t1内最后生成主键ID的顺序号n1加1,并根据当前时间t1、加1后的顺序号n1+1和所述取模后的业务ID,生成所述业务ID在数据库中的主键ID。示例性的,根据图2所示的数据结构,将5bit当前年份、20bit当前分钟数t1、6bit机器识别码,以及加1后的6bit顺序号n1+1依次拼接为二进制序列;再将该序列转换为十进制,与所述取模后的十进制业务ID拼接,生成所述业务ID在数据库中的十进制主键ID。特别的,在拼接为二进制序列之前,还需要判断加1后的顺序号n1+1是否超出位数限制内的最大数值,如果超出,表明当前分钟内的业务并发量已超过预期,序列号已超出26。这时本实施例将借用未来时间,将t1+1作为新的当前时间,同时顺序号重置为0,进行t1+1下的顺序号递增。
情况二、t1<t2,这可能是由于两种原因导致的,一种是已发生时钟回拨,即由于某种原因计算机的当前时间比之前的时间还早,另一种是已借用了未来时间,导致最后生成ID的分钟数比当前分钟数大。无论哪种原因,如果继续根据当前时间t1构建二进制序列,将可能产生与过去相同的主键ID,从而引起混乱。为了解决这些问题,本实施例将当前时间和序列号重置为业务分组下最后生成主键ID的时间和序号,继续生成新的主键ID。具体的,可以将当前时间重置为t2,将所述业务分组下最后生成主键ID的顺序号n2加1,并根据所述新的当前时间t2、加1后的顺序号n2+1和所述取模后的业务ID,生成所述业务ID在数据库中的主键ID。同样,在拼接为二进制序列之前,也需要判断加1后的顺序号n2+1是否超出位数限制内的最大数值,如果超出,继续借用未来时间,将t2加1,进行t2+1下的顺序号递增。需要说明的是,借用未来时间本质上是由于某一时间内(分钟)的业务并发量大于预期造成的,但这种大并发量不会在每个时间单位都持续发生,总会在某个时间单位恢复正常,因此借用未来时间不会永远持续下去。
情况三、t1>t2,即当前时间大于组内最后一次生产ID的时间,表明当前时间尚未生产过任何一个主键ID。这时仍使用t1来生产唯一ID,顺序号n1从0开始递增。
上述整个具体实施方式的实现过程还可以通过图4所示流程图来表示,其中的当前时间代表年内分钟数,流程图中“当前时间等于最后生成ID(即主键ID)的时间”包括了三种情况:(1)当前时间和最后生成主键ID的时间属于同一分钟,二者等同;(2)已发生时钟回拨,当前时间被重置为最后生成主键ID的时间;(3)已占用未来时间,当前时间被重置为最后生成主键ID的时间。
进一步的,针对当前业务ID的主键ID生成后,还可以记录本次生成主键ID的时间和顺序号,并更新为当前业务分组内最后生成主键ID的时间和顺序号,供下一次生成主键ID时调用。
本实施例针对业务场景中对短ID和分类存储数据的应用需求,结合业务特点构建了更短的二进制序列,与业务ID融合生成数据库主键ID。对于二进制序列,本实施例根据业务系统的业务并发特点,将时间部分划分为年份和年内分钟数,以分钟作为序列号的控制单元避免了时间粒度过细,同时结合年份部分保证使用年限;并根据业务系统的服务年限和单位时间内的并发量,为时间部分和序列号部分确定合理的位数,既能区分需要生成短ID的不同业务,又避免位数过长影响使用;同时根据业务系统的服务器数量确定机器识别码的位数,实现不同服务器间的区分。对于业务信息,本实施例根据业务需求确定业务信息在主键ID中的位数,根据该位数对业务ID取模作为主键ID的一部分,既能在主键ID中保留直观的业务信息,又能通过取模后的业务ID对主键ID中的其他部分进行分组隔离,进一步拓宽了主键ID各部分的组合维度,扩大了可用ID的数量。特别的,本实施例通过借用未来时间来突破短时间内的并发限制,并保持记录最后一次生成主键ID的时间和顺序号,通过重置当前时间同时解决时钟回拨和借用未来时间带来的影响,防止生成重复的主键ID。通过以上方式生成的数据库主键ID具有全局唯一性,不但能够保证足够的ID数量满足业务需要,还缩短了主键ID的长度,方便用户记忆和使用,同时包含直观的业务信息,方便根据业务进行分库分表等系统扩容需求。
图5为本发明实施例提供的一种电子设备的结构示意图,如图5所示,该设备包括处理器60、存储器61、输入装置62和输出装置63;设备中处理器60的数量可以是一个或多个,图5中以一个处理器60为例;设备中的处理器60、存储器61、输入装置62和输出装置63可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器61作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据库主键短ID生成方法对应的程序指令/模块。处理器60通过运行存储在存储器61中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据库主键短ID生成方法。
存储器61主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器61可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器61可进一步包括相对于处理器60远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置62可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置63可包括显示屏等显示设备。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一实施例的数据库主键短ID生成方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如C语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案。

Claims (10)

1.一种数据库主键短ID生成方法,其特征在于,包括:
获取待生成数据库主键的业务ID;
根据业务信息在数据库主键ID中的设定位数,对所述业务ID取模;
根据取模后的业务ID确定对应的业务分组,并提取所述业务分组下最后生成主键ID的时间和顺序号;
根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID;
其中,业务信息在数据库主键ID中的位数根据业务需求确定,生成主键ID的时间和顺序号的位数分别根据业务系统的服务年限和业务并发量确定,以减小位数冗余。
2.根据权利要求1所述的方法,其特征在于,
生成主键ID的时间包括年份部分和年内分钟数部分;其中,年份部分用于记录当前年份与业务上线年份的差值;年内分钟数部分用于记录当前年份内的分钟数;
生成主键ID的顺序号用于记录同一分钟内已生成主键ID的数量。
3.根据权利要求1所述的方法,其特征在于,所述根据业务信息在数据库主键ID中的设定位数,对所述业务ID取模,包括:
获取业务信息在数据库主键ID中占用的十进制位数N;
以10N为除数对所述业务ID取模,由取模后的业务ID相同的业务构成一个业务分组,并将相同的取模后的业务ID作为所述业务分组的ID。
4.根据权利要求1所述的方法,其特征在于,所述根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID,包括:
比较当前时间t1与所述业务分组下最后生成主键ID的时间t2
如果二者相同,将当前时间t1内最后生成主键ID的顺序号n1加1,并根据当前时间t1、加1后的顺序号n1+1和所述取模后的业务ID,生成所述业务ID在数据库中的主键ID;
如果t1<t2,将所述业务分组下最后生成主键ID的时间t2作为新的当前时间,将所述业务分组下最后生成主键ID的顺序号n2加1,并根据所述新的当前时间t2、加1后的顺序号n2+1和所述取模后的业务ID,生成所述业务ID在数据库中的主键ID。
5.根据权利要求4所述的方法,其特征在于,所述根据当前时间t1、加1后的顺序号n1+1和所述取模后的业务ID,生成所述业务ID在数据库中的主键ID,包括:
将当前时间t1和加1后的顺序号n1+1,按照二进制序列依次拼接;
将拼接后的序列转换为十进制,与所述取模后的十进制业务ID拼接,生成所述业务ID在数据库中的十进制主键ID。
6.根据权利要求5所述的方法,其特征在于,所述将当前时间t1和加1后的顺序号n1+1,按照二进制序列依次拼接,包括:
如果加1后的顺序号n1+1超出位数限制内的最大数值,将t1+1作为新的当前时间,进行所述新的当前时间下的顺序号递增。
7.根据权利要求1所述的方法,其特征在于,存在多个业务系统提供业务ID,各业务ID的来源业务系统通过机器识别码来区分;
所述根据所述最后生成主键ID的时间和顺序号,以及所述取模后的业务ID,生成所述业务ID在数据库中的主键ID,包括:
将所述最后生成主键ID的25bit时间和6bit顺序号,以及6bit机器识别码拼接为二进制序列,其中,所述25bit时间包括5bit年份和20bit年内分钟数;
将拼接后的序列转换为十进制,与取模后的2位十进制业务ID拼接,生成所述业务ID在数据库中的12~14位十进制主键ID。
8.根据权利要求1所述的方法,其特征在于,所述业务信息在数据库主键ID中的位数根据业务需求确定,生成主键ID的时间和顺序号的位数分别根据业务系统的服务年限和业务并发量确定,以减小位数冗余,包括:
统计用户查询业务信息时使用的业务ID位数,作为业务信息在数据库主键ID中的位数;
确定业务系统的最大服务年限所占的位数,以及年内时间单位总量所占的位数,将两个位数之和作为生成主键ID的时间位数;
将年内每个时间单位内的最大业务并发量所占的位数,作为主键ID的顺序号位数。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现权利要求1-8任一所述的数据库主键短ID生成方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-8任一所述的数据库主键短ID生成方法。
CN202311398667.7A 2023-10-26 2023-10-26 一种数据库主键短id生成方法、电子设备和介质 Pending CN117349291A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311398667.7A CN117349291A (zh) 2023-10-26 2023-10-26 一种数据库主键短id生成方法、电子设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311398667.7A CN117349291A (zh) 2023-10-26 2023-10-26 一种数据库主键短id生成方法、电子设备和介质

Publications (1)

Publication Number Publication Date
CN117349291A true CN117349291A (zh) 2024-01-05

Family

ID=89364715

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311398667.7A Pending CN117349291A (zh) 2023-10-26 2023-10-26 一种数据库主键短id生成方法、电子设备和介质

Country Status (1)

Country Link
CN (1) CN117349291A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117827849A (zh) * 2024-03-04 2024-04-05 支付宝(杭州)信息技术有限公司 数据字典的维护方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117827849A (zh) * 2024-03-04 2024-04-05 支付宝(杭州)信息技术有限公司 数据字典的维护方法及装置

Similar Documents

Publication Publication Date Title
CN111767143B (zh) 交易数据处理方法、装置、设备及系统
US11640474B2 (en) Method and apparatus for operating database
CN111344706B (zh) 管理区块链上的交易的方法和系统
EP3639465B1 (en) Improved hardware security module management
US9524267B2 (en) Check operation dispersed storage network frame
EP4300323A1 (en) Data processing method and apparatus for blockchain network, computer device, computer readable storage medium, and computer program product
CN111177143B (zh) 键值数据存储方法、装置、存储介质与电子设备
CN117349291A (zh) 一种数据库主键短id生成方法、电子设备和介质
CN111639080B (zh) 一种数据处理方法、装置、节点设备及存储介质
CN113326165B (zh) 基于区块链的数据处理方法、设备及计算机可读存储介质
CN111767144A (zh) 交易数据的交易路由确定方法、装置、设备及系统
CN113076304A (zh) 一种分布式版本管理方法、装置和系统
CN115756955A (zh) 一种数据备份、数据恢复的方法、装置及计算机设备
CN109254999B (zh) 一种区块链的数据处理方法、装置、设备及介质
US11567814B2 (en) Message stream processor microbatching
CN112598529B (zh) 数据处理方法及装置、计算机可读存储介质、电子设备
CN113360558B (zh) 数据处理方法、数据处理装置、电子设备及存储介质
CN114048206B (zh) 一种大规模集群的配置一致性校验方法、系统及装置
CN114528108A (zh) 一种序列号生成方法、装置、服务器和存储介质
US10819622B2 (en) Batch checkpointing for inter-stream messaging system
CN113132241A (zh) Acl模板动态配置方法及装置
CN115836511A (zh) 物联网中的设备管理方法、装置、计算机设备及存储介质
CN115328892B (zh) 一种业务表单数据结构处理方法、系统、电子设备及介质
CN111159146B (zh) 一种嵌入式数据库的处理方法及其装置
CN113704308B (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