Skip to content

TiDB — 系統架構

分析版本

本文件基於 commit 6f4dd4fd 進行分析。

相關章節

專案目錄結構

TiDB 主要目錄及其用途如下:

目錄說明
pkg/核心套件,包含 parser、planner、executor、session、server 等所有主要邏輯
cmd/可執行檔入口,包含 tidb-server 與各種工具 binary
br/Backup & Restore 子專案,分散式備份與還原工具
lightning/TiDB Lightning 資料匯入工具子專案
dumpling/Dumpling 資料匯出工具子專案
build/建置腳本與工具
tools/開發輔助工具(ut 測試執行器、xprog 等)
tests/整合測試與系統測試
docs/開發者文件
hooks/Git hooks 腳本

TiDB Server 內部架構

TiDB Server 是整個系統的 SQL 引擎,負責解析 MySQL 協定、解析 SQL、優化查詢並分發執行計劃。

TiDB Server 內部架構

cmd/ 可執行檔一覽

目錄Binary 名稱說明
cmd/tidb-servertidb-serverTiDB 主伺服器程式(MySQL 協定監聽、SQL 執行引擎)
cmd/benchdbbenchdb資料庫層級效能基準測試工具
cmd/benchkvbenchkvKV 層級效能基準測試工具
cmd/benchrawbenchraw原始 KV 讀寫效能基準測試工具
cmd/ddltestddltestDDL 壓力測試工具
cmd/importerimporter資料匯入輔助工具
cmd/mirrormirror鏡像輔助工具
cmd/pluginpkgpluginpkgPlugin 套件打包工具

pkg/ 主要套件一覽

套件功能說明
pkg/parserSQL 語法解析器(yacc/goyacc 生成,內建 AST 定義)
pkg/planner查詢優化器(邏輯計劃、物理計劃、代價估算)
pkg/planner/core核心優化規則與物理計劃選擇
pkg/planner/cardinality基數估算,統計資訊驅動
pkg/planner/cascadesCascades 優化框架實作
pkg/executorSQL 執行引擎(火山模型,各算子實作)
pkg/ddlDDL 非同步執行框架(online schema change)
pkg/sessionSession 管理、事務協調
pkg/store儲存引擎抽象層(TiKV / unistore 本地模式)
pkg/statistics統計資訊收集與維護(直方圖、TopN、CM-Sketch)
pkg/serverMySQL 協定伺服器(連線處理、封包解析)
pkg/infoschemaInformation Schema 實作(in-memory 快取)
pkg/domainDomain 物件(DDL Owner 選舉、schema 載入)
pkg/expression表達式求值框架(函數庫、向量化)
pkg/kvKV 抽象介面(Transaction、Snapshot、Iter)
pkg/meta元資料 KV 編碼(table/index/database 鍵值佈局)
pkg/privilege權限管理(MySQL 相容的 GRANT/REVOKE)
pkg/metricsPrometheus 指標、Grafana Dashboard 定義
pkg/lightningTiDB Lightning 核心匯入邏輯(physical import mode)
pkg/ttlTTL(Time-To-Live)資料自動過期刪除
pkg/resourcegroupResource Group 資源管控(TiDB 7.x+)
pkg/autoid_service分散式 Auto-Increment ID 服務
pkg/bindinfoSQL Binding(SQL Plan Management)
pkg/disttask分散式任務框架
pkg/ownerOwner 選舉(DDL Owner 等分散式角色選舉)
pkg/util通用工具函式庫

儲存層設計

TiKV — 行式儲存

TiKV 是 TiDB 的主要 OLTP 儲存引擎,以 Rust 編寫,採用以下設計:

概念說明
Region資料分片單位,預設大小 96MB,由 Raft 組管理
Raft 組每個 Region 有 3 個副本,組成獨立的 Raft 組
Leader / FollowerRaft Leader 負責讀寫,Follower 同步資料
RocksDB底層儲存引擎,Region 資料以 SST 檔案存放
Coprocessor下推計算框架,TiDB 可將過濾/聚合下推至 TiKV
Percolator 2PC分散式交易協定,以 TiKV 儲存鎖與版本資訊
MVCC多版本並行控制,以時間戳區分資料版本

TiFlash — 列式儲存

TiFlash 以 C++ 編寫,使用 ClickHouse 列式引擎:

特性說明
同步機制Multi-Raft Learner:以只讀副本方式加入 TiKV Raft 組,非同步複製資料
資料格式列式儲存(Delta Tree 結構),針對 OLAP 掃描優化
MPP 計算支援多節點 MPP(Massively Parallel Processing)查詢
一致性Snapshot Isolation,與 TiKV 保持最終一致

典型 SQL 查詢執行序列

典型 SQL 查詢執行序列

建置工具鏈

工具用途
go build主要編譯工具
bazelABI 驗證、授權標頭檢查
golangci-lint綜合靜態分析
reviveGo 程式碼規範 linter
gofmt程式碼格式化
tools/bin/ut自訂單元測試執行器
errdoc-gen錯誤碼文件產生器

基於 Apache 2.0 授權