掌桥专利:专业的专利平台
掌桥专利
首页

基于MySQL数据库分库分表策略中间件的处理方法和装置

文献发布时间:2024-01-17 01:15:20


基于MySQL数据库分库分表策略中间件的处理方法和装置

技术领域

本发明涉及数据库技术领域,具体涉及基于MySQL数据库分库分表策略中间件的处理方法和装置。

背景技术

随着软件服务时间的增长,系统里面的数据必定会越来越多,接踵而来的问题就是造成数据库瓶颈。系统架构是多应用单数据库时,在高并发场景下,大量请求都需要访问数据库,从而导致数据库连接数不够,造成请求处于阻塞状态。当单表的索引B+树的高度超过3层的时候,MySQL是一个关系型数据库管理系统,MySQL数据库的查询效率会急促下降,一条 SQL语句没有命中索引会全表扫描,导致查询耗时会非常久,甚至会造成数据库宕机,影响系统使用。其中,B+树是一种树数据结构,通常用于数据库和操作系统的文件系统中。

目前,面对数据库数据压力,较为简单的方式就是升级服务器硬件。在前期业务数据量小的时候,升级服务器硬件可以让性能得到提升。当数据量达到千万、亿万级别的时候,升级硬件得到的收益就不明显了,而且总是升级服务器,会造成软件成本高。

当从软件层面优化数据库时,单台数据库实例扛不住,可以增加实例组成集群对外服务。当发现读请求明显多于写请求时,可以让主实例负责写,从实例对外提供读的能力;如果读实例压力依然很大,可以在数据库前面加入缓存,例如 Redis(Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API),让请求优先从缓存取数据,以减少数据库访问。而缓存也只能分担部分压力,且数据缓存的一致性难以得到保障,也会造成Redis压力影响其他功能。也可以进行数据备份,将数据备份到多个历史库,但是这可能会存在数据安全的隐患。在采取上述多种解决方案解决后,数据库依然是瓶颈。当然也有采用分库分表的策略,然后最常见在当前系统进行编码并使用散列函数进行数据切分。这样会造成,当拥有多个系统的时候,每个系统都有相同的路由策略代码,代码的可用率不高。使用一般的散列函数可能会造成数据分布不均匀,大多数的数据分到同一个库,违背分库分表初衷,也没有解决实际问题。

发明内容

基于此,有必要针对现有的方法由于数据库连接数不够所导致的数据请求处于阻塞状态的问题,提供一种基于MySQL数据库分库分表策略中间件的处理方法、装置、存储介质、电子设备和计算机程序产品。

第一方面,本申请实施例提供了一种基于MySQL数据库分库分表策略中间件的处理方法,所述方法包括:

对目标系统业务进行拆分,得到对应的拆分结果,以将所述拆分结果写入至目标配置文件中;

基于读取的所述目标配置文件中的所述拆分结果,设置对应的动态数据源;

基于创建的路由注解类,配置与所述目标系统业务相关的各项关键参数属性,所述目标系统业务相关的各项关键参数至少包括与所述目标系统业务对应的分库分表路由参数,以及与所述目标系统业务对应的全局分库分表参数;

基于创建的路由切面类,对所述路由注解类进行拦截处理,以拦截方法参数;

基于所述分库分表路由参数获取对应的路由参数散列值和对应的库表索引,以将所述库表索引设置到当前线程变量中去;

根据通过创建的目标拦截器接口所读取的所述目标系统业务对应的所述全局配置,确定是否对所述目标系统业务进行分库分表处理;若根据所述全局配置,确定对所述目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果;否则,则不执行分库分表操作。

优选的,所述对目标系统业务进行拆分,包括:

获取所述目标系统业务的目标业务分类,并根据所述目标业务分类进行垂直拆分,得到对应的多个子数据库;以及

对所述目标系统业务进行水平拆分,得到对应的多张子数据表。

优选的,所述基于创建的路由注解类,配置与所述目标系统业务相关的各项关键参数属性,包括:

根据预设方式创建所述路由注解类;

获取与所述目标系统业务相关的各项关键参数;

基于所述路由注解类,配置所述分库分表路由参数对应的第一参数属性,以及

基于所述路由注解类,配置所述全局分库分表参数对应的第二参数属性。

优选的,所述执行对应的分库分表操作,并返回对应的执行结果,包括:

读取所述路由注解类;

获取所述全局分库分表参数中的分表参数;

在所述分表参数不为空的情况下,读取线程变量的分表参数;

通过SQL解析器获取当前SQL语句,并通过反射替换对应的SQL表名;

执行代理方法,并返回对应的执行结果。

优选的,所述基于所述分库分表路由参数获取对应的路由参数散列值和对应的库表索引,包括:

