本文主要基于 MyCAT 1.6.5 正式版
1. 概述
2. 接收请求,解析 SQL
3. 获得路由结果
4. 获得 MySQL 连接,执行 SQL
5. 响应执行 SQL 结果
6. 其他 :更新 / 删除
1. 概述
本文讲解 【单库单表】查询 所涉及到的代码。
内容和 《MyCAT 源码分析 —— 【单库单表】插入》 超级相似,一方面本身流程基本相同,另外一方面文章结构没拆分好。我们使用 标记差异的逻辑。
交互如下图:
单库单表查询简图
整个过程,MyCAT Server 流程如下:
接收 MySQL Client 请求,解析 SQL。
获得路由结果,进行路由。
获得 MySQL 连接,执行 SQL。
响应执行结果,发送结果给 MySQL Client。
我们逐个步骤分析,一起来看看源码。
2. 接收请求,解析 SQL【单库单表】查询(01主流程)【1 - 2】
接收一条MySQL 命令。在【1】之前,还有请求数据读取、拆成单条 MySQL SQL。
【3】
/// 等 SQL 归属于 ,详细可见:《MySQL协议分析#4.2 客户端命令请求报文(客户端 -> 服务器)》。
【4】
将 二进制数组 解析成 SQL。核心代码如下:
【5】
解析 SQL 类型。核心代码如下:
【6】【7】
解析 Select SQL 类型,分发到对应的逻辑。核心代码如下:
【8】
执行 SQL,详细解析见下文,核心代码如下:
3. 获得路由结果【单库单表】插入(02获取路由)【 1 - 5 】
获得路由主流程。核心代码如下:
【3】第 7 至 16 行 :当 Select SQL 存在路由结果缓存时,直接返回缓存。
【6】第 29 至 32 行 :记录 Select SQL 路由结果到缓存。
路由详细解析,我们另开文章,避免内容过多,影响大家对【插入】流程和逻辑的理解。
4. 获得 MySQL 连接,执行 SQL【单库单表】查询(03执行 SQL)【 1 - 8 】
获得 MySQL 连接。
PhysicalDBNode :物理数据库节点。
PhysicalDatasource :物理数据库数据源。
【 9 - 13 】
发送 SQL 到 MySQL Server,执行 SQL。
5. 响应执行 SQL 结果【单库单表】查询(04执行响应)
核心代码如下:
6. 其他 :更新 / 删除
流程基本和 《MyCAT源码分析:【单库单表】插入》 相同。我们就不另外文章解析。
领取专属 10元无门槛券
私享最新 技术干货