# `TiDB Server`

__*TiDB Server功能*__

+ 处理客户端的连接
+ SQL 语句的解析和编译
+ 关系型数据与 `KV` 的转化
+ SQL 语句的执行
+ 执行在线 `DDL`
+ 垃圾回收

![`smart`](./student-guide/diagram/TiDBServerSimple_aa_001_20220506.png)
-------------------------------------------------------------
在接下来的课程中我们将会详细为大家介绍 `TiDB server` 的主要功能以及实现原理, 这里我们先简要了解下它的各项功能。`TiDB server` 本身只负责 SQL 的计算引擎并不存储数据, 所以 `TiDB server` 是无状态的, 当我们的系统面对大量并发连接的时候, 我们可以通过增加 `TiDB server` 的方式进行负载均衡提升高并发处理能力。

处理客户端的连接
- 用户通过用户名+密码来进行认证, 并为连接的用户赋权, 这些工作主要是 `Protocol Layer` 模块完成的。

SQL 语句的解析和编译
- 监听到 SQL 语句后, `TiDB server` 会进行解析和编译, 在编译的过程中会进行优化, 产生执行计划, 这些工作是由 `Parse`, `Compile` 模块完成的。

关系型数据与 KV 的转化
- 由于数据是按照 `key value` 的形式（KV）存储在 TiKV 上的,所以,关系型数据 (表、索引和行) 和 KV 结构之间存在很大的区别, 如果希望执行 SQL 语句, 必须能够在关系型数据和 KV 存储间相互转换。

SQL 语句的执行
- 按照编译好的执行计划, 分批到 TiKV 上去执行, 数据的读取由 `Executor` 模块和 `DistSQL` 模块完成, 事务相关的操作, 由 `Transaction` 模块和 KV 模块来完成。

在线 DDL 的执行
- TiDB 数据库实现了 DDL 操作不会锁表的功能,由 `schema load` 模块,`worker` 模块和 `start job` 模块来完成。

垃圾回收
- `Garbage Collection` 后台模块负责回收掉已经过期的老版本数据,这部分内容会在 TiKV 课程中讲解。