获取用于计算所述路由参数散列值的第一计算模型,以及用于计算所述库表索引的第二计算模型;

基于所述分库分表路由参数和所述第一计算模型,生成所述路由参数散列值;

基于所述分库分表路由参数和所述第二计算模型,生成所述库表索引。

优选的,还包括:

获取与所述目标系统业务相关的项目数据;

获取目标插件,并通过所述目标插件,将所述项目数据编译为对应的具有目标格式的数据表,并将所述数据表推送至私有仓库中。

第二方面,本申请实施例提供了一种基于MySQL数据库分库分表策略中间件的处理装置,所述装置包括:

拆分模块,用于对目标系统业务进行拆分,得到对应的拆分结果,以将所述拆分结果写入至目标配置文件中;

设置模块,用于基于读取的所述目标配置文件中的所述拆分结果,设置对应的动态数据源;

配置模块,用于基于创建的路由注解类,配置与所述目标系统业务相关的各项关键参数属性,所述目标系统业务相关的各项关键参数至少包括与所述目标系统业务对应的分库分表路由参数,以及与所述目标系统业务对应的全局分库分表参数;

拦截模块,用于基于创建的路由切面类,对所述路由注解类进行拦截处理,以拦截方法参数;

获取模块,用于基于所述分库分表路由参数获取对应的路由参数散列值和对应的库表索引,以将所述库表索引设置到当前线程变量中去;

确定模块,用于根据通过创建的目标拦截器接口所读取的所述目标系统业务对应的所述全局配置,确定是否对所述目标系统业务进行分库分表处理;若根据所述全局配置,确定对所述目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果;否则,则不执行分库分表操作。

优选的,所述拆分模块具体用于:

获取所述目标系统业务的目标业务分类,并根据所述目标业务分类进行垂直拆分,得到对应的多个子数据库;以及

对所述目标系统业务进行水平拆分,得到对应的多张子数据表。

第三方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行上述的方法步骤。

第四方面,本申请实施例提供一种电子设备,所述电子设备包括:

处理器;

用于存储所述处理器可执行指令的存储器;

所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述可执行指令以实现上述的方法步骤。

第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述的方法步骤。

在本申请实施例中,基于创建的路由注解类,配置与目标系统业务相关的各项关键参数属性;基于创建的路由切面类,对路由注解类进行拦截处理,以拦截方法参数;基于分库分表路由参数获取对应的路由参数散列值和对应的库表索引,以将库表索引设置到当前线程变量中去;以及根据通过创建的目标拦截器接口所读取的目标系统业务对应的全局配置,确定是否对目标系统业务进行分库分表处理;若根据全局配置,确定对目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果;否则,则不执行分库分表操作。本申请实施例提供的基于MySQL数据库分库分表策略中间件的处理方法,由于对目标系统业务进行拆分,得到对应的拆分结果;以及根据通过创建的目标拦截器接口所读取的目标系统业务对应的全局配置,确定是否对目标系统业务进行分库分表处理;若根据全局配置,确定对目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果。由于能够对大量数据进行分库分表操作,从而有效地避免了因大量数据无法分流所可能导致的数据请求处于阻塞状态的出现。

附图说明

通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。

图1为根据本申请一示例性实施例提供的基于MySQL数据库分库分表策略中间件的处理方法的流程图;

图2为根据本申请一示例性实施例提供的基于MySQL数据库分库分表策略中间件的处理装置200的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。

另外,术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请实施例提供一种基于MySQL数据库分库分表策略中间件的处理方法及装置、一种电子设备以及计算机可读介质,下面结合附图进行说明。

请参考图1,其示出了本申请的一些实施方式所提供的基于MySQL数据库分库分表策略中间件的处理方法的流程图,如图1所示,基于MySQL数据库分库分表策略中间件的处理方法可以包括以下步骤:

步骤S101:对目标系统业务进行拆分,得到对应的拆分结果,以将拆分结果写入至目标配置文件中。

在一种可能的实现方式中,对目标系统业务进行拆分,包括以下步骤:

获取目标系统业务的目标业务分类,并根据目标业务分类进行垂直拆分,得到对应的多个子数据库;以及对目标系统业务进行水平拆分,得到对应的多张子数据表。

在实际应用场景中,通过对目标系统业务依次进行垂直拆分和水平拆分,将不同业务数据落点到不同库,形成专库专用,当单库达到瓶颈时就需要水平拆分,将一张表拆分到多个数据库中。

通过对目标系统业务进行垂直拆分,根据业务分类,具体分多少个库。并进行水平拆分,具体分多少张表,并将拆分结果具体写到配置文件中。

步骤S102:基于读取的目标配置文件中的拆分结果,设置对应的动态数据源。

