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)分页偏移量处理

      1. 普通结果集归并

      2. 聚合结果集归并(累加型、比较型、平均值)

      3. 排序结果集归并

      4. 分组结果集归并(分组、分组排序、分组聚合)

    3) jdbc结果集输出



下一篇:sql路由源码解析

以上是关于Sharding-JDBC分库分表异常排查的主要内容,如果未能解决你的问题,请参考以下文章

数据量大了一定要分表,分库分表Sharding-JDBC入门与项目实战

分库分表之Sharding-JDBC

分库分表Sharding-JDBC入门与项目实战

分库分表sharding-jdbc实践—分库分表入门

分库分表之sharding-jdbc

SpringBoot使用Sharding-JDBC分库分表