tidb courses: day3

tidb day3

Posted by cslqm on December 13, 2020

读写请求在 TiDB 中的流程

TiDB:负责接受 client 的连接,执行 SQL 解析和优化,生成分布式执行计划。

TiKV:保证数据一致性,raft

PD:存储元数据,leader调度

SQL -> AST(抽象语法树) -> Logical Plan(逻辑执行计划) -> Optimized Logical Plan(优化计划) – 选择实际执行计划 – 分配 TiKV

Read request in TiDB

  1. 客户端和 TiDB 建立连接,发送请求给 TiDB
  2. TiDB 接受连接,获取客户端发送的 SQL
  3. TiDB 对 SQL 文件进行解析,生成 AST 语法树,进行优化
  4. TiDB 和 PD 进行交互,获取 start_ts
  5. TiDB 根据执行计划和 table 的元数据,生成执行器executor
  6. TiDB 通过 gRPC 将 coprocessor request 发送给 TiKV
  7. TiKV 接收请求,过滤数据,返回数据给 TiDB
  8. TiDB 接收所有数据,整理汇总数据
  9. TiDB 将数据返回客户端

Write request in TiDB

  1. 客户端和 TiDB 建立连接,发送请求给 TiDB
  2. TiDB 接受连接,获取客户端发送的 SQL
  3. TiDB 对 SQL 文件进行解析,生成 AST 语法树,进行优化
  4. TiDB 和 PD 进行交互,获取 start_ts
  5. TiDB 根据执行计划和 table 的元数据,生成执行器executor
  6. TiDB 发起 commit request
  7. TiKV 参照 percolator,通过 two-phase commit(两段提交 prewrite/commit)。TiDB 会在 commit(两阶段中 commit) 阶段,请求获取 commit_ts
  8. TiKV 返回结果给 TiDB
  9. TiDB 返回数据给 client

TiDB 使用场景

  • 海量数据
  • 高并发应用场景
  • 正在使用 MySQL 协议的应用
  • 有扩展性要求
  • 多活要求
  • HTAP 需求业务