初識TiDB

1. 定義

TiDB 是 PingCAP 公司自主設計、研發(fā)的開源分布式關系型數(shù)據(jù)庫

2. 作用

進行混合在線事務處理與在線分析處理 (Hybrid Transactional and Analytical Processing 即 HTAP)

3. 特性

  • 金融級高可用

    數(shù)據(jù)采用多副本存儲,副本數(shù)據(jù)強一致,并在少數(shù)副本同步失敗時不影響多數(shù)副本使用(存儲引擎使用Multi-Raft協(xié)議)

  • 水平擴容、縮容

    可按需對計算(TiDB/TiSpark)、存儲(TiKV、TiFlash)分別進行在線擴容或者縮容(存儲、計算分離的架構的設計)

  • 云原生

    可在公有云、私有云、混合云中實現(xiàn)部署工具化、自動化(提供集群管理工具TiDB Operator)

  • 兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)

    應用無需或者修改少量代碼即可從 MySQL 遷移到 TiDB(兼容 MySQL 5.7 協(xié)議、MySQL 常用的功能、MySQL 生態(tài))

  • 實時HTAP

    TiKV 提供OLTP 服務,TiFlash提供OLAP 服務(提供行存儲引擎 TiKV、列存儲引擎 TiFlash 兩款存儲引擎) TiKV、TiFlash 可按需部署在不同的機器,解決 HTAP 資源隔離的問題。

4.目標

為用戶提供一站式HTAP 解決方案,能力分別為:

  • OLTP (Online Transactional Processing)

  • OLAP (Online Analytical Processing)

5. 適用場景

高可用、強一致要求較高、數(shù)據(jù)規(guī)模中等或較大等各種應用場景

  • 對數(shù)據(jù)一致性及高可靠、系統(tǒng)高可用、可擴展性、容災要求較高的金融行業(yè)屬性的場景

  • 對存儲容量、可擴展性、并發(fā)要求較高的海量數(shù)據(jù)及高并發(fā)的 OLTP 場景

  • Real-time HTAP 場景

  • 數(shù)據(jù)匯聚、二次加工處理的場景

6. 技術架構

TiDB 技術架構
  • TiDB Server: 計算層(計算最大支持 512 節(jié)點,每個節(jié)點最大支持 1000 并發(fā))

    功能:

    • 連接客戶端

    • 實現(xiàn)MySQL 協(xié)議(進行SQL解析、優(yōu)化)

    • 生成分布式SQL 執(zhí)行計劃

    • 數(shù)據(jù)聚合

    特點:

    • 無狀態(tài)(可直接橫向擴展,通過負載均衡組件,如 LVS、HAProxy 或 F5)

    • 不存數(shù)據(jù)(只解析SQL ,將請求轉發(fā)給底層TiKV/TiFlash)

    部署架構:

    • 至少1個實例
  • PD Server:集群元數(shù)據(jù)管理模塊(Placement Driver),

    功能:

    • 存儲集群元數(shù)據(jù):TiKV 節(jié)點數(shù)據(jù)分布情況、集群拓撲結構

    • 提供TiDB Dashboard 管控界面

    • 分配分布式事務ID

    • 集群管理

    • 集群數(shù)據(jù)調度

    特點:

    部署架構:

  • 至少 1個實例

  • 存儲節(jié)點(集群容量最大支持 PB 級別):包括TiKV(默認3副本<由pd配置,可修改>, Leader 負責讀/寫)、TiFlash

    TiKV Server: 行式存儲

    功能:

    • 存儲數(shù)據(jù)

    • 支持OLTP

    • 計算加速(通過協(xié)處理器 Coprocessor,計算請求中不會計算超過一個 Region 的數(shù)據(jù))

    特點:

    • 自動維護多副本,天然支持高可用和故障轉移:利用了Raft協(xié)議的特性

    部署架構:

    • 至少 3個實例

    TiFlash Server: 列式存儲

    功能:

    • 存儲數(shù)據(jù)

    • 支持OLAP (加速)

    特點:

    • 異步復制

    • 一致性

    • 智能選擇

    • 計算加速

    部署架構:

    • 至少 0個實例

