# SQL 读写相关模块

![center](./student-guide/diagram/02-SQL-Reading-and-writing-related-modules-01-01.png)
-------------------------------------------------------------
- Executor 模块
  - 将按照 Compile 生成的树状结构执行计划开始执行，每一层调用下一层的方法获得结果。

- DistSQL 模块
  - 为了避免复杂的逻辑与 SQL 层耦合在一起，TiDB 抽象了一个统一的分布式查询接口层，DistSQL 模块。
      DistSQL 模块是位于 TiDB Server 和 Coprocessor 之间的一层抽象，它把下层的 Coprocessor 请求封装起来对上层提供一个简单的 Select 方法。执行一个单表的计算任务。最上层的 SQL 语句可能会包含 JOIN，SUBQUERY 等复杂算子，涉及很多的表，而 DistSQL 只涉及到单个表的数据。一个 DistSQL 请求会涉及到多个 Region，我们要对涉及到的每一个 Region 执行一次 Coprocessor 请求。

- TiKV Client 模块
  - 主要负责向 TiKV 模块发送读写请求，分为两种，第一种为 raw KV request，为简单的获取单行数据的请求，例如，按照主键索引或者唯一索引进行的等值查询等等。第二种为 Coprocessor request，需要将计算也下推到 TiKV 的 Coprocessor 框架中，比如，过滤，聚合或列投影等等。

- Transaction 模块
  - 事务的处理主要在此模块完成，包括二阶段提交、悲观锁/乐观锁的管理等。

- KV 模块
  - 包括所有和事务相关的到 TiKV 的请求由此 KV 模块完成，例如，kv get 和 batch get。

- PD Client 模块
  - 所有和 PD 相关的请求由此模块负责。














