CN112905601A - 一种数据库分表的路由方法及装置 - Google Patents
一种数据库分表的路由方法及装置 Download PDFInfo
- Publication number
- CN112905601A CN112905601A CN202110312972.4A CN202110312972A CN112905601A CN 112905601 A CN112905601 A CN 112905601A CN 202110312972 A CN202110312972 A CN 202110312972A CN 112905601 A CN112905601 A CN 112905601A
- Authority
- CN
- China
- Prior art keywords
- sub
- access request
- database access
- rule
- database
- 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
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000012545 processing Methods 0.000 claims description 22
- 238000011161 development Methods 0.000 abstract description 9
- 230000004048 modification Effects 0.000 abstract description 6
- 238000012986 modification Methods 0.000 abstract description 6
- 238000004364 calculation method Methods 0.000 description 27
- 238000004422 calculation algorithm Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 13
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 239000012634 fragment Substances 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000013506 data mapping Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache 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)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库分表的路由方法及装置,包括:分布式应用根据第一数据库访问请求中访问表的第一表名,确定第一表名对应的分表规则记录,其中,分表规则记录用于指示总表进行分表的分表规则,根据分表规则记录,确定第一数据库访问请求对应的目标分表,根据第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库其中,第二数据库访问请求中访问表为第二表名,第二表名为目标分表的表名。确定目标分表减少了开发人员对于底层逻辑的修改,降低人力资源,生成第二数据库访问请求减少了开发成本,提升了数据库分表的路由方法的扩展性和灵活性,分布式应用执行上述方法,减少了中间代理层的性能损耗。
Description
技术领域
本发明涉及金融科技(Fintech)领域,尤其涉及一种数据库分表的路由方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,数据库技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对数据库技术提出的更高的要求。
现有技术中,为了减小数据库的负担,缩短访问请求时间,将总表按照一定的规则进行拆分,分解成多张具有独立存储空间的分表,以使在获取到用户发送的访问请求时,根据指定的算法,路由到访问请求对应的分表,以提升数据库访问性能。
其中,分表包括两种方式,水平分表和垂直分表。针对于水平分表,目前常用的方式是基于Spring中的AbstractRoutingDataSource方法,该方法需要引入分表索引字段,通过对分表索引字段添加对应的占位符后缀_${shardingTableIndex}进行分表,通过这种方式确定出访问请求对应的目标分表,再根据目标分表中预设的各执行指令实现访问请求的任务。其中,分表索引字段为总表确定多个分表的依据。
然而,在另一种应用场景的分表情况中,如分表索引字段发生了变化,则需要对分表涉及的底层代码进行修改,如根据新的分表索引字段确定目标分表的指令(如重新设置占位符)以及为新的各分表设置访问请求的各执行指令,从而实现在另一种应用场景的分表情况中,完成访问请求的任务。因此,在切换应用场景的分表情况下,现有技术的方法扩展性差,灵活性低。
因此,现需要一种数据库分表的路由方法,实现无需在不同分表的应用场景下修改底层代码而实现访问请求的任务,从而增加路由方法的扩展性和灵活性。
发明内容
本发明实施例提供一种数据库分表的路由方法及装置,用于实现增加路由方法的扩展性和灵活性,且减少中间层的性能损耗。
第一方面,本发明实施例提供一种数据库分表的路由方法,包括:
分布式应用根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录;所述分表规则记录用于指示总表进行分表的分表规则;
所述分布式应用根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述分布式应用根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库;所述第二数据库访问请求中访问表为第二表名,所述第二表名为所述目标分表的表名。
上述技术方案中,确定目标分表是根据分表规则记录中指示的总表进行分表的分表规则确定的,并不会去修改确定分表的底层代码,以减少开发人员对于底层逻辑的修改,降低人力资源,提升确定目标分表的效率。
针对访问请求对应的执行指令,第二数据库访问请求是根据第一数据库访问请求和目标分表生成的,通过将第二数据库访问请求的第二表名确定为目标分表的表名,以实现第二数据库访问请求作为访问请求对应的执行指令,在切换分表场景时,无需再人为的设置各分表的执行指令,减少了开发成本,提升了数据库分表的路由方法的扩展性和灵活性。
确定目标分表的方法和确定第二数据库访问请求的方法均是在分布式应用中处理的,不会占用数据库和中间代理层的资源,减少中间代理层的性能损耗。
可选的,所述分布式应用根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用确定所述第一数据库访问请求对应的路由策略;
所述分布式应用确定所述第一数据库访问请求中针对所述分表规则记录中的分表字段的分表值;
所述分布式应用根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表。
上述技术方案中,确定第一数据库访问请求对应的目标分表是根据分表值确定的,而分表值是根据分表字段计算得到的,因此在分表字段发生变化时,只需要更改确定分表值的算法,即可得到针对分表字段的分表值,其中,确定分表值的算法是根据逻辑代码编程得到的,如C++等,并不是底层代码,因此在不需要修改确定分表的底层代码基础上可以确定出目标分表,减少了开发人员对于底层逻辑的修改,降低了人力资源。且确定分表值的算法可以是预设的,增加了确定目标分表的灵活性,降低了确定目标分表的复杂程度。
可选的,所述分布式应用确定所述第一数据库访问请求对应的路由策略,包括:
所述分布式应用根据所述第一数据库访问请求中的访问字段,确定所述第一数据库访问请求对应的第一路由策略或第二路由策略;所述第一路由策略是针对所述访问字段中存在不属于所述分表规则记录中的总表的字段;所述第二路由策略是针对所述访问字段均为所述分表规则记录中的总表的字段;或所述分布式应用根据所述分表规则记录中的冷热分表规则,确定所述第一数据库访问请求对应的第三路由策略。
上述技术方案中,路由策略可以根据访问字段来进行决策,无需只根据分表字段进行配置路由策略,实现参数化的路由,提升了配置路由策略的灵活性,且对冷热分表的配置,增加了冷热分表使用的灵活性。
可选的,所述分布式应用根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用根据第一分表规则和所述分表值,确定所述第一数据库访问请求对应的第一分表;所述第一分表规则是根据所述分表字段进行分表的;
所述分布式应用确定所述分表规则中不包括针对所述第一分表的第二分表规则,则所述第一分表为所述第一数据库访问请求对应的目标分表;
所述分布式应用确定所述分表规则中包括针对所述第一分表的第二分表规则,则根据所述第三路由策略确定第二分表;所述第二分表为所述第一数据库访问请求对应的目标分表;其中,所述第二分表规则是根据冷热访问历史进行分表的。
上述技术方案中,因为分表规则中包括针对第一分表的第二分表规则,所述可以将第一分表分为冷表和热表,再根据第三路由策略确定第二分表(冷表和/或热表)作为第一数据库访问请求对应的目标分表,以此实现了对冷热分表的配置,增加了冷热分表使用的灵活性。
可选的,根据所述第一数据库访问请求生成第二数据库访问请求并执行所述第二数据库访问请求,包括:
所述分布式应用将所述目标分表对应的所述第二表名缓存;
所述分布式应用确定所述第一数据库访问请求中各元信息;
所述分布式应用将所述各元信息中的访问表改为所述第二表名,并根据修改后的各元信息构建所述第二数据库访问请求。
上述技术方案中,将目标分表对应的第二表名缓存,不在中间件进行计算,减少中间件的性能损耗,然后确定一数据库访问请求中各元信息(增、改、删或查的指令元信息),根据元信息,结合第二表名得到第二数据库访问请求,以此实现在分表字段发生变化时,不需要人为的针对分表的底层代码进行修改而完成访问请求的任务,从而增加路由方法的扩展性和灵活性。
可选的,根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用通过第一拦截器实现根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述分布式应用根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库,包括:
所述分布式应用通过第二拦截器实现根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库。
上述技术方案中,第一拦截器和第二拦截器均在分布式应用执行,即在本地应用执行,并非在数据库中或中间代理层中执行,以此减少中间代理层的性能损耗和降低占用数据库的资源,减少了访问请求的时间,提升了访问请求的效率。
可选的,所述第一拦截器为Mapper拦截器;
所述第二拦截器为MyBatis的插件拦截器。
上述技术方案中,Mapper拦截器中的方法可以进行预处理,统一第一数据库访问请求的数据标准,便于开发人员的开发接入和使用,MyBatis的插件拦截器用于拦截第一数据库访问请求的增删改查操作,并根据增删改查操作生成对应的第二数据库访问请求,不更改执行指令的底层代码,避免因开发人员个性化开发而引起底层代码复杂度的上升。
第二方面,本发明实施例提供一种数据库分表的路由装置,包括:
第一处理模块,用于根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录;所述分表规则记录用于指示总表进行分表的分表规则;
根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
第二处理模块,用于根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库;所述第二数据库访问请求中访问表为第二表名,所述第二表名为所述目标分表的表名。
可选的,所述第一处理模块具体用于:
确定所述第一数据库访问请求对应的路由策略;
确定所述第一数据库访问请求中针对所述分表规则记录中的分表字段的分表值;
根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表。
可选的,所述第一处理模块具体用于:
根据所述第一数据库访问请求中的访问字段,确定所述第一数据库访问请求对应的第一路由策略或第二路由策略;所述第一路由策略是针对所述访问字段中存在不属于所述分表规则记录中的总表的字段;所述第二路由策略是针对所述访问字段均为所述分表规则记录中的总表的字段;或根据所述分表规则记录中的冷热分表规则,确定所述第一数据库访问请求对应的第三路由策略。
可选的,所述第一处理模块具体用于:
根据第一分表规则和所述分表值,确定所述第一数据库访问请求对应的第一分表;所述第一分表规则是根据所述分表字段进行分表的;
确定所述分表规则中不包括针对所述第一分表的第二分表规则,则所述第一分表为所述第一数据库访问请求对应的目标分表;
确定所述分表规则中包括针对所述第一分表的第二分表规则,则根据所述第三路由策略确定第二分表;所述第二分表为所述第一数据库访问请求对应的目标分表;其中,所述第二分表规则是根据冷热访问历史进行分表的。
可选的,所述第二处理模块具体用于:
将所述目标分表对应的所述第二表名缓存;
确定所述第一数据库访问请求中各元信息;
将所述各元信息中的访问表改为所述第二表名,并根据修改后的各元信息构建所述第二数据库访问请求。
可选的,所述第一处理模块具体用于:
通过第一拦截器实现根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述第二处理模块具体用于:
通过第二拦截器实现根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库。
可选的,所述第一拦截器为Mapper拦截器;
所述第二拦截器为MyBatis的插件拦截器。
第三方面,本发明实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述数据库分表的路由方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述数据库分表的路由方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种开源的分布式数据库系统示意图;
图2为本发明实施例提供的一种系统架构示意图;
图3为本发明实施例提供的一种数据库分表的路由方法的流程示意图;
图4本发明实施例提供的一种数据库分表的路由方法的流程示意图;
图5本发明实施例提供的一种数据库分表的路由装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
现有技术中,数据库分表路由的方法一般是通过开源的分布式数据库系统进行实现。
举例来说,图1示例性的示出了一种开源的分布式数据库系统示意图,如图1所示,MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,相当于数据库代理,MyCat的前端用于获取客户端(也可以叫做分布式应用)的访问请求等,MyCat的后端用于根据MySQL原生协议与多个MySQL服务器通信,也可以根据JDBC协议与大多数的数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为多个小表,存储在MySQL服务器里或者其他数据库里。
其中,分表指的是将一个数据大表按照一定的规则进行拆分,分片成多张具有独立存储空间的数据分表,以使用户进行访问请求的时候,根据指定的算法,访问到不同的分表,通过将大表的数据分散至多个分表中,减少了大表的访问压力,提升了数据库访问性能。分表的目的就在于此,减小数据库的负担,缩短查询时间。
分表包括水平分表和垂直分表两种方式,本发明是针对数据库水平分表的路由方法。
其中,水平分表指的是把大表的数据按一定规则拆到多个表中,每个表结构(如字段)相同,例如,将下述表1根据姓氏进行分表,可以分为两张表,即姓氏为“赵”和姓氏为“钱”的两张表,但这两张表中包括的字段相同,均包括姓名、年龄和性别。
垂直分片指将大表按照字段分成多表,每个分表存储其中一部分字段,例如,将下述表1根据字段(姓名、年龄和性别)进行分表,可以分为三张表,即字段为“姓名”、字段为“年龄”和字段为“性别”的三张表。
表1
姓名 | 年龄 | 性别 |
赵三 | 15 | 男 |
钱二 | 10 | 女 |
赵五 | 12 | 男 |
MyCat属于中间件方案,应用于分布式应用和MySQL服务器的之间,相当于分布式应用和数据库的之间搭起的中间代理层,分布式应用以标准的MySQL协议来连接中间代理层MyCat,然后中间代理层MyCat负责确定出访问请求对应的分表,然后确定访问请求的执行指令并转发执行指令至底层的MySQL服务器。
但在上述路由方法中,MyCat作为一个单点,所有的访问请求都需要MyCat来确定出访问请求的执行指令,在分表较多,且访问请求较多时,MyCat的CPU性能压力就会随之增大,造成了性能上的损耗,即便在开发上做特性扩展,仍不便于做参数化的路由方法以及冷热分表切换的方法等。
针对水平分表的场景中,目前是基于Spring中的AbstractRoutingDataSource方法来实现路由任务。其中,AbstractRoutingDataSource是一个带路由功能的数据源,在获取数据源时,依据指定的分表规则,确定对应的分表,以此确定出分表对应的执行指令。
结合下述底层代码进行举例说明:
a、INSERT INTO`t_order_${shardingTableIndex}`(order_id,user_id,status);
VALUES(#{orderId},#{userId},#{status});
基于Spring中的AbstractRoutingDataSource方法,引入分表索引字段shardingTable Index,在MyBatis的可扩展标记语言Mapper.xml配置上添加分表索引字段对应的占位符。
底层代码解释为:在表t_order_${shardingTableIndex}的三个字段(order_id、user_id、status)中对应的添加值({orderId}、{userId}和{status})。
b、INSERT INTO`t_order_02`(order_id,user_id,status);
VALUES(#{orderId},#{userId},#{status});
调用MyBatis的Mapper方法时,根据分片规则,将Order指定的占位符shardingTable Index设置为02,AbstractRoutingDataSource在确定数据源时解析SQL。
底层代码解释为:在表t_order_02的三个字段(order_id、user_id、status)中对应的添加值({orderId}、{userId}和{status})。其中,02为表t_order的分表。
然而,在现有技术中,分表规则与分表索引字段息息相关,若分表规则发生了变化,如在一种应用场景中,用户表是根据姓氏进行分表的,在另一种应用场景中,用户表是根据年龄进行分表的。
因此,若分表规则发生了变化,则分表索引字段也会发生变化,此时,需要将分表涉及的底层代码进行修改,即对占位符进行修改,将占位符修改至与分表索引字段相对应。
若不再使用分表进行路由,仅对总表进行路由,则需要将分表涉及的底层代码进行修改,以使底层代码不再包括占位符,从而完成在仅对总表进行路由的场景下的访问请求的任务。例如下述指令:
INSERT INTO`t_order`(order_id,user_id,status);
VALUES(#{orderId},#{userId},#{status});
底层代码解释为:在表t_order的三个字段(order_id、user_id、status)中对应的添加值({orderId}、{userId}和{status})。其中,t_order表为总表。
另外,根据分表的不同,分表设置访问请求的各执行指令也需要进行相对应,例如,在一种应用场景的分表情况中,总表分为两张表,t1和t2,则针对t1和t2,需要分别设置一套对应的执行指令,如一套为针对t1分表的增改删查执行指令,另一套为针对t2分表的增改删查执行指令。在另一种应用场景的分表情况中,总表分为三张表,r1、r2和r3,则针对r1、r2和r3,仍然需要分别设置一套对应的执行指令。
因此,现有技术的路由方法扩展性差,灵活性低,且浪费开发资源和人力资源。
综上,现需要一种数据库分表的路由方法,实现无需在不同分表的应用场景下修改底层代码而实现访问请求的任务,从而增加路由方法的扩展性和灵活性。
图2示例性的示出了本发明实施例所适用的一种系统架构,该系统架构包括分布式应用210、中间代理层220和数据库230。
其中,分布式应用210包括多个,如分布式应用1、分布式应用2和分布式应用3,本发明示例中分布式应用包括但不限于三个,在此不做具体的数量限定。用于确定第一数据库访问请求对应的目标分表,并根据第一数据库访问请求和目标分表确定出第二数据库访问请求。
中间代理层220,用于传输第二数据库访问请求至数据库230。
数据库230,用于接收中间代理层220发送的第二数据库访问请求,并执行第二数据库访问请求。
需要说明的是,上述图2所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图3示例性的示出了本发明实施例提供的一种数据库分表的路由方法的流程示意图,该流程可由数据库分表的路由装置执行。
如图3所示,该流程具体包括:
步骤310,分布式应用根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录。
本发明实施例中,分表规则记录用于指示总表进行分表的分表规则,分表规则记录中包括分表规则记录的基础名称,基础名称与访问表的第一表名相对应,即总表的表名。分表规则记录可以预先缓存在全局程序集缓存中,以提升对配置表的访问性能。
步骤320,所述分布式应用根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表。
本发明实施例中,分布式应用根据分表规则记录中的分表字段、分表数量等信息确定出第一数据库访问请求对应的目标分表。
步骤330,所述分布式应用根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库。
本发明实施例中,第二数据库访问请求用于指示数据库执行第二数据库访问请求,路由到第二数据库访问请求中访问表,其中,第二数据库访问请求中访问表为第二表名,第二表名为目标分表的表名。
在步骤310中,在根据第一数据库访问请求中访问表的第一表名,确定第一表名对应的分表规则记录之前,获取用户输入的访问请求,确定出第一数据库访问请求,根据第一数据库访问请求中访问表的第一表名,匹配全局程序集缓存中分表规则记录的基础名称,确定出第一表名对应的分表规则记录。
其中,分表规则记录包括基础名称、分表字段、分表数量和分表规则名称,如下述表2所示。
表2
字段名 | 类型 | 是否为空 | 主键 | 备注 |
table_name | varchar(50) | NO | PRI | 基础表名 |
shard_column | varchar(50) | YES | 分表字段 | |
table_count | int(5) | NO | 分表数量 | |
routing_bean | varchar(30) | NO | 分表规则名称 |
如上述表2所示的一种分表规则记录,其中,基础表名与访问数据库的第一表名一一对应,如名称相同等对应方式,第一表名和基础表名一般为总表的表名,相当于第一表名和基础表名与总表的表名也存在对应关系,以在确定出第一数据库访问请求之后,根据第一数据库访问请求中访问表的第一表名来匹配基础表名,确定对应的分表规则记录,得到总表的分表规则。
与现有技术相比,无需通过是否添加占位符的方式来区分对总表下的分表执行访问请求或对总表执行访问请求。
如上述表2所示的一种分表规则记录,其中,分表字段用于指示总表进行分表的依据,例如,上述表1为用户表,通过“姓氏”进行水平分表可以得到两张分表,“姓氏”便为分表字段,分表字段的值分别为“赵”和“钱”,具体用于确定述第一数据库访问请求的分片值,以确定第一数据库访问请求的目标分表。
如上述表2所示的一种分表规则记录,其中,分表数量指示总表进行分表后,分表的总数量,例如表2中“int(5)”,其根据一个整数类型来表示分表数量,“int(5)”中具体配置的“(5)”为分表数量,如该分表数量为5,用于参与确定第一数据库访问请求的目标分表的计算。
如上述表2所示的一种分表规则记录,其中,分表规则名称用于表明总表进行分表的计算方法和/或计算规则的名称,例如,分表字段为日期,则计算方法可以是日期算法和/或预设的其他算法,分表规则名称还用于表明总表进行分表时,是否存在冷热分表规则,即是否将总表分为了冷分表和热分表,或将总表下的分表分为了冷表和热表。
举例来说,下述表3示例性的示出了一种分表规则记录,其中,包括两条分表规则记录。
表3
table_name | shard_column | table_count | routing_bean |
t_order | txn_date | 31 | orderDetlPartRouter |
t_account | Account_no | 8 | acctPartRouter |
具体的,结合上述表2,其中一条分表规则记录的基础表名为t_order,分表字段是交易日期txn_date,分表数量为31,具体确定分表的算法为实现类orderDetlPartRouter(即分表规则名称),其中实现类orderDetlPartRouter中包括总表(t_order)分成31个分表的计算方法和/或计算规则的名称,还包括总表(t_order)是否存在冷热分表规则。
另一条分表规则记录的基础表名为t_account,分表字段是银行账号Account_no,分表数量为87,具体确定分表的算法为实现类acctPartRouter(即分表规则名称),其中实现类acctPartRouter(即分表规则名称)中包括总表(t_account)分成8个分表的计算方法和/或计算规则的名称,还包括总表(t_account)是否存在冷热分表规则。
需要说明的,针对同一总表,可以根据分表字段、分表数量和/或分表规则名称确定不同的分表规则记录,例如总表名称为P,根据分表字段的不同,可以根据总表P为基础,确定出两条分表规则记录,包括分表规则记录P1和P2,其中,P1和P2是分表规则记录的基础表名。重要的,上述两条分表规则记录仅作为示例,并不做具体限定。
在步骤320中,确定第一数据库访问请求对应的目标分表,具体是分布式应用确定第一数据库访问请求对应的路由策略,确定第一数据库访问请求中针对分表规则记录中的分表字段的分表值,根据分表规则记录中的分表规则、分表值和/或路由策略,确定第一数据库访问请求对应的目标分表。
在一种可实施的方式中,路由策略可以根据分表规则记录中的冷热分表规则进行划分,例如,在确定分表规则记录中存在冷热分表规则时,确定路由策略为冷热策略,在确定分表规则记录中不存在冷热分表规则时,确定路由策略为普通策略。
在另一种可实施的方式中,路由策略除了可以根据冷热分表规则进行划分,还可以根据访问请求中的访问字段进行划分,具体的,分布式应用根据第一数据库访问请求中的访问字段,确定第一数据库访问请求对应的第一路由策略或第二路由策略,其中,第一路由策略是针对访问字段中存在不属于分表规则记录中的总表的字段,第二路由策略是针对访问字段均为分表规则记录中的总表的字段。或根据分表规则记录中的冷热分表规则,确定第一数据库访问请求对应的第三路由策略。
本发明实施例中,第一路由策略相当于是在确定访问字段中包括非分表规则记录中的总表字段时确定的,第二路由策略相当于是在确定访问字段均为分表规则记录中的总表字段时确定的。且每一个路由策略可以设置对应的接口来实现,接口中可以包括总表进行分表的预设计算方法或计算规则的具体内容和名称,即与分表规则记录中的分表规则名称相对应。
举例来说,分表规则记录中还包括了总表字段,如上述表1,总表共包括3个总表字段,为“姓名”、“年龄”和“性别”。因为本发明针对水平分表的应用场景,因此,总表字段与分表字段相同。
具体的,在确定访问字段包括非总表字段时,确定访问请求的路由接口为第一路由接口,其中,第一路由接口中包括第一路由策略和预设计算方法和/或计算规则的具体内容和名称。
结合上述表1,例如,访问字段为“出生日期”,确定“出生日期”并非为总表字段,从而确定访问请求的路由接口为RoutableArgument接口,RoutableArgument接口包括了getIntendedShardValue()方法,getIntendedShardValue()方法包括访问请求针对分表字段的分表值计算方法和根据分表值确定目标分表的计算规则。
在确定访问字段均为总表字段时,确定访问请求的路由接口为第二路由接口,其中,第二路由接口中包括第二路由策略和预设计算方法或计算规则的具体内容和名称。
结合上述表1,例如,访问字段为“年龄”,确定“年龄”为总表字段,从而确定访问请求的路由接口为ShardingTableRouter接口,ShardingTableRouter接口包括了getTargetTableName()方法,getTargetTableName()方法包括访问请求针对分表字段的分表值计算方法和根据分表值确定目标分表的计算规则。
第三路由策略中,包括自定义的执行规则,执行规则可以在对应的路由接口中预先设置。例如,在确定分表规则记录中存在冷热分表规则时,确定访问请求的路由接口为SwitchTableRouter接口,SwitchTableRouter接口可以包括getColdTableName()方法和getHotTableName()方法,其中,getColdTableName()方法用于获取冷分表的表名,getHotTableName()方法用于获取热分表的表名。SwitchTableRouter接口还可以设置为一种方法,用于识别并获取冷分表和热分表的表名。
在本发明实施例中,在一种可实施的方式中,可以根据用户输入的访问请求的参数信息直接确定出目标分表,例如,分表规则记录的分表规则为用户的出生年份规则,即用户表进行分表的规则是出生年份,如2000年出生的用户为一个分表,2001年出生的用户为另一个分表,类似的,每一个年份对应一个分表,用户的输入的访问请求为“王**,2000年10月10日,查询身份证号”,则直接根据2000年确定出目标分表。
在另一种可实施的方式中,目标分表是根据第一数据库访问请求的分表值确定的,因此,在确定第一数据库访问请求的目标分表之前,需要先确定出第一数据库访问请求的分表值,具体的,第一数据库访问请求的分表值可以根据用户输入的访问请求的参数信息进行确定。
例如,如上述表1所示,用户表根据姓氏进行分表,分为了“赵姓氏”表和“钱姓氏”表,用户输入的访问请求为“赵三,查询性别”,则“赵”相当于第一数据库访问请求的分片值。
又如,如上述表1所示,用户表根据“姓别”进行分表,分为了“男”表和“女”表,用户输入的访问请求为“女,查询钱二的年龄”,则“女”相当于第一数据库访问请求的分片值。
本发明实施例中,在确定出第一数据库访问请求分表值之后,根据分表值确定出第一数据库访问请求的目标分表。具体的,分布式应用根据第一分表规则和分表值,确定第一数据库访问请求对应的第一分表,其中,第一分表规则是根据分表字段进行分表的。
若确定分表规则中不包括针对第一分表的第二分表规则,则第一分表为第一数据库访问请求对应的目标分表,若确定分表规则中包括针对第一分表的第二分表规则,则根据第三路由策略确定第二分表,第二分表为第一数据库访问请求对应的目标分表,其中,第二分表规则是根据冷热访问历史进行分表的。
在一种可实施的方式中,通过确定的分表值直接确定出第一数据库访问请求对应的第一分表。例如,再根据姓氏进行分表的规则下,根据百家姓的顺序规则对姓氏进行预设序号,且预设的序号与分表的序号相对应,如“赵”姓氏对应序号1,对应序号为1的分表,或直接将姓氏与分表的名称相对应,如“赵”姓氏对应“赵”分表。需要说明的是,第一分表为总表进行分表后的任一分表。
在另一种可实施的方式中,根据分表规则记录中的进行分表的计算方法和/或计算规则,确定第一数据库访问请求对应的第一分表。具体的,根据确定的分表值,将分表值按照针对分表规则记录中的分表字段预设扩展方法,将分表值进行转换,转换为预设格式的相对分表值,再根据相对分表值和/或分表数量等信息确定出第一数据库访问请求对应的第一分表。
例如,计算方法和/或计算规则为HASH规则。
假设物品表的存储是根据哈希表的规则存储的,哈希表是根据物品的类型进行存储的,如,物品的类型包括体育用品、电子设备和洗漱用品,体育用品存储在哈希表的3、6、9的位置,电子设备存储在哈希表的1、4、7的位置,洗漱用品存储在哈希表的2、5、8的位置。
物品表进行分表的规则为物品的类型,即根据物品的类型将物品表分为三个表,包括表1(体育用品表)、表2(电子设备表)和表3(生活用品表),第一数据库访问请求为“**手机,**型号,查询生产日期”,则“**手机”为物品的类型,即为访问请求的分片值,然后将“**手机”转换为相对分片值“a”,以“a”作为键,得到哈希表中对应的值为4,再与分表数量(分表数量为3)进行取模(模为1),再将得到的模的绝对值加1,得到分表序号(分表序号为2),根据分表序号确定第一分表为表2(电子设备表)。
其中,哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码值映射到表中一个位置来访问记录。
又如,计算方法和/或计算规则为日期规则。
假设用户表的分表规则为出生日期中的月份,相当于将用户表分为了12个分表,第一数据库访问请求为“2012年7月7日,查询性别为男的用户”,则2012年7月7日为访问请求的分片值,根据日期规则,将分片值(2012年7月7日)转换为预设格式(yyyymmdd,其中yyyy指年份,mm指月份,dd指日期)的相对分片值(20120707),解析出其中的月份(07),确定出分表序号为07,然后根据分表序号确定第一分表。
在又一种可实施的方式中,针对第一数据库访问请求,根据预设的反射机制确定出第一数据库访问请求的分片值,进而再根据路由接口中,与分表规则记录的分表规则名称相匹配的计算方法和/或计算规则确定出第一分表。
例如,用户表的分表规则为出生日期中的月份,相当于将用户表分为了12个分表,第一数据库访问请求为““身份证号码”,查询性别为男的用户”,通过预设的反射机制,在用户输入的“身份证号码”中解析出对应的日期,进而进行上述规则,完成访问请求任务。
在本发明实施例中,分布式应用在确定出第一分表之后,若分表规则记录中的分表规则中存在第二分表规则,则根据第二分表规则,确定第二分表,作为第一数据库访问请求对应的目标分表。其中,第二分表规则为冷热分表规则,第二分表相当于第一分表下的冷分表和热分表。
第二分表规则以包括“增”、“改”、“删”和“查”四种类型的规则,具体规则如下:
增加类型规则:只增加在热分表“指令为insert(Selective)”、只增加在冷分表,先增加在热分表再增加在冷分表等规则。
修改类型规则:对热分表和冷分表一起进行修改更新“指令为updateByPk(Selective)(WithBLOBs)”、只对热分表进行修改更新、只对冷分表进行修改更新等规则。
删除类型规则:在热分表和冷分表中一起删除“指令为deleteByPk”、只在热分表中删除、或只在冷分表中删除等规则。
查询类型规则:先在热分表中查询,查不到再在冷分表中查询,“指令为selectByPk(WithLock)(WithBLOBs)”、在热分表和冷分表中一起查询,再合并,“指令为selectByCondition”、或只在热分表中查询等规则。
例如,确定出第一数据库访问请求的第一分表为分表R,分表R包括热分表R1和冷分表R2,根据上述第二分表规则,将热分表R1和/或冷分表R2作为第一数据库访问请求目标分表。
需要说明的是,若总表在进行分表时,只根据数据的冷热访问历史进行分表,分为了冷分表和热分表,则可以直接执行第三路由策略中的第二分表规则,不再通过第一路由策略和第二路由策略的方法确定第一数据库访问请求的第一分表。
在步骤330中,在得到第一数据库访问请求的目标分表之后,结合目标分表的第二表名和第一数据库访问请求中各元信息确定出执行第一数据库访问请求的第二数据库访问请求。
具体的,分布式应用将目标分表对应的第二表名缓存,确定第一数据库访问请求中各元信息,将各元信息中的访问表改为第二表名,并根据修改后的各元信息构建第二数据库访问请求。
本发明实施例中,在一种可实施的方式中,对目标分表对应的第二表名进行缓存可以通过复制的技术手段进行缓存。在另一种可实施的方式中,根据线程本地变量ThreadLocal进行缓存,以实现方法线程级别的隔离,减少数据库和中间代理层的资源消耗。
本发明实施例中,确定第一数据库访问请求中各元信息是根据语法处理器进行解析的,如语法处理器为“StatementHandler”,具体方法为:分离整条第一数据库访问请求的语法指令,借助MyBatis提供的SystemMetaObject工具类来进行获取最后一层的h以及target属性的值,最终获取目标类,得到元信息,如含有SQL元信息的对象BoundSql。
在得到元信息后,得到第一数据库访问请求的指令字符串,如SQL字符串,进而分析语法指令,如包括Select、Insert、Update、Delete等SQL操作类型,然后将第一数据库访问请求的语法指令中的表名修改为第二表名,进而得到针对第一数据库访问请求的第二数据库访问请求。
在确定出第二数据库访问请求之后,将第二数据库访问请求发送至数据库,数据库执行第二数据库访问请求,完成第一数据库访问请求的任务。
需要说明的是,在完成第一数据库访问请求的任务之后,释放线程本地变量ThreadLocal的资源,减少资源浪费。
在本发明实施例中,上述步骤中的方法是根据对应的拦截器做的。
进一步地,分布式应用通过第一拦截器实现根据所述分表规则记录,确定第一数据库访问请求对应的目标分表,通过第二拦截器实现根据第一数据库访问请求生成第二数据库访问请求并将第二数据库访问请求发送至数据库,以指示数据库执行第二数据库访问请求。
其中,第一拦截器为Mapper拦截器,第二拦截器为MyBatis的插件拦截器。
需要说明的是,第一拦截器和第二拦截器中的方法是经过预处理的方法,例如,通过第三方组件mybatis-generator对第一拦截器和第二拦截器中的方法进行预处理,得到Mapper方法中的增(insert*)、删(delete*)、改(update*)和查(select*)的操作。具体如下述操作所示:
新增操作:insert、insert By、insert Selective等。
更新操作:update、update By Pk、update By Pk Selective等。
查询操作:select By Pk、select By Condition、select By Pk With Lock、count By Condition等。
删除操作:delete By Pk、delete By Condition等。
通过预处理,是操作方法的标准统一,避免因开发人员个性化开发而引起底层代码复杂度的上升。
本发明实施例中,确定目标分表不再需要设置占位符,增加切换分表场景和非分表场景的平滑性,通过将第二数据库访问请求的第二表名确定为目标分表的表名,以实现第二数据库访问请求作为访问请求对应的执行指令,在切换分表场景时,无需再人为的设置各分表的执行指令,减少了开发成本,提升了数据库分表的路由方法的扩展性和灵活性。且确定目标分表的方法和确定第二数据库访问请求的方法均是在分布式应用中处理的,不会占用数据库和中间代理层的资源,减少中间代理层的性能损耗。
为了更好的解释上述技术方案,图4示例性的示出了一种数据库分表的路由方法的流程图,如图4所示。
步骤410,获取第一数据库访问请求。
调用第一拦截器,获取第一数据库访问请求,然后根据第一数据库访问请求中访问表的第一表名,匹配第一表名对应的分表规则记录,进而确定出第一数据库访问请求对应的分表规则记录。其中,分表规则记录存储在全局程序集缓存中,全局程序集缓存中的分表规则记录是数据库加载进去的。
例如,获取的第一数据库访问请求为“在用户表R中查询赵**的电话号码”,其中。“用户表R”为访问表的第一表名,确定出基础表名为“用户表R”的分表规则记录。
步骤420,根据匹配的分表规则记录确定路由策略。
根据匹配的分表规则记录确定第一数据库访问请求的路由策略,从而确定出第一数据库访问请求的分片值。
结合上一步骤410进行举例,例如,分表规则记录指示的分表规则为用户的姓氏规则,根据访问字段(“电话号码”)确定路由策略以及分表规则记录中是否存在冷热分表规则,再根据分表字段(“赵”)确定出第一数据库访问请求的分片值。
步骤430,根据路由算法确定目标分表。
根据确定出的第一数据库访问请求的分片值、分表规则记录中的分表规则名称和路由策略中分表规则名称对应的路由算法确定第一数据库访问请求的目标分表。
结合上一步骤420进行举例,例如,根据分表规则记录中的分表规则名称(如上述步骤320中的HASH规则),确定路由策略中的路由算法为HASH规则算法,再根据第一数据库访问请求的分片值b,确定第一数据库访问请求的分表为R1。再根据分表规则记录中存在的冷热分表规则,将第一数据库访问请求目标分表确定为分表R1的热分表R1`。
步骤440,生成第二数据库访问请求。
调用第二拦截方法,将确定的目标分表进行缓存,并解析第一数据库访问请求的执行指令的操作类型,然后将第一数据库访问请求的执行指令中的表名修改为目标分表的表名,进而生成第二数据库访问请求。
结合上一步骤430进行举例,例如,将热分表R1`的表名缓存至线程本地变量,解析第一数据库访问请求的操作指令类型为查询指令,如select_(电话号码)form_(R),然后第一数据库访问请求的执行指令中的表名(R)修改为目标分表的表名(R1`),进而生成第二数据库访问请求为“在分表R1的热分表R1`中查询赵**的电话号码”,如select_(电话号码)form_(R1`)。
步骤450,执行第二数据库访问请求。
数据库在接收到第二数据库访问请求之后,执行第二数据库访问请求,并将对应的结果发送至分布式应用。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种数据库分表的路由装置的结构示意图,该装置可以执行数据库分表的路由方法的流程。
如图5所示,该装置具体包括:
第一处理模块510,用于根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录;所述分表规则记录用于指示总表进行分表的分表规则;
根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
第二处理模块520,用于根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库;所述第二数据库访问请求中访问表为第二表名,所述第二表名为所述目标分表的表名。
可选的,所述第一处理模块510具体用于:
确定所述第一数据库访问请求对应的路由策略;
确定所述第一数据库访问请求中针对所述分表规则记录中的分表字段的分表值;
根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表。
可选的,所述第一处理模块510具体用于:
根据所述第一数据库访问请求中的访问字段,确定所述第一数据库访问请求对应的第一路由策略或第二路由策略;所述第一路由策略是针对所述访问字段中存在不属于所述分表规则记录中的总表的字段;所述第二路由策略是针对所述访问字段均为所述分表规则记录中的总表的字段;或根据所述分表规则记录中的冷热分表规则,确定所述第一数据库访问请求对应的第三路由策略。
可选的,所述第一处理模块510具体用于:
根据第一分表规则和所述分表值,确定所述第一数据库访问请求对应的第一分表;所述第一分表规则是根据所述分表字段进行分表的;
确定所述分表规则中不包括针对所述第一分表的第二分表规则,则所述第一分表为所述第一数据库访问请求对应的目标分表;
确定所述分表规则中包括针对所述第一分表的第二分表规则,则根据所述第三路由策略确定第二分表;所述第二分表为所述第一数据库访问请求对应的目标分表;其中,所述第二分表规则是根据冷热访问历史进行分表的。
可选的,所述第二处理模块520具体用于:
将所述目标分表对应的所述第二表名缓存;
确定所述第一数据库访问请求中各元信息;
将所述各元信息中的访问表改为所述第二表名,并根据修改后的各元信息构建所述第二数据库访问请求。
可选的,所述第一处理模块510具体用于:
通过第一拦截器实现根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述第二处理模块520具体用于:
通过第二拦截器实现根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库。
可选的,所述第一拦截器为Mapper拦截器;
所述第二拦截器为MyBatis的插件拦截器。
基于相同的技术构思,本发明实施例还提供一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述数据库分表的路由方法。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述数据库分表的路由方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种数据库分表的路由方法,其特征在于,包括:
分布式应用根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录;所述分表规则记录用于指示总表进行分表的分表规则;
所述分布式应用根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述分布式应用根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库;所述第二数据库访问请求中访问表为第二表名,所述第二表名为所述目标分表的表名。
2.如权利要求1所述的方法,其特征在于,所述分布式应用根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用确定所述第一数据库访问请求对应的路由策略;
所述分布式应用确定所述第一数据库访问请求中针对所述分表规则记录中的分表字段的分表值;
所述分布式应用根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表。
3.如权利要求2所述的方法,其特征在于,所述分布式应用确定所述第一数据库访问请求对应的路由策略,包括:
所述分布式应用根据所述第一数据库访问请求中的访问字段,确定所述第一数据库访问请求对应的第一路由策略或第二路由策略;所述第一路由策略是针对所述访问字段中存在不属于所述分表规则记录中的总表的字段;所述第二路由策略是针对所述访问字段均为所述分表规则记录中的总表的字段;或
所述分布式应用根据所述分表规则记录中的冷热分表规则,确定所述第一数据库访问请求对应的第三路由策略。
4.如权利要求2所述的方法,其特征在于,所述分布式应用根据所述分表规则记录中的分表规则、所述分表值和/或所述路由策略,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用根据第一分表规则和所述分表值,确定所述第一数据库访问请求对应的第一分表;所述第一分表规则是根据所述分表字段进行分表的;
所述分布式应用确定所述分表规则中不包括针对所述第一分表的第二分表规则,则所述第一分表为所述第一数据库访问请求对应的目标分表;
所述分布式应用确定所述分表规则中包括针对所述第一分表的第二分表规则,则根据所述第三路由策略确定第二分表;所述第二分表为所述第一数据库访问请求对应的目标分表;其中,所述第二分表规则是根据冷热访问历史进行分表的。
5.如权利要求1至4中任一项所述的方法,其特征在于,根据所述第一数据库访问请求生成第二数据库访问请求,包括:
所述分布式应用将所述目标分表对应的所述第二表名缓存;
所述分布式应用确定所述第一数据库访问请求中各元信息;
所述分布式应用将所述各元信息中的访问表改为所述第二表名,并根据修改后的各元信息构建所述第二数据库访问请求。
6.如权利要求1至4中任一项所述的方法,其特征在于,根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表,包括:
所述分布式应用通过第一拦截器实现根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
所述分布式应用根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库,包括:
所述分布式应用通过第二拦截器实现根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库。
7.如权利要求6所述的方法,其特征在于,所述第一拦截器为Mapper拦截器;
所述第二拦截器为MyBatis的插件拦截器。
8.一种数据库分表的路由装置,其特征在于,包括:
第一处理模块,用于根据第一数据库访问请求中访问表的第一表名,确定所述第一表名对应的分表规则记录;所述分表规则记录用于指示总表进行分表的分表规则;
根据所述分表规则记录,确定所述第一数据库访问请求对应的目标分表;
第二处理模块,用于根据所述第一数据库访问请求生成第二数据库访问请求并将所述第二数据库访问请求发送至数据库,以指示数据库执行所述第二数据库访问请求;所述第二数据库访问请求中访问表为第二表名,所述第二表名为所述目标分表的表名。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110312972.4A CN112905601A (zh) | 2021-03-24 | 2021-03-24 | 一种数据库分表的路由方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110312972.4A CN112905601A (zh) | 2021-03-24 | 2021-03-24 | 一种数据库分表的路由方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112905601A true CN112905601A (zh) | 2021-06-04 |
Family
ID=76106709
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110312972.4A Pending CN112905601A (zh) | 2021-03-24 | 2021-03-24 | 一种数据库分表的路由方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112905601A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254522A (zh) * | 2021-06-18 | 2021-08-13 | 深圳追一科技有限公司 | 一种数据库访问方法、装置、设备及可读存储介质 |
-
2021
- 2021-03-24 CN CN202110312972.4A patent/CN112905601A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254522A (zh) * | 2021-06-18 | 2021-08-13 | 深圳追一科技有限公司 | 一种数据库访问方法、装置、设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220067025A1 (en) | Ordering transaction requests in a distributed database according to an independently assigned sequence | |
CN111902810B (zh) | 中心化和去中心化的数据的混合云链管理 | |
US7376656B2 (en) | System and method for providing user defined aggregates in a database system | |
US8200684B2 (en) | Method and system for dynamic templatized query language in software | |
CN108536705B (zh) | 数据库系统中对象的编码及运算方法与数据库服务器 | |
US8868595B2 (en) | Enhanced control to users to populate a cache in a database system | |
US11176044B2 (en) | Systems and methods for implementing overlapping data caching for object application program interfaces | |
CN110633378A (zh) | 一种支持超大规模关系网络的图数据库构建方法 | |
US8954488B2 (en) | Extensibility for web based diagram visualization | |
CN111966692A (zh) | 针对数据仓库的数据处理方法、介质、装置和计算设备 | |
US20230334046A1 (en) | Obtaining inferences to perform access requests at a non-relational database system | |
US10956386B2 (en) | Methods and apparatuses for automated performance tuning of a data modeling platform | |
CN112905601A (zh) | 一种数据库分表的路由方法及装置 | |
US11556540B1 (en) | Transmission format cache for database reads | |
CN102193982B (zh) | 图形数据库联机事务中查询数据的控制方法 | |
CN113449005B (zh) | 账户管理方法及装置 | |
US20240126763A1 (en) | Extending database data with intended usage information | |
US10176269B1 (en) | Cross-references in service schema | |
CN102193980B (zh) | 图形数据库非联机事务中插入数据的控制方法 | |
WO2024081050A1 (en) | Extending database data with intended usage information | |
CN115062044A (zh) | 一种数据查询方法、装置、设备及存储介质 | |
Ottinger et al. | Batch Processing and Native SQL |
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 |