读写请求在 TiDB 中的流程
TiDB:负责接受 client 的连接,执行 SQL 解析和优化,生成分布式执行计划。
TiKV:保证数据一致性,raft
PD:存储元数据,leader调度
SQL -> AST(抽象语法树) -> Logical Plan(逻辑执行计划) -> Optimized Logical Plan(优化计划) – 选择实际执行计划 – 分配 TiKV
Read request in TiDB
- 客户端和 TiDB 建立连接,发送请求给 TiDB
- TiDB 接受连接,获取客户端发送的 SQL
- TiDB 对 SQL 文件进行解析,生成 AST 语法树,进行优化
- TiDB 和 PD 进行交互,获取 start_ts
- TiDB 根据执行计划和 table 的元数据,生成执行器executor
- TiDB 通过 gRPC 将 coprocessor request 发送给 TiKV
- TiKV 接收请求,过滤数据,返回数据给 TiDB
- TiDB 接收所有数据,整理汇总数据
- TiDB 将数据返回客户端
Write request in TiDB
- 客户端和 TiDB 建立连接,发送请求给 TiDB
- TiDB 接受连接,获取客户端发送的 SQL
- TiDB 对 SQL 文件进行解析,生成 AST 语法树,进行优化
- TiDB 和 PD 进行交互,获取 start_ts
- TiDB 根据执行计划和 table 的元数据,生成执行器executor
- TiDB 发起 commit request
- TiKV 参照 percolator,通过 two-phase commit(两段提交 prewrite/commit)。TiDB 会在 commit(两阶段中 commit) 阶段,请求获取 commit_ts
- TiKV 返回结果给 TiDB
- TiDB 返回数据给 client
TiDB 使用场景
- 海量数据
- 高并发应用场景
- 正在使用 MySQL 协议的应用
- 有扩展性要求
- 多活要求
- HTAP 需求业务