分库分表之sharding-jdbc

Posted 源码架构圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分库分表之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的主要内容,如果未能解决你的问题,请参考以下文章

浅谈高性能数据库集群之分库分表

Mysql之分库分表及中间件

分库分表之Mycat实现

架构之数据库分表分库

分库分表之sharding-jdbc

MySQL分库分表之MyCat实现