Sharding-jdbc执行流程分析

Posted lisin-lee-cooper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sharding-jdbc执行流程分析相关的知识,希望对你有一定的参考价值。

一.流程分析

(1)解析sql,获取片键值,在本例中是order_id
(2)Sharding-JDBC通过规则配置数据库和表路由规则 t_order_$->order_id % 2 + 1,知道了当order_id为偶数时,应该往 t_order_1表插数据,为奇数时,往t_order_2插数据。
(3)于是Sharding-JDBC根据order_id的值改写sql语句,改写后的SQL语句是真实所要执行的SQL语句。
(4)执行改写后的真实sql语句
(5)将所有真正执行sql

绑定表 :

指分片规则一致的主表和子表,避免无效的笛卡尔积运算;
例如: t_order 表和 t_order_item 表,均按照 order_id 分片,绑定表之间的分区 键完全相同,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大 大提升。举例说明,如果SQL为:

二.SQL解析流程

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

SQL路由 => 针对逻辑表的数据操作映射到对数据结点操作的过程,据解析上下文匹配数据库和表的分片策略,并生成路由路径。 对于携带分片键的SQL,根据分片键操作符不同可 以划分为单片路由(分片键的操作符是等号)、多片路由(分片键的操作符是IN)和范围路由(分片键的操作符是 BETWEEN),不携带分片键的SQL则采用广播路由

SQL改写 =>工程师面向逻辑表书写的SQL,并不能够直接在真实的数据库中执行,SQL改写用于将逻辑SQL改写为在真实数据 库中可以正确执行的SQL

SQL执行 =>
内存限制模式:使用此模式的前提是,Sharding-JDBC对一次操作所耗费的数据库连接数量不做限制。 如果实际执行的SQL需要对 某数据库实例中的200张表做操作,则对每张表创建一个新的数据库连接,并通过多线程的方式并发处理,以达成 执行效率最大化。

连接限制模式: 使用此模式的前提是,Sharding-JDBC严格控制对一次操作所耗费的数据库连接数量。 如果实际执行的SQL需要对 某数据库实例中的200张表做操作,那么只会创建唯一的数据库连接,并对其200张表串行处理。 如果一次操作中 的分片散落在不同的数据库,仍然采用多线程处理对不同库的操作,但每个库的每次操作仍然只创建一个唯一的数 据库连接。

内存限制模式适用于OLAP操作,可以通过放宽对数据库连接的限制提升系统吞吐量; 连接限制模式适用于OLTP操 作,OLTP通常带有分片键,会路由到单一的分片,因此严格控制数据库连接,以保证在线系统数据库资源能够被 更多的应用所使用,是明智的选择。

结果归并 :
将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端,称为结果归并。 Sharding-JDBC支持的结果归并从功能上可分为遍历、排序、分组、分页和聚合5种类型,它们是组合而非互斥的 关系

以上是关于Sharding-jdbc执行流程分析的主要内容,如果未能解决你的问题,请参考以下文章

sharding-jdbc(3.0.0)源码解析-insert执行流程分析

图文并茂源码解析MyBatis Sharding-Jdbc SQL语句执行流程详解

sharding-jdbc-core 源码分析

数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 执行

SQL语句的执行流程

python学习之内部执行流程,内部执行流程,编码