# SQL 读写相关模块

![`smart`](./student-guide/diagram/ModulesSupportSQLOperations_aa_002_20220509.png)
-------------------------------------------------------------
下面介绍 SQL 读写相关的线程池模块,至于 SQL 的读取和写入流程,我们会在 《 Lesson 05 TiDB 数据库 SQL 执行流程》 中做详细介绍。这里我们说明相关模块的作用。

1. Executor 模块
将按照 Compile 生成的树状结构执行计划开始执行,每一层调用下一层的方法获得结果。

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

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

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

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

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