在实际应用场景中,在对目标系统业务依次进行垂直拆分和水平拆分,完成上述拆分过程后,进行数据源配置。在系统编码时,只需要读取数据源配置,进行实例化创建,创建完成后设置到Dynamic Data Source中。

需要说明的是,Dynamic-Source是baomidou开发的一个用于在Java项目中动态切换数据源的插件,它支持多数据源、AOP切面拦截、动态数据源切换等功能。

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。

步骤S103:基于创建的路由注解类,配置与目标系统业务相关的各项关键参数属性,目标系统业务相关的各项关键参数至少包括与目标系统业务对应的分库分表路由参数,以及与目标系统业务对应的全局分库分表参数。

在一种可能的实现方式中,基于创建的路由注解类,配置与目标系统业务相关的各项关键参数属性,包括以下步骤:

根据预设方式创建路由注解类;

获取与目标系统业务相关的各项关键参数;目标系统业务相关的各项关键参数至少包括与目标系统业务对应的分库分表路由参数,以及与目标系统业务对应的全局分库分表参数;

基于路由注解类,配置分库分表路由参数对应的第一参数属性,以及

基于路由注解类,配置全局分库分表参数对应的第二参数属性。

需要说明的是,预设方式可以为自定义方式,以实现自定义路由注解。从而实现:可自定义路由参数,使用任意字段进行分库分表计算。

步骤S104:基于创建的路由切面类,对路由注解类进行拦截处理,以拦截方法参数;

步骤S105:基于分库分表路由参数获取对应的路由参数散列值和对应的库表索引,以将库表索引设置到当前线程变量中去。

在一种可能的实现方式中,基于分库分表路由参数获取对应的路由参数散列值和对应的库表索引,包括以下步骤:

获取用于计算路由参数散列值的第一计算模型,以及用于计算库表索引的第二计算模型;

基于分库分表路由参数和第一计算模型,生成路由参数散列值;

基于分库分表路由参数和第二计算模型,生成库表索引。

在实际应用场景中,用于计算路由参数散列值的第一计算模型所采用的计算公式可以为如下计算公式;

int hash = (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)。

在实际应用场景中,路由参数算法采用HashMap中散列算法,从而使得数据分布更均匀。

需要说明的是,HashMap是基于哈希表的 Map 接口的实现,是一个用于存储Key-Value键值对象的集合。

用于计算库表索引的第二计算模型所采用的计算公式可以为如下计算公式:

int dbIndex = (tbSize-1) & hash;

int tbIndex = (tbSize-1) & hash。

步骤S106:根据通过创建的目标拦截器接口所读取的目标系统业务对应的全局配置,确定是否对目标系统业务进行分库分表处理;若根据全局配置,确定对目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果;否则,则不执行分库分表操作。

在实际应用场景中,目标拦截器可以为MyBatis拦截器。

需要说明的是,MyBatis是一个基于Java的持久层框架(半自动)。持久层框架就是操作数据库的框架,对之前使用的JDBC代码进行了封装。

在一种可能的实现方式中,执行对应的分库分表操作,并返回对应的执行结果,包括以下步骤:

读取路由注解类;

获取全局分库分表参数中的分表参数;

在分表参数不为空的情况下,读取线程变量的分表参数;

通过SQL解析器获取当前SQL语句,并通过反射替换对应的SQL表名;

执行代理方法,并返回对应的执行结果。

需要说明的是,结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

在一种可能的实现方式中,本申请实施例提供的基于MySQL数据库分库分表策略中间件的处理方法还包括以下步骤:

获取与目标系统业务相关的项目数据;

获取目标插件,并通过目标插件,将项目数据编译为对应的具有目标格式的数据表,并将数据表推送至私有仓库中。

在实际应用场景中,目标插件可以为Maven插件。需要说明的是,Maven是一个项目管理工具,它包含了一个对象模型、一组标准集合、一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标和逻辑。

在实际应用场景中,具有目标格式的数据包可以为Jar包。需要说明的是,Jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。

本申请实施例提供的基于MySQL数据库分库分表策略中间件的处理方法,由于对目标系统业务进行拆分,得到对应的拆分结果;以及根据通过创建的目标拦截器接口所读取的目标系统业务对应的全局配置,确定是否对目标系统业务进行分库分表处理;若根据全局配置,确定对目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果。由于能够对大量数据进行分库分表操作,从而有效地避免了因大量数据无法分流所可能导致的数据请求处于阻塞状态的出现。此外,采用基于MySQL数据库分库分表策略中间件的处理方法,还可以提高代码质量、代码可复用性,不同系统之间使用分库分表操作更简便,缩短开发时间。再者,采用基于MySQL数据库分库分表策略中间件的处理方法,能够有效地提升数据库性能,降低系统崩溃风险。

