数据库分库分表扩容方法、装置及计算机可读存储介质制造方法及图纸

技术编号:33807710 阅读:22 留言:0更新日期:2022-06-16 10:16
本申请实施例提供了一种数据库分库分表扩容方法、装置及计算机可读存储介质,包括:获取数据库各数据表的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;当有业务端产生数据时,基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括路由字段;当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行容,并将扩容得到的新的数据表的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。该方案使的数据库扩容后无需对扩容前存储的数据进行迁移,降低了运维成本。降低了运维成本。降低了运维成本。

【技术实现步骤摘要】
数据库分库分表扩容方法、装置及计算机可读存储介质


[0001]本申请涉及计算机
,具体而言,本申请涉及一种数据库分库分表扩容方法、装置及计算机可读存储介质。

技术介绍

[0002]随着业务快速发展,许多公司的数据库中的数据量会猛增,访问性能也会变慢,优化迫在眉睫。关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。以MySQL数据库为例,当单表的数据量达到1000万条或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就需要借助数据库拆分技术解决性能问题。
[0003]当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、水平拆分。其中水平拆分可以通过只分表、只分库、分库分表三种方式实现,而分库分表是采用的较多的一种实现方式。举例来说,对于数据库db(后文称为db库),对其采用分库分表:将db库拆分为db_0和db_1两个库,db_0中包含user_0、user_1两个分表,db_1中包含user_2、user_3两个分表。假设db库的user(用户)表中原来有4000万条数据,现在将db库拆分为2个分库db_0和db_1,user表拆分为user_0、user_1、user_2、user_3四个分表,每个分表存储1000万条数据。
[0004]在进行分库分表后,后期还有可能需要对分库分表进一步进行扩容,但是按照目前分库分表在数据存储时的路由策略,扩容需要对扩容前的分库分表数据进行重新分片,进而需要停机对扩容前的数据进行迁移,带来运维成本高的问题。

技术实现思路

[0005]本申请的目的旨在至少能解决上述的技术缺陷之一,本申请实施例所提供的技术方案如下:
[0006]第一方面,本申请实施例提供了一种数据库分库分表扩容方法,包括:
[0007]获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;
[0008]当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;
[0009]当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
[0010]在本申请的一种可选实施例中,基于各路由字段构建第一待选路由字段集合,包
括:
[0011]将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
[0012]在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
[0013]其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
[0014]在本申请的一种可选实施例中,基于数据的分片ID将各数据存储至对应的数据表中,包括:
[0015]基于数据的分片ID中的路由字段,获取对应的分库标识和分表标识;
[0016]基于分库标识和分表标识,确定数据所要存储至的数据表,并将数据的识别字段作为数据的主键值与数据对应存储在所要存储至的数据表中。
[0017]在本申请的一种可选实施例中,将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,包括:
[0018]在扩容后,获取数据库中所有数据表的剩余容量;
[0019]基于各数据表的剩余容量,将新的数据表对应的路由字段加入第一待选路由字段集合,以使第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
[0020]在本申请的一种可选实施例中,该方法还包括:
[0021]在扩容后,当数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低,并将第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第三待选路由字段集合生成数据的分片ID;
[0022]其中,第二预设数据量小于第一预设数据量。
[0023]在本申请的一种可选实施例中,该方法还包括:
[0024]在扩容后,当数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从第二待选路由字段集合中删除第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第四待选路由字段集合生成数据的分片ID;
[0025]其中,第三预设数据量大于第一预设数据量。
[0026]第二方面,本申请实施例提供了一种数据库分库分表扩容装置,包括:
[0027]第一待选路由字段集合获取模块,用于获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;
[0028]数据存储模块,用于当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;
[0029]第二待选路由字段集合获取模块,用于当数据库中的各数据表存储的数据量都不
小于第一预设数量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
[0030]在本申请的第一种可选实施例中,第一待选路由字段集合获取模块具体用于:
[0031]将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
[0032]在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
[0033]其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
[0034]在本申请的一种可选实施例中,数据存储模块具体用于:
[0035]基于数据的分片ID中的路由字段,获取对应的分库标识和分表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库分库分表扩容方法,其特征在于,包括:获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将所述第一待选路由字段集合发送至各业务端;当有业务端产生数据时,获取所述数据的分片身份标识ID,并基于所述数据的分片ID将各数据存储至对应的数据表中,所述分片ID包括识别字段和路由字段,所述路由字段为每一数据产生时对应的业务端从所述第一待选路由字段集合中获得;当所述数据库中的各数据表存储的数据量都不小于第一预设数据量时,对所述数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入所述第一待选路由字段集合得到第二待选路由字段集合,并将所述第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于所述第二待选路由字段集合生成所述数据的分片ID。2.根据权利要求1所述的方法,其特征在于,所述基于各路由字段构建第一待选路由字段集合,包括:将各数据表对应的路由字段等比例加入所述第一待选路由字段集合,以使所述第一待选路由字段集合中各路由字段的数量相等。3.根据权利要求1所述的方法,其特征在于,所述识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;其中,所述时间字段用于指示所述数据的产生时间,所述IP字段用于指示产生所述数据的业务端的IP,所述序列字段用于指示所述数据在同一产生时间和IP下的序号。4.根据权利要求1所述的方法,其特征在于,所述基于所述数据的分片ID将各数据存储至对应的数据表中,包括:基于所述数据的分片ID中的路由字段,获取对应的分库标识和所述分表标识;基于所述分库标识和所述分表标识,确定所述数据所要存储至的数据表,并将所述数据的识别字段作为所述数据的主键值与所述数据对应存储在所述所要存储至的数据表中。5.根据权利要求1所述的方法,其特征在于,所述将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入所述第一待选路由字段集合得到第二待选路由字段集合,包括:在扩容后,获取所述数据库中所有数据表的剩余容量;基于各数据表的剩余容量,将所述新的数据表对应的路由字段加入所述第一待选路由字段集合,以使所述第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。6.根据权利要求1所述的方法,其特征在于,所...

【专利技术属性】
技术研发人员:张杰
申请(专利权)人:湖南亚信安慧科技有限公司
类型:发明
国别省市:

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

1