Skip to content

ShardingJDBC

Sharding-JDBC 官方文档:https://github.com/apache/shardingsphere

ShardingSphere 提供。

SQL解析

当Sharding-JDBC接受到一条SQL语句时,会陆续执行 SQL解析 => 查询优化 => SQL路由 => SQL改写 => SQL执行=> 结果归并 ,最终返回执行结果。

SQL解析过程分为词法解析和语法解析。 词法解析器用于将SQL拆解为不可再分的原子符号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。 再使用语法解析器将SQL转换为抽象语法树。

供分片使用的解析上下文包含查询选择项(Select Items)、表信息(Table)、分片条件(Sharding Condition)、 自增主键信息(Auto increment Primary Key)、排序信息(Order By)、分组信息(Group By)以及分页信息(Limit、Rownum、Top)。

SQL路由

SQL改写

SQL执行

结果归并

分布式事务

Sharding-JDBC 提供了两种 柔性事务

  • 最大努力送达型 BED :已经实现
  • 事务补偿型 TCC :计划中
最大努力送达型

image-20230212144109161

执行过程有 四种 情况:

  1. 【红线】执行成功
  2. 【棕线】执行失败,同步重试成功
  3. 【粉线】执行失败,同步重试失败,异步重试成功
  4. 【绿线】执行失败,同步重试失败,异步重试失败,事务日志保留

整体成漏斗倒三角,上一个阶段失败,交给下一个阶段重试:

image-20230212144134036

整个过程通过如下 组件 完成:

  • 柔性事务管理器
  • 最大努力送达型柔性事务
  • 最大努力送达型事务监听器
  • 事务日志存储器
  • 最大努力送达型异步作业