Sharding-JDBC分库分表异常排查
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sharding-JDBC分库分表异常排查相关的知识,希望对你有一定的参考价值。
参考技术A 一、问题描述业务中设计到订单模块的拆分,测试过程中发现同一分库分表的key,其中订单项表的数据没有按照分库分表规则入库。
二、排查
debug分库分表的规则,发现订单项表没有走这里。
(1)排查配置是否错误,发现无错误
(2)debug插入的实体对应的分库分表key是否值为空,发现不为空
(3)业务使用mybatis-plus,去对应的实体查看的时候发现@TableName("xxx_order_item0"),表后面多了个数字0。
三、解决
由于表名配置与分表规则冲突,导致分库规则没有执行,此处具体原因后续补充。
分库分表之sharding-jdbc
有不当之处请多提意见
sharding-jdbc以下简称sj,sj是一个轻量级,以jar包提供服务的client端分库分表中间件,支持分库分表,动态分片规则配置,读写分离,分布式柔性事务,事务这块有点重,这里不介绍了。
业界其他的一些分库分表中间件,如mycat是server端的,比较重,蘑菇街的tsharding,这个是继承了mybatis,等于对mybatis的扩展,定制化了,分片规则也是硬编码的,无法实现配置化,还有阿里开源的TDDL等,还有数据库系统级别的解决方案,如阿里开源cobar,pingCAP开源的TIDB等,这里主要介绍的是应用层实现的sharding-jdbc
sharidng-dbc是对jdbc的再次分装,支持多种数据库,扩展了jdbc的几个接口,如ShardingConnection,ShardingDataSource,ShardingResultSet,ShardingStatement,SharidngPrepareStatement
sj主要分为分片配置、sql解析(sql语法解析)、sql路由、sql执行、结果集归并五个模块
1.分片规则配置
1)groovy闭包形式配置
2)接口实现形式配置
2.sql解析流程
1)识别jdbc驱动
2)sql语法树生成
3)语法树遍历(CRUD,OR)
4)结果集生成
3.sql路由
1)解析结果识别
2)单表路由、binding表路由、笛卡尔积路由
3)sql改写
4)路由结果生成
4.sql执行
1)识别路由结果
2)生成statement集合、生成prepareStatement集合
3)并发执行
4)生成结果集集合
5.结果集归并
1)结果集识别
2)分页偏移量处理
普通结果集归并
聚合结果集归并(累加型、比较型、平均值)
排序结果集归并
分组结果集归并(分组、分组排序、分组聚合)
3) jdbc结果集输出
下一篇:sql路由源码解析
以上是关于Sharding-JDBC分库分表异常排查的主要内容,如果未能解决你的问题,请参考以下文章