分库分表之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)分页偏移量处理
普通结果集归并
聚合结果集归并(累加型、比较型、平均值)
排序结果集归并
分组结果集归并(分组、分组排序、分组聚合)
3) jdbc结果集输出
下一篇:sql路由源码解析
以上是关于分库分表之sharding-jdbc的主要内容,如果未能解决你的问题,请参考以下文章