天天看點

新型資料庫TIDB簡介

1.TiDB 整體架構

TiDB 是 PingCAP 公司設計的開源分布式 HTAP (Hybrid Transactional and Analytical Processing) 資料庫,結合了傳統的 RDBMS 和 NoSQL 的最佳特性。TiDB 相容 MySQL,支援無限的水準擴充,具備強一緻性和高可用性。TiDB 的目标是為 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 場景提供一站式的解決方案。

要深入了解 TiDB 的水準擴充和高可用特點,首先需要了解 TiDB 的整體架構。TiDB 叢集主要包括三個核心元件:TiDB Server,PD Server 和 TiKV Server。此外,還有用于解決使用者複雜 OLAP 需求的 TiSpark 元件和簡化雲上部署管理的 TiDB Operator 元件。

新型資料庫TIDB簡介

TiDB Server

TiDB Server 負責接收 SQL 請求,處理 SQL 相關的邏輯,并通過 PD 找到存儲計算所需資料的 TiKV 位址,與 TiKV 互動擷取資料,最終傳回結果。TiDB Server 是無狀态的,其本身并不存儲資料,隻負責計算,可以無限水準擴充,可以通過負載均衡元件(如LVS、HAProxy 或 F5)對外提供統一的接入位址。

PD Server

Placement Driver (簡稱 PD) 是整個叢集的管理子產品,其主要工作有三個:一是存儲叢集的元資訊(某個 Key 存儲在哪個 TiKV 節點);二是對 TiKV 叢集進行排程和負載均衡(如資料的遷移、Raft group leader 的遷移等);三是配置設定全局唯一且遞增的事務 ID。

PD 通過 Raft 協定保證資料的安全性。Raft 的 leader server 負責處理所有操作,其餘的 PD server 僅用于保證高可用。建議部署奇數個 PD 節點。

TiKV Server

TiKV Server 負責存儲資料,從外部看 TiKV 是一個分布式的提供事務的 Key-Value 存儲引擎。存儲資料的基本機關是 Region,每個 Region 負責存儲一個 Key Range(從 StartKey 到 EndKey 的左閉右開區間)的資料,每個 TiKV 節點會負責多個 Region。TiKV 使用 Raft 協定做複制,保持資料的一緻性和容災。副本以 Region 為機關進行管理,不同節點上的多個 Region 構成一個 Raft Group,互為副本。資料在多個 TiKV 之間的負載均衡由 PD 排程,這裡也是以 Region 為機關進行排程。

TiSpark

TiSpark 作為 TiDB 中解決使用者複雜 OLAP 需求的主要元件,将 Spark SQL 直接運作在 TiDB 存儲層上,同時融合 TiKV 分布式叢集的優勢,并融入大資料社群生态。至此,TiDB 可以通過一套系統,同時支援 OLTP 與 OLAP,免除使用者資料同步的煩惱。

TiDB Operator

TiDB Operator 提供在主流雲基礎設施(Kubernetes)上部署管理 TiDB 叢集的能力。它結合雲原生社群的容器編排最佳實踐與 TiDB 的專業運維知識,內建一鍵部署、多叢集混部、自動運維、故障自愈等能力,極大地降低了使用者使用和管理 TiDB 的門檻與成本。

2. 與 MySQL 相容性對比

TiDB 支援 MySQL 傳輸協定及其絕大多數的文法。這意味着您現有的 MySQL 連接配接器和用戶端都可以繼續使用。大多數情況下您現有的應用都可以遷移至 TiDB,無需任何代碼修改。

目前 TiDB 伺服器官方支援的版本為 MySQL 5.7。大部分 MySQL 運維工具(如 PHPMyAdmin, Navicat, MySQL Workbench 等),以及備份恢複工具(如 mysqldump, Mydumper/myloader)等都可以直接使用。

不過一些特性由于在分布式環境下沒法很好的實作,目前暫時不支援或者是表現與 MySQL 有差異。一些 MySQL 文法在 TiDB 中可以解析通過,但是不會做任何後續的處理,例如 Create Table 語句中 Engine,是解析并忽略。

3. 不支援的特性

• 存儲過程與函數

• 觸發器

• 事件

• 自定義函數

• 外鍵限制

• 全文函數與索引

• 空間函數與索引

• 非 utf8/utf8mb4 字元集

• BINARY 之外的排序規則

• 增加主鍵

• 删除主鍵

• SYS schema

• MySQL 追蹤優化器

• XML 函數

• X Protocol

• Savepoints

• 列級權限

• CREATE TABLE tblName AS SELECT stmt 文法

• CREATE TEMPORARY TABLE 文法

• XA 文法(TiDB 内部使用兩階段送出,但并沒有通過 SQL 接口公開)

• CHECK TABLE 文法

• CHECKSUM TABLE 文法