在上述的实施例中,提供了一种基于MySQL数据库分库分表策略中间件的处理方法,与之相对应的,本申请还提供一种基于MySQL数据库分库分表策略中间件的处理装置。本申请实施例提供的基于MySQL数据库分库分表策略中间件的处理装置可以实施上述基于MySQL数据库分库分表策略中间件的处理方法,该基于MySQL数据库分库分表策略中间件的处理装置可以通过软件、硬件或软硬结合的方式来实现。例如,该基于MySQL数据库分库分表策略中间件的处理装置可以包括集成的或分开的功能模块或单元来执行上述各方法中的对应步骤。

请参考图2,其示出了本申请的一些实施方式所提供的一种基于MySQL数据库分库分表策略中间件的处理装置的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

如图2所示,基于MySQL数据库分库分表策略中间件的处理装置200可以包括:

拆分模块201,用于对目标系统业务进行拆分,得到对应的拆分结果,以将拆分结果写入至目标配置文件中;

设置模块202,用于基于读取的目标配置文件中的拆分结果,设置对应的动态数据源;

配置模块203,用于基于创建的路由注解类,配置与目标系统业务相关的各项关键参数属性,目标系统业务相关的各项关键参数至少包括与目标系统业务对应的分库分表路由参数,以及与目标系统业务对应的全局分库分表参数;

拦截模块204,用于基于创建的路由切面类,对路由注解类进行拦截处理,以拦截方法参数;

获取模块205,用于基于分库分表路由参数获取对应的路由参数散列值和对应的库表索引,以将库表索引设置到当前线程变量中去;

确定模块206,用于根据通过创建的目标拦截器接口所读取的目标系统业务对应的全局配置,确定是否对目标系统业务进行分库分表处理;若根据全局配置,确定对目标系统业务进行分库分表处理,则执行对应的分库分表操作,并返回对应的执行结果;否则,则不执行分库分表操作。

在本申请实施例的一些实施方式中,拆分模块201具体用于:

获取目标系统业务的目标业务分类,并根据目标业务分类进行垂直拆分,得到对应的多个子数据库;以及对目标系统业务进行水平拆分,得到对应的多张子数据表。

在本申请实施例的一些实施方式中,配置模块203具体用于:

根据预设方式创建路由注解类;

获取与目标系统业务相关的各项关键参数;

基于路由注解类,配置分库分表路由参数对应的第一参数属性,以及

基于路由注解类,配置全局分库分表参数对应的第二参数属性。

在本申请实施例的一些实施方式中,确定模块206具体用于:

读取路由注解类;

获取全局分库分表参数中的分表参数;

在分表参数不为空的情况下,读取线程变量的分表参数;

通过SQL解析器获取当前SQL语句,并通过反射替换对应的SQL表名;

执行代理方法,并返回对应的执行结果。

在本申请实施例的一些实施方式中,获取模块205具体用于:

获取用于计算路由参数散列值的第一计算模型,以及用于计算库表索引的第二计算模型;

基于分库分表路由参数和第一计算模型,生成路由参数散列值;

基于分库分表路由参数和第二计算模型,生成库表索引。

在本申请实施例的一些实施方式中,获取模块205还可以用于:

获取与目标系统业务相关的项目数据;以及

获取目标插件;

在本申请实施例的一些实施方式中,基于MySQL数据库分库分表策略中间件的处理装置200还可以包括:

编译模块(在图2中未示出),用于通过目标插件,将项目数据编译为对应的具有目标格式的数据表;

推送模块(在图2中未示出),用于将数据表推送至私有仓库中。

在本申请实施例的一些实施方式中本申请实施例提供的基于MySQL数据库分库分表策略中间件的处理装置200,与本申请前述实施例提供的基于MySQL数据库分库分表策略中间件的处理方法出于相同的发明构思,具有相同的有益效果。

本发明第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质中包括一种基于MySQL数据库分库分表策略中间件的处理方法程序,所述基于MySQL数据库分库分表策略中间件的处理方法程序被处理器执行时,实现如上述任一项所述的一种基于MySQL数据库分库分表策略中间件的处理方法的步骤。

本发明公开的一种基于MySQL数据库分库分表策略中间件的处理方法、系统和可读存储介质,由于能够对大量数据进行分库分表操作,从而有效地避免了因大量数据无法分流所可能导致的数据请求处于阻塞状态的出现。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。

相关技术
  • 一种基于缓存中间件的规范化处理方法及装置
  • 一种基于消息中间件的柔性事务处理方法
  • 一种基于中间件的开票系统、方法及装置与一种存储介质
  • 基于拍摄装置的表情检测装置及数据处理方法
  • 一种基于中间件的分库分表的方法与装置
  • 一种MySQL数据库中间件预处理方法
技术分类

06120116081942