7. 組件

1)TiDB Server

TiDB 適合用于中等規(guī)模的 OLAP 計算,而 TiSpark (實驗階段,不適用于生產(chǎn))適合大規(guī)模的 OLAP 計算

1.Database/Table元數(shù)據(jù)管理

  • 每個Database/Table都被分配唯一ID, 編碼為key 時會在前面加上前綴m_ ,將信息序列化作為value 存儲

  • 存儲Database/Table 歷史版本信息

2.表數(shù)據(jù)與Key-Value的映射

包括:

  • 每一行數(shù)據(jù),即表數(shù)據(jù)

  • 所有表索引數(shù)據(jù),即索引數(shù)據(jù)

每個表有一個全局唯一的整形 TableId, 每行數(shù)據(jù)有一個表級唯一 RowId, 每個索引有一個表級IndexId。

前綴編碼:

tablePrefix     = []byte{'t'}
recordPrefixSep = []byte{'r'}
indexPrefixSep  = []byte{'i'}

例表:

CREATE TABLE User {
 ID int,
 Name varchar(20),
 Role varchar(20),
 Age int,
 PRIMARY KEY (ID),
 KEY idxAge (Age)
};

例數(shù)據(jù):

1, "TiDB", "SQL Layer", 10
2, "TiKV", "KV Engine", 20
3, "PD", "Manager", 30

(1)表數(shù)據(jù)映射:

Key:   tablePrefix{TableID}_recordPrefixSep{RowID}
Value: [col1, col2, col3, col4]

例存儲數(shù)據(jù):

t10_r1 --> ["TiDB", "SQL Layer", 10]
t10_r2 --> ["TiKV", "KV Engine", 20]
t10_r3 --> ["PD", "Manager", 30]

(2)索引數(shù)據(jù)映射:

  • 唯一索引:
Key:   tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue
Value: RowID
  • 非唯一索引:
Key:   tablePrefix{TableID}_indexPrefixSep{IndexID}_indexedColumnsValue_{RowID}
Value: null

例存儲數(shù)據(jù): idxAge,假設這個索引的 IndexID 為 1,則其存儲在 TiKV 上的索引數(shù)據(jù)為:

t10_i1_10_1 --> null
t10_i1_20_2 --> null
t10_i1_30_3 --> null

3.數(shù)據(jù)運算

SQL層架構

TiDB SQL層架構

分布式計算

例如:select count(*) from user where name = "TiDB"

分布式計算原理

作用:計算下推,充分利用分布式特性,降低中心計算引擎壓力

2)PD Server

TiKV 集群會向 PD 匯報兩類消息:

  • TiKV 節(jié)點信息

  • Region 信息

3)存儲節(jié)點

支持分布式事務(默認隔離級別是SI: Snapshot Isolation(即可重復讀), 通過兩階段提交保證ACID)。

存儲層.png

TiKV Server: 行式數(shù)據(jù)存儲。

每個 TiKV 實例中有兩個 RocksDB 實例。

  • 一個用于存儲 Raft 日志(通常被稱為 raftdb)

  • 另一個用于存儲用戶數(shù)據(jù)以及 MVCC 信息(通常被稱為 kvdb)。

  • kvdb 中有四個 ColumnFamily:

    • raft(Region 元數(shù)據(jù))

    • lock(事務數(shù)據(jù))、

    • default(長度超過255的數(shù)據(jù))

    • write(用戶數(shù)據(jù)、MVCC數(shù)據(jù))

存儲架構
  1. RocksDB上層為Raft 協(xié)議
    存儲原理
    • 通過Raft 完成請求日志的同步

    • 利用Raft 特性生成數(shù)據(jù)副本,保證數(shù)據(jù)強一致

  2. 底層使用RocksDB(高性能單機存儲引擎,存儲結構LSM-Tree
    • 存儲數(shù)據(jù)的基本單元是Region ,以Region 為單位做數(shù)據(jù)擴縮容(默認96MB,每一個 Region 負責存儲一個key rang的數(shù)據(jù):startKey 和 endKey 左閉右開,每一個Regison 有一個Raft Group:Leader 與Follower 組成)

TiFlash Server: 列式存儲(采用Delta Main結構<LSM-Tree 與 Delta Tree結合>)。

TiFlash 架構

注意點:

(1)TiFlash 暫時無法直接接受數(shù)據(jù)寫入,任何數(shù)據(jù)必須先寫入 TiKV 再同步到 TiFlash。

(2)TiFlash 以Raft Learner 角色接入 TiDB 集群,TiFlash 支持表粒度的數(shù)據(jù)同步,部署后并不會自動同步任何數(shù)據(jù),需要按照按表構建 TiFlash 副本完成指定表的數(shù)據(jù)同步。

(3)對于創(chuàng)建了 TiFlash 副本的表,TiDB 優(yōu)化器會自動根據(jù)代價估算選擇是否使用 TiFlash 副本

(4)TiFlash 推薦使用和 TiKV 不同的節(jié)點以做到 Workload 隔離,但在無業(yè)務隔離的前提下,也可以選擇與 TiKV 同節(jié)點部署。

8.與 MySQL 兼容性對比

  • TiDB 100% 兼容 MySQL 5.7 協(xié)議、MySQL 5.7 常用的功能及語法。

  • MySQL 5.7 生態(tài)中的系統(tǒng)工具(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客戶端等均可用于 TiDB。

  • 但 TiDB 尚未支持一些 MySQL 功能,可能的原因如下:

    • 有更好的解決方案,例如 JSON 取代 XML 函數(shù)。

    • 目前對這些功能的需求度不高,例如存儲流程和函數(shù)。

    • 一些功能在分布式系統(tǒng)上的實現(xiàn)難度較大。

9. 生態(tài)工具

  • 全量導出

    工具:Dumpling

    • 輸入:MySQL/TiDB 集群

    • 輸出:SQL/CSV 文件

  • 全量導入

    工具:TiDB Lightning

    • 輸入:Dumpling 輸出文件、其他格式兼容的 CSV 文件
  • TiDB集群間增量同步

    工具:TiDB Binlog

    • 輸入:TiDB 集群

    • 輸出:TiDB 集群、MySQL、Kafka 或者增量備份文件

  • 全量導入、增量導入

    工具:TiDB Data Migration (DM)

    • 輸入:MySQL/MariaDB

    • 輸出:TiDB 集群

  • TiDB集群備份和恢復

    工具:Backup & Restore (BR)

    • 輸入:TiDB 集群

    • 輸出:TiDB 集群、MySQL、Kafka 或者增量備份文件

10. 數(shù)據(jù)遷入

支持數(shù)據(jù)遷入方式:
  • 從 MySQL 遷入TiDB

  • 從 CSV/SQL 文件遷入 TiDB

1) 從 MySQL 遷入 TiDB

目前推薦兩種方式:

  • 使用 DM 遷移數(shù)據(jù)(適合場景:全量同步 <數(shù)據(jù)量小于1TB>、增量同步)

  • 使用 Mydumper 和 TiDB Lightning 遷移全量數(shù)據(jù)(適合場景:全量同步<數(shù)據(jù)量大于1TB>)

2) 從 CSV/SQL 文件遷入 TiDB
  • 從CSV文件遷入TiDB(適合場景:不兼容MySQL協(xié)議的異構數(shù)據(jù)庫)

  • 從SQL遷入TiDB(適合場景:全量同步<數(shù)據(jù)量大于1TB>)

11.部署方式

  • 使用TiUP部署(推薦)

    場景:聯(lián)網(wǎng)環(huán)境

  • 使用TiUP離線部署(推薦)

    場景:離線環(huán)境

  • 使用Ansible 部署(TiDB 4.0后不推薦使用)

    場景:聯(lián)網(wǎng)環(huán)境

  • 使用Ansible離線部署(TiDB 4.0后不推薦使用)

    場景:聯(lián)網(wǎng)環(huán)境

  • 使用TiDB Operator部署

    場景:k8s上部署運維

12.參考文檔

TiDB 簡介

注:本文內容為官網(wǎng)知識總結,不包含個人觀點及理解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容