CN114625716A - 数据库分库分表扩容方法、装置及计算机可读存储介质 - Google Patents
数据库分库分表扩容方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114625716A CN114625716A CN202210066877.5A CN202210066877A CN114625716A CN 114625716 A CN114625716 A CN 114625716A CN 202210066877 A CN202210066877 A CN 202210066877A CN 114625716 A CN114625716 A CN 114625716A
- Authority
- CN
- China
- Prior art keywords
- data
- routing
- database
- field
- field set
- 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
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/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- 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/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例提供了一种数据库分库分表扩容方法、装置及计算机可读存储介质,包括:获取数据库各数据表的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;当有业务端产生数据时,基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括路由字段;当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行容,并将扩容得到的新的数据表的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。该方案使的数据库扩容后无需对扩容前存储的数据进行迁移,降低了运维成本。
Description
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种数据库分库分表扩容方法、装置及计算机可读存储介质。
背景技术
随着业务快速发展,许多公司的数据库中的数据量会猛增,访问性能也会变慢,优化迫在眉睫。关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。以MySQL数据库为例,当单表的数据量达到1000万条或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就需要借助数据库拆分技术解决性能问题。
当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、水平拆分。其中水平拆分可以通过只分表、只分库、分库分表三种方式实现,而分库分表是采用的较多的一种实现方式。举例来说,对于数据库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万条数据。
在进行分库分表后,后期还有可能需要对分库分表进一步进行扩容,但是按照目前分库分表在数据存储时的路由策略,扩容需要对扩容前的分库分表数据进行重新分片,进而需要停机对扩容前的数据进行迁移,带来运维成本高的问题。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,本申请实施例所提供的技术方案如下:
第一方面,本申请实施例提供了一种数据库分库分表扩容方法,包括:
获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;
当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;
当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
在本申请的一种可选实施例中,基于各路由字段构建第一待选路由字段集合,包括:
将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
在本申请的一种可选实施例中,基于数据的分片ID将各数据存储至对应的数据表中,包括:
基于数据的分片ID中的路由字段,获取对应的分库标识和分表标识;
基于分库标识和分表标识,确定数据所要存储至的数据表,并将数据的识别字段作为数据的主键值与数据对应存储在所要存储至的数据表中。
在本申请的一种可选实施例中,将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,包括:
在扩容后,获取数据库中所有数据表的剩余容量;
基于各数据表的剩余容量,将新的数据表对应的路由字段加入第一待选路由字段集合,以使第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
在本申请的一种可选实施例中,该方法还包括:
在扩容后,当数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低,并将第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第三待选路由字段集合生成数据的分片ID;
其中,第二预设数据量小于第一预设数据量。
在本申请的一种可选实施例中,该方法还包括:
在扩容后,当数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从第二待选路由字段集合中删除第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第四待选路由字段集合生成数据的分片ID;
其中,第三预设数据量大于第一预设数据量。
第二方面,本申请实施例提供了一种数据库分库分表扩容装置,包括:
第一待选路由字段集合获取模块,用于获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;
数据存储模块,用于当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;
第二待选路由字段集合获取模块,用于当数据库中的各数据表存储的数据量都不小于第一预设数量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
在本申请的第一种可选实施例中,第一待选路由字段集合获取模块具体用于:
将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
在本申请的一种可选实施例中,数据存储模块具体用于:
基于数据的分片ID中的路由字段,获取对应的分库标识和分表标识;
基于分库标识和分表标识,确定数据所要存储至的数据表,并将数据的识别字段作为数据的主键值与数据对应存储在所要存储至的数据表中。
在本申请的一种可选实施例中,第二待选路由字段集合获取模块具体用于:
在扩容后,获取数据库中所有数据表的剩余容量;
基于各数据表的剩余容量,将新的数据表对应的路由字段加入第一待选路由字段集合,以使第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
在本申请的一种可选实施例中,该装置还包括第一调整模块,用于:
在扩容后,当数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低,并将第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第三待选路由字段集合生成数据的分片ID;
其中,第二预设数据量小于第一预设数据量。
在本申请的一种可选实施例中,该装置还包括第二调整模块,用于:
在扩容后,当数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从第二待选路由字段集合中删除第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第四待选路由字段集合生成数据的分片ID;
其中,第三预设数据量大于第一预设数据量。
第三方面,本申请实施例提供了一种电子设备,包括存储器和处理器;
存储器中存储有计算机程序;
处理器,用于执行计算机程序以实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
第五方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行时实现第一方面实施例或第一方面任一可选实施例中所提供的方法。
本申请提供的技术方案带来的有益效果是:
业务端在产生数据时为数据设置包含有路由字段的分片ID,且路由字段是从中间体提供的路由字段集合中选取的,该路由字段集合中每个路由字段都指示扩容后数据库中的一个分表,因此,在扩容后,中间件根据各业务端产生的数据的分片ID中的路由ID即可直接将数据存储至所需存储的数据表中,使的数据库扩容后无需对扩容前存储的数据进行迁移,降低了运维成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的数据库分库分表扩容方案执行所依赖的系统的架构图;
图2为本申请实施例提供的一种数据库分库分表扩容方法的流程示意图;
图3为本申请实施例提供了一种数据库分库分表扩容装置的结构框图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1为本申请实施例提供的数据库分库分表扩容方案执行所依赖的系统的架构图,该系统可以包括多个业务端101、中间件102以及数据库103,其中,业务端101产生的数据通过中间件102解析后存储至数据库103,同时中间体102还可以对数据库103进行配置,例如,中间体102可以对数据库103进行分库分表操作。在分库分表处理后,数据库103中一般又可以包含有多个分库,每个分库中又可以包含多个分表。中间件102需要对业务端101产生的数据解析出分片ID后,按分片ID的指示路由至数据库中对应的分库分表进行存储。基于此,下文将对本申请实施例提供的数据库分库分表扩容方案进行详细说明。
图2为本申请实施例提供的一种数据库分库分表扩容方法的流程示意图,该方法的执行主体可以是图1所示的中间体,如图2所示,该方法可以包括:
步骤S201,获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端。
其中,数据库中正在使用的数据表即可以存储业务端产生的数据的数据表。
其中,业务端可以是各种应用程序(APP),例如购物类APP,其产生的订单数据即本申请实施例方案中需要存储的数据。
具体地,首先,中间体监控数据库中的数据表,确定哪些数据表还可以继续存储数据。然后,中间体获取这些数据表所在的分库的标识,激活区数据表的分库标识,然后获取这些数据表的分表标识,并将每个数据表的分库标识和分表标识进行组合,及得到了该数据表对应的路由字段。举例来说,数据库中有两个分表db_00和db_01,分库标识分别为00和01,而db_00中包含有两个数据表tb_00和tb_01,分表标识分别为t00和01,那么分表tb_00对应的路由字段即为0000,分表tb_01对应的路由字段即为0001,。
可以理解的是,根据一个数据表的路由字段可以从数据库中唯一确定一个数据表,而业务端的数据的分片ID中都包含有其所要存储指的数据表对应的路由字段,因此中间件可以根据数据的分片ID中的路由字段找到其所要存储至的数据表,进而完成数据存储。
进一步地,为了让业务端产生的数据都能包含有有效的路由字段,中间件会将数据库中各正在使用的数据表对应的路由字段组成的第一待选路由字段集合发送至各业务端,以供各业务端在产生数据后从第一待选路由字段集合中选取所要存储的数据表对应的路由字段。具体来说,中间件可以将第一待选路由字段集合发送至Zookeeper,然后经Zookeeper通知各业务端。
步骤S202,当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得。
具体地,如前一步骤中所描述,中间件预先将第一待选路由字段集合发送至各业务端,各业务端在有数据产生需要生成数据的分片ID时,则除了按照预定规则生成识别字段外,还需要从第一待选路由字段集合中选取其路由字段。其中数据的识别字段可以将数据与其他数据区分开。中间体即可根据各数据的分片ID将各数据存储至对应的数据表中。
步骤S203,当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
具体地,当数据库中各数据表存储的数据量都不小于第一预设数据量的时候,数据库中各数据表的容量都不再充足,因此需要通过扩容获取更多的容量。中间体通过分库分表新增分库和分表后,再将扩容数据库中正在使用的各数据库对应的路由字段构建为第二待选路由字段集合。中间体再将第二待选路由字段集合发送至至各业务端,以供各业务端在产生数据后从第二待选路由字段集合中选取所要存储的数据表对应的路由字段。具体来说,中间件可以将第一待选路由字段集合发送至Zookeeper,然后经Zookeeper通知各业务端。
举例来说,扩容前,数据库包含两个分库db_00,db_01,每个分库里面有10张分表tb_00~tb_09。那么,扩容前业务端产生的数据的路由字段的前两位在00~01之间,后两位则始终在00~09之间。当需要扩容到10个分库,每个分库10个分表。那么中间体首先在数据库中将分库db_02~db_09创建好,每个分库里面再创建10个分表tb_00~tb_09。然后,再将扩容后得到的第二待选路由字段集合发送至各业务端。
可以理解的是,中间体在扩容后将数据库中所有正在使用的数据表对应的路由字段构成的第二路由字段集合发送至各业务端,各业务端在产生数据时从第二路由字段集合中选取路由字段生成数据的分片ID,中间体在将各业务端产生的数据存储至数据库时,可以根据数据的分片ID中的路由字段直接找到所要存储至的数据表,即数据库通过分库分表扩容后无需对原有已经存储的数据进行迁移。
本申请提供的方案,业务端在产生数据时为数据设置包含有路由字段的分片ID,且路由字段是从中间体提供的路由字段集合中选取的,该路由字段集合中每个路由字段都指示扩容后数据库中的一个分表,因此,在扩容后,中间件根据各业务端产生的数据的分片ID中的路由ID即可直接将数据存储至所需存储的数据表中,使的数据库扩容后无需对扩容前存储的数据进行迁移,降低了运维成本。
在本申请的一种可选实施例中,基于各路由字段构建第一待选路由字段集合,包括:
将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
具体地,将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等,是为了保证各业务端在为产生的数据生成分片ID时,选取第一待选路由字段集合中的每个路由字段的概率相等,进而保证能够将各业务系统产生的数据均匀的存储至数据库中的各数据表中,以避免数据热点问题。
在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
举例来说,对于某一数据,对应的业务端为其生成的分片ID可以包括32位,12位时间字段+10位IP字段+6位序列字段+4位路由字段,具体如下:
12位时间字段:格式为yyMMddHHmmss(每两位分别对应年、月、日、时、分、秒),可以把时间字段放在分片ID的最前端,从而保证数据的分片ID趋势递增。
10位IP字段:将各业务端的12位的IP转为10进制数字得到IP字段。
6位序列字段:用于指示数据在同一产生时间和IP下的序号(0~999999)。
4位路由字段:也可称为数据库扩展位,为了实现不迁移数据的情况下,实现动态扩容,其中2位表示分库标识,2位表示分表标识,最多可扩容到10000张表。假设每张表存储1000万条数据,则总共可以支持存储1000亿条数据。当然,路由字段的位数可以根据需求进行设定,例如,可以设置为6位,前三位标识分库标识,后三位标识分表标识。
在本申请的一种可选实施例中,基于数据的分片ID将各数据存储至对应的数据表中,包括:
基于数据的分片ID中的路由字段,获取对应的分库标识和分表标识;
基于分库标识和分表标识,确定数据所要存储至的数据表,并将数据的识别字段作为数据的主键值与数据对应存储在所要存储至的数据表中。
在扩容后,由于新增的数据表中没有存储数据,而之前的数据表已经存储了较多的数据,这时候希望各业务端产生的数据更多的存储至新增的数据表中,为了达到这一目的,需要调整第二待选路由字段集合中各路由字段的比例。
那么,在本申请的一种可选实施例中,将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,包括:
在扩容后,获取数据库中所有数据表的剩余容量;
基于各数据表的剩余容量,将新的数据表对应的路由字段加入第一待选路由字段集合,以使第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
举例来说,假设扩容前,第一待选路由字段集合为{0000,0001},且扩容时,“0000”和“0001”两个路由字段各自对应的数据表的剩余容量都为原始容量的40%,扩容后增加了一个分库,该分库中有一个分表,那么按照上述配置方式,扩容前已有的数据表与新增的数据表的剩余容量的比值为2:2:5,因此,第二待选路由字段集合可以为{0000,0000,0001,0001,0100,0100,0100,0100,0100}。
在本申请的一种可选实施例中,该方法还可以包括:
在扩容后,当数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低,并将第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第三待选路由字段集合生成数据的分片ID;
其中,第二预设数据量小于第一预设数据量。
具体地,在扩容后,不断进行数据存储的过程中,新增的数据表中的数据也越存越多,若新增的某一数据表中的数据量达到第二预设数据量,则可以降低该新增的数据表存储数据的概率,即降低各业务端在生成数据的分片ID是选取该数据表对应的路由字段的概率。那么,可以减少第二待选路由字段集合中该数据表对应路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低。
举例来说,扩容后得到的第二待选路由字段集合为{0000,0000,0001,0001,0100,0100,0100,0100,0100},在存储数据过程中,“0100”对应的数据表的数据量达到了第二预设数据量,那么,可以减少该路由字段,得到第三路由字段集合{0000,0000,0001,0001,0100,0100,0100}。
需要说明的是,前文所述的第一预设数据量和第二数据量都可以根据实际需求进行设定,且要满足第二预设数据量小于第一预设数据量。
在本申请的一种可选实施例中,该方法还可以包括:
在扩容后,当数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从第二待选路由字段集合中删除第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第四待选路由字段集合生成数据的分片ID;
其中,第三预设数据量大于第一预设数据量。
具体地,在扩容后,不断进行数据存储的过程中,数据库中的部分数据表的数据量逼近极限,为了预留一定的容错空间,一般不会让数据表存满。那么,当某一数据表的数据量达到第三预设数据量的时候,则可以不再向该数据表中存储数据,因此,可以将该数据表对应的路由字段从第二待选路由字段集合中删除。
举例来说,扩容后得到的第二待选路由字段集合为{0000,0000,0001,0001,0100,0100,0100,0100,0100},在存储数据过程中,“0000”对应的数据表的数据量达到了第三预设数据量,那么,可以删除该路由字段,得到第三路由字段集合{0001,0001,0100,0100,0100,0100,0100}。
需要说明的是,前文所述的第一预设数据量和第二数据量都可以根据实际需求进行设定,且要满足第三预设数据量大于第一预设数据量。
可以理解的是,每个业务端每次产生数据进行路由字段选取时,都是从一个完整的待选路由字段集合(第一待选路由字段集合、第二待选路由字段集合或第三待选路由字段集合)中随机选取路由字段。举例来说,业务端A产生数据1时,从第二待选路由字段集合为{0000,0000,0001,0001,0100,0100,0100,0100,0100}随机选取路由字段生成数据1的分片ID,业务端A紧接着产生数据2时,中间件没有发来新的待选路由字段集合,因此还是从从第二待选路由字段集合为{0000,0000,0001,0001,0100,0100,0100,0100,0100}随机选取路由字段生成数据2的分片ID。
图3为本申请实施例提供了一种数据库分库分表扩容装置的结构框图,如图3所示,该装置300可以包括:第一待选路由字段集合获取模块301、数据存储模块302和第二待选路由字段集合获取模块,其中:
第一待选路由字段集合获取模块301用于获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;
数据存储模块302用于当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;
第二待选路由字段集合获取模块303用于当数据库中的各数据表存储的数据量都不小于第一预设数量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
本申请提供的方案,业务端在产生数据时为数据设置包含有路由字段的分片ID,且路由字段是从中间体提供的路由字段集合中选取的,该路由字段集合中每个路由字段都指示扩容后数据库中的一个分表,因此,在扩容后,中间件根据各业务端产生的数据的分片ID中的路由ID即可直接将数据存储至所需存储的数据表中,使的数据库扩容后无需对扩容前存储的数据进行迁移,降低了运维成本。
在本申请的第一种可选实施例中,第一待选路由字段集合获取模块具体用于:
将各数据表对应的路由字段等比例加入第一待选路由字段集合,以使第一待选路由字段集合中各路由字段的数量相等。
在本申请的一种可选实施例中,识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
其中,时间字段用于指示数据的产生时间,IP字段用于指示产生数据的业务端的IP,序列字段用于指示数据在同一产生时间和IP下的序号。
在本申请的一种可选实施例中,数据存储模块具体用于:
基于数据的分片ID中的路由字段,获取对应的分库标识和分表标识;
基于分库标识和分表标识,确定数据所要存储至的数据表,并将数据的识别字段作为数据的主键值与数据对应存储在所要存储至的数据表中。
在本申请的一种可选实施例中,第二待选路由字段集合获取模块具体用于:
在扩容后,获取数据库中所有数据表的剩余容量;
基于各数据表的剩余容量,将新的数据表对应的路由字段加入第一待选路由字段集合,以使第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
在本申请的一种可选实施例中,该装置还包括第一调整模块,用于:
在扩容后,当数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中第一目标数据表对应的路由字段的数量占比降低,并将第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第三待选路由字段集合生成数据的分片ID;
其中,第二预设数据量小于第一预设数据量。
在本申请的一种可选实施例中,该装置还包括第二调整模块,用于:
在扩容后,当数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从第二待选路由字段集合中删除第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第四待选路由字段集合生成数据的分片ID;
其中,第三预设数据量大于第一预设数据量。
下面参考图4,其示出了适于用来实现本申请实施例的电子设备(例如执行图2所示方法的终端设备或服务器)400的结构示意图。本申请实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)、可穿戴设备等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图4示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
电子设备包括:存储器以及处理器,存储器用于存储执行上述各个方法实施例所述方法的程序;处理器被配置为执行存储器中存储的程序。其中,这里的处理器可以称为下文所述的处理装置401,存储器可以包括下文中的只读存储器(ROM)402、随机访问存储器(RAM)403以及存储装置408中的至少一项,具体如下所示:
如图4所示,电子设备400可以包括处理装置(例如中央处理器、图形处理器等)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储装置408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM403中,还存储有电子设备400操作所需的各种程序和数据。处理装置401、ROM 402以及RAM403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
通常,以下装置可以连接至I/O接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置408;以及通信装置409。通信装置409可以允许电子设备400与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的电子设备,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置408被安装,或者从ROM 402被安装。在该计算机程序被处理装置401执行时,执行本申请实施例的方法中限定的上述功能。
需要说明的是,本申请上述的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块或单元的名称在某种情况下并不构成对该单元本身的限定,例如,代理链接获取模块还可以被描述为“获取代理链接的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本申请的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的计算机可读介质被电子设备执行时实现的具体方法,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行时实现如下情况:
获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将第一待选路由字段集合发送至各业务端;当有业务端产生数据时,获取数据的分片身份标识ID,并基于数据的分片ID将各数据存储至对应的数据表中,分片ID包括识别字段和路由字段,路由字段为每一数据产生时对应的业务端从第一待选路由字段集合中获得;当数据库中的各数据表存储的数据量都不小于第一预设数据量时,对数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入第一待选路由字段集合得到第二待选路由字段集合,并将第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于第二待选路由字段集合生成数据的分片ID。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种数据库分库分表扩容方法,其特征在于,包括:
获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将所述第一待选路由字段集合发送至各业务端;
当有业务端产生数据时,获取所述数据的分片身份标识ID,并基于所述数据的分片ID将各数据存储至对应的数据表中,所述分片ID包括识别字段和路由字段,所述路由字段为每一数据产生时对应的业务端从所述第一待选路由字段集合中获得;
当所述数据库中的各数据表存储的数据量都不小于第一预设数据量时,对所述数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入所述第一待选路由字段集合得到第二待选路由字段集合,并将所述第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于所述第二待选路由字段集合生成所述数据的分片ID。
2.根据权利要求1所述的方法,其特征在于,所述基于各路由字段构建第一待选路由字段集合,包括:
将各数据表对应的路由字段等比例加入所述第一待选路由字段集合,以使所述第一待选路由字段集合中各路由字段的数量相等。
3.根据权利要求1所述的方法,其特征在于,所述识别字段进一步包括时间字段、互联网协议地址IP字段、序列字段;
其中,所述时间字段用于指示所述数据的产生时间,所述IP字段用于指示产生所述数据的业务端的IP,所述序列字段用于指示所述数据在同一产生时间和IP下的序号。
4.根据权利要求1所述的方法,其特征在于,所述基于所述数据的分片ID将各数据存储至对应的数据表中,包括:
基于所述数据的分片ID中的路由字段,获取对应的分库标识和所述分表标识;
基于所述分库标识和所述分表标识,确定所述数据所要存储至的数据表,并将所述数据的识别字段作为所述数据的主键值与所述数据对应存储在所述所要存储至的数据表中。
5.根据权利要求1所述的方法,其特征在于,所述将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入所述第一待选路由字段集合得到第二待选路由字段集合,包括:
在扩容后,获取所述数据库中所有数据表的剩余容量;
基于各数据表的剩余容量,将所述新的数据表对应的路由字段加入所述第一待选路由字段集合,以使所述第二待选路由字段集合中各路由字段的数量的比值等于各路由字段对应的数据表的剩余容量的比值。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在扩容后,当所述数据库中的所有新的数据表中有第一目标数据表存储的数据量不小于第二预设数据量时,则调整所述第二待选路由字段集合中各路由字段的数量,以使得到的第三待选路由字段集合中所述第一目标数据表对应的路由字段的数量占比降低,并将所述第三待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于所述第三待选路由字段集合生成所述数据的分片ID;
其中,所述第二预设数据量小于所述第一预设数据量。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在扩容后,当所述数据库的所有数据表中有第二目标数据表存储的数据量不小于第三预设数据量时,则从所述第二待选路由字段集合中删除所述第二目标数据表对应的路由字段,得到第四待选路由字段集合,并将所述第四待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于所述第四待选路由字段集合生成所述数据的分片ID;
其中,所述第三预设数据量大于所述第一预设数据量。
8.一种数据库分库分表扩容装置,其特征在于,包括:
第一待选路由字段集合获取模块,用于获取数据库中正在使用的各数据表的分库标识和分表标识组合而成的路由字段,并基于各路由字段构建第一待选路由字段集合,并将所述第一待选路由字段集合发送至各业务端;
数据存储模块,用于当有业务端产生数据时,获取所述数据的分片身份标识ID,并基于所述数据的分片ID将各数据存储至对应的数据表中,所述分片ID包括识别字段和路由字段,所述路由字段为每一数据产生时对应的业务端从所述第一待选路由字段集合中获得;
第二待选路由字段集合获取模块,用于当所述数据库中的各数据表存储的数据量都不小于第一预设数量时,对所述数据库进行分库分表扩容,并将扩容得到的新的数据表的分库标识和分表标识组合得到的路由字段,加入所述第一待选路由字段集合得到第二待选路由字段集合,并将所述第二待选路由字段集合发送至各业务端,以供各业务端产生数据时,基于所述第二待选路由字段集合生成所述数据的分片ID。
9.一种电子设备,其特征在于,包括存储器和处理器;
所述存储器中存储有计算机程序;
所述处理器,用于执行所述计算机程序以实现权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210066877.5A CN114625716A (zh) | 2022-01-20 | 2022-01-20 | 数据库分库分表扩容方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210066877.5A CN114625716A (zh) | 2022-01-20 | 2022-01-20 | 数据库分库分表扩容方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114625716A true CN114625716A (zh) | 2022-06-14 |
Family
ID=81897834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210066877.5A Pending CN114625716A (zh) | 2022-01-20 | 2022-01-20 | 数据库分库分表扩容方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114625716A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431615A (zh) * | 2023-05-19 | 2023-07-14 | 深圳计算科学研究院 | 一种面向复杂业务场景的灵活数据分区路由方法 |
-
2022
- 2022-01-20 CN CN202210066877.5A patent/CN114625716A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116431615A (zh) * | 2023-05-19 | 2023-07-14 | 深圳计算科学研究院 | 一种面向复杂业务场景的灵活数据分区路由方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111581563A (zh) | 页面响应方法、装置、存储介质和电子设备 | |
CN110909521A (zh) | 在线文档信息的同步处理方法、装置及电子设备 | |
US11809429B2 (en) | Method for processing model parameters, and apparatus | |
CN111857720B (zh) | 用户界面状态信息的生成方法、装置、电子设备及介质 | |
CN115168362A (zh) | 数据处理方法、装置、可读介质及电子设备 | |
CN114625716A (zh) | 数据库分库分表扩容方法、装置及计算机可读存储介质 | |
CN111241137A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113485980A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN111262907B (zh) | 服务实例访问方法、装置和电子设备 | |
CN112162987A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN113157695B (zh) | 数据处理方法、装置、可读介质及电子设备 | |
CN111597439A (zh) | 信息处理方法、装置和电子设备 | |
CN114629951A (zh) | 地址服务切换方法、装置、计算机设备和存储介质 | |
CN113971192A (zh) | 数据处理方法、装置、可读介质及电子设备 | |
CN113127550A (zh) | 信息处理方法、装置、电子设备及存储介质 | |
CN112115154A (zh) | 数据处理和数据查询方法、装置、设备和计算机可读介质 | |
CN111782895A (zh) | 检索处理方法、装置、可读介质及电子设备 | |
CN111008178A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
KR20200056909A (ko) | 데이터를 처리하기 위한 방법 및 장치 | |
CN116483808B (zh) | 数据迁移方法、装置、电子设备和计算机可读介质 | |
CN110545108B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN116431523B (zh) | 一种测试数据管理方法、装置、设备及存储介质 | |
CN115374320B (zh) | 文本匹配方法、装置、电子设备、计算机介质 | |
CN115348260B (zh) | 基于校园信息安全的信息处理方法、装置、设备和介质 | |
CN114040014A (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 |