数据库的分库分表ID的生成方法、查询方法、扩展方法技术

技术编号:37610950 阅读:16 留言:0更新日期:2023-05-18 12:02
本发明专利技术涉及一种数据库的分库分表ID的生成方法、查询方法、扩展方法,数据库的分库分表ID的生成方法包括:生成分布式ID;根据数据库的分片键和数据库的子表个数计算子表索引;根据数据库的分片键和数据库的子表扩展个数计算ID后缀;通过对分布式ID和ID后缀取字符串拼接生成分库分表ID,分库分表ID与子表索引相对应。根据本发明专利技术,通过分片信息和有限制的扩容,从而对子表进行精确点查,提高查询性能,解决了现有技术中查询性能低的技术问题。了现有技术中查询性能低的技术问题。了现有技术中查询性能低的技术问题。

【技术实现步骤摘要】
数据库的分库分表ID的生成方法、查询方法、扩展方法


[0001]本申请涉及数据库领域,特别是涉及一种数据库的分库分表ID的生成方法、查询方法、扩展方法。

技术介绍

[0002]在早期,很多公司的业务功能比较简单,系统模块较少。为了减少系统的复杂度,保证开发速度,通常会使用单个的数据库来保存数据,单个数据库中包含多张业务表。
[0003]随着那些公司业务的快速发展,数据量激增,单个的数据库逐渐成为系统的性能瓶颈。为了解决性能瓶颈的问题,一般的做法是进行分库分表。
[0004]分表就是将数据库中的业务表进行拆分。分库就是从单个数据库中拆分出几个不同的数据库,相同领域的业务表放到同一个数据库,不同领域的业务表,放在另外的数据库。而分表和分库可以结合在一起使用。
[0005]分库分表必须要考虑的是如何生成分库分表ID。
[0006]现有技术中,在生成分库分表ID时通常都不会考虑分片信息。这种生成方式存在着如下技术问题:在只知道ID的情况下,无法精确点查,只能通过遍历所有子表才能查询到对应的数据,大大降低了查询性能。
[0007]由此可见,能否基于现有技术中的不足,提供一种改进的数据库的分库分表ID的生成方法、查询方法、扩展方法,解决查询性能低的技术问题,成为本领域技术人员亟待解决的技术难题。

技术实现思路

[0008]专利技术所要解决的课题
[0009]本专利技术的目的是在于克服现有技术的缺陷,提供一种改进的数据库的分库分表ID的生成方法、查询方法、扩展方法。根据本专利技术所提供的改进的数据库的分库分表ID的生成方法、查询方法、扩展方法,解决了查询性能低的技术问题。
[0010]用于解决课题的方法
[0011]本专利技术第一方面涉及一种基于数据库的分库分表ID的生成方法,包括以下步骤:
[0012]生成分布式ID;
[0013]根据数据库的分片键和数据库的子表个数计算子表索引;
[0014]根据数据库的分片键和数据库的子表扩展个数计算ID后缀;
[0015]通过对分布式ID和ID后缀取字符串拼接生成分库分表ID,
[0016]分库分表ID与子表索引相对应。
[0017]优选地,分布式ID为雪花ID。
[0018]优选地,计算子表索引时对分片键取散列值。
[0019]优选地,计算ID后缀时对分片键取散列值。
[0020]优选地,生成分库分表ID之后,将分库分表ID插入数据库。
[0021]本专利技术第二方面涉及一种对分库分表ID进行查询的方法,分库分表ID由本专利技术第一方面涉及的生成方法生成,包括以下步骤:
[0022]从分库分表ID截取ID后缀;
[0023]根据ID后缀和的子表个数计算子表索引;
[0024]根据子表索引查找对应的子表;
[0025]在对应的子表中查询到分库分表ID所对应的数据。
[0026]本专利技术第三方面涉及一种数据库的子表扩展方法,数据库中的分库分表ID由本专利技术第一方面涉及的生成方法生成,包括以下步骤:
[0027]从分库分表ID截取ID后缀;
[0028]根据ID后缀和的扩容后子表个数计算扩容后子表索引,扩容后子表个数小于子表扩展个数;
[0029]定位到扩容后子表索引;
[0030]根据扩容后子表索引对数据进行迁移。
[0031]专利技术的效果
[0032]根据本专利技术所提供的改进的数据库的分库分表ID的生成方法、查询方法、扩展方法,通过分片信息和有限制的扩容,从而对子表进行精确点查,提高查询性能,解决了现有技术中查询性能低的技术问题。
附图说明
[0033]图1为本专利技术的第一实施方式的数据库的分库分表ID的生成方法的流程图。
具体实施方式
[0034]以下,首先对于本专利技术所涉及的数据库的分库分表ID的生成方法详细地进行说明。
[0035]图1为本专利技术的第一实施方式的数据库的分库分表ID的生成方法的流程图。如图1所示,该数据库的分库分表ID的生成方法的具体流程为,首先生成分布式ID(步骤S100)。然后根据数据库的分片键uid和数据库的子表个数n计算子表索引sub_index(步骤S101)。然后根据数据库的分片键uid和数据库的子表扩展个数N计算ID后缀id_suffix(步骤S102)。最后通过对分布式ID和ID后缀id_suffix取字符串拼接生成分库分表ID(步骤S103)。分库分表ID与子表索引sub_index相对应。
[0036]对步骤S100进行说明。分布式ID例如可以是用现有的方式生成的分布式全局唯一ID。优选地,分布式ID为雪花ID,即通过雪花算法生成的ID,但并不限于此,也可以是用其他合适的算法生成的分布式ID。
[0037]雪花ID转换为二进制有64位元。最高1位固定值0,因为生成的ID是正整数,如果是1就是负数了。
[0038]接下来41位是毫秒级时间戳,表示了自选定的时期以来的毫秒数,2^41/(1000*60*60*24*365)=69,大概可以使用69年。
[0039]再接下10位是机器码,代表计算机ID,防止冲突,包括5位datacenterId和5位workerId。最多可以部署2^10=1024台机器。
[0040]最后12位是每台机器上生成ID的序列号。同一毫秒时间戳时,通过这个递增的序列号来区分。即对于同一台机器而言,同一毫秒时间戳下,可以生成2^12=4096个不重复id,最后以十进制将数字序列化。
[0041]雪花ID基于时间生成,故可以按时间排序。此外,一个ID的生成时间可以由其自身推断出来,反之亦然。该特性可以用于按时间筛选ID,以及与之联系的对象。
[0042]例如雪花ID是1541815603606036480,转换成二进制就是0000101010110010110100001000111110110001000|0101111010|000000000000,其中以竖线分隔成三个部分。最前面41位元(加上1位元的0)转换成十进制为367597485448。将这个值加上1288834974657(UNIX时间毫秒),就代表其时间为1656432460.105:即世界协调时间2022年6月28日16:07:40.105。中间10位元0101111010是机器ID。后面12位元解码出来全部为0,代表是在这一微秒的第一个ID。
[0043]对步骤S101进行说明。根据数据库的分片键uid和数据库的子表个数n计算子表索引sub_index。优选地,在计算子表索引sub_index时对分片键uid取散列值。例如,用下述公式进行计算。
[0044]sub_index=hash(uid)%n,
[0045]其中hash(uid)表示对uid取散列值。
[0046]对步骤S102进行说明。根据数据库的分片键uid和数据库的子表扩展个数N计算ID后缀id本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库的分库分表ID的生成方法,其特征在于,包括以下步骤:生成分布式ID;根据数据库的分片键和数据库的子表个数计算子表索引;根据数据库的分片键和数据库的子表扩展个数计算ID后缀;通过对分布式ID和ID后缀取字符串拼接生成分库分表ID,分库分表ID与子表索引相对应。2.根据权利要求1所述的生成方法,其特征在于,分布式ID为雪花ID。3.根据权利要求1所述的生成方法,其特征在于,计算子表索引时对分片键取散列值。4.根据权利要求1所述的生成方法,其特征在于,计算ID后缀时对分片键取散列值。5.根据权利要求1所述的生成方法,其特征在于,生成分库分表ID之后,将分库分表ID...

【专利技术属性】
技术研发人员:左定松
申请(专利权)人:上海数禾信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1