TiDB是一個開源的NewSQL數據庫,支持混合事務和分析處理(HTAP)工作負載[3]。它與MySQL兼容,並且可以提供水平可擴展性、強一致性和高可用性。它主要由PingCAP公司開發和支持,並在Apache 2.0下授權。TiDB從Google的Spanner[4]和F1[5]論文中汲取了最初的設計靈感。[6]

Quick Facts 開發者, 首次發布 ...
TiDB
開發者北京平凱星辰科技發展有限公司(PingCAP)
首次發布2017年10月15日,​6年前​(2017-10-15[1]
當前版本8.3.0[2]在維基數據編輯(2024年8月22日,38天前)
源代碼庫 編輯維基數據鏈接
編程語言Go (TiDB), Rust (TiKV)
語言英文、中文
類型NewSQL
許可協議Apache 2.0
網站pingcap.com/zh/product/ 編輯維基數據
Close

TiDB被InfoWorld 2018 Bossie Award評選為最佳數據存儲和分析開源軟件之一。[7]

歷史

PingCAP Inc.是一家軟件公司,成立於2015年4月,成立後便開始開發TiDB。該公司是TiDB及其關聯的開源社區的主要開發人員,維護人員和驅動者。[8]

主要特性

水平可擴展性

TiDB可以通過添加新節點來擴展SQL處理和存儲容量。這使得基礎設施容量的擴展更加容易和靈活,而傳統的關係數據庫只能垂直擴展。

MySQL兼容性

對於應用程序來說,TiDB的行為就如同一個MySQL 5.7服務器。用戶可以繼續使用所有現有的MySQL客戶端庫。因為TiDB的SQL處理層是從頭開始構建的,而不是一個MySQL分支,所以它的兼容性不是100%,[9]而且MySQL和TiDB之間存在已知的行為差異。[10]

具有強一致性的分布式事務

TiDB在內部基於範圍將表分片為的小塊,這些塊稱為「區域」。[11]每個區域的默認大小約為100 MB,TiDB在內部使用二階段提交來確保區域以事務上一致的方式進行維護。

雲原生

為了使部署、配置、操作和維護更加靈活,TiDB被設計成可在雲中工作。TiDB的存儲層稱為TiKV,於2018年8月成為雲原生計算基金會的沙盒級別項目。[12]TiDB平台的體系結構還允許分別獨立擴展SQL處理和存儲。

更精簡的ETL流程

TiDB可以支持聯機事務處理(OLTP)和聯機分析處理(OLAP)工作負載。這意味着,雖然用戶可能傳統上在MySQL上進行交易,然後將數據抽取、轉換和加載(ETL)到一個列存儲中進行分析處理,但這一步驟不再需要。

高可用性

TiDB使用Raft一致性算法[13]確保數據在整個Raft組的存儲過程中高度可用和安全複製。在發生故障時,Raft組將自動為失敗的成員選擇一個新的領導者,並自我修復TiDB集群,而不需要任何必要的人工干預。失敗和自愈操作對應用程序是透明的。

部署方法

Kubernetes Operator

可以使用TiDB Operator將TiDB部署到支持Kubernetes的雲環境中。[14]Operator是打包、部署和管理Kubernetes應用程序的方法。它是為運行有狀態工作負載而設計的,最早由CoreOS在2016年引入。[15]TiDB Operator[16]最初由PingCAP開發,並於2018年8月開源。[17]TiDB Operator可以用於在筆記本電腦[18]、Google Cloud Platform的Google Kubernetes引擎[19]和Amazon Web Services的Kubernetes彈性容器服務上部署TiDB。[20]

Ansible

通過使用TiDB-Ansible playbook,可以使用Ansible (軟體)部署TiDB。[21]

Docker

可以使用Docker在多個節點和多台機器上的容器化環境中部署TiDB,而Docker Compose可以使用單個命令部署TiDB以進行測試。[22]

工具

TiDB提供了一系列開源工具來幫助現有MySQLMariaDB用戶進行數據複製和遷移。

Syncer與Data Migration

Syncer是一個工具,它支持從MySQL或MariaDB實例到TiDB集群的完整數據遷移或增量數據複製。[23]Data Migration(DM)是 Syncer的第二代迭代,它適合將已分片的MySQL或MariaDB表中的數據複製到TiDB。[24]Syncer/DM的一個常見用例是將MySQL或MariaDB表連接到TiDB,幾乎將TiDB視為從屬,然後在該TiDB集群上直接實時運行分析工作負載。

Lightning

Lightning是一個可將大型MySQL轉儲高速完全導入到新的TiDB群集中的工具,它提供了比執行每個SQL語句更快的導入體驗。該工具用於把大量數據快速填充到一個最初為空的TiDB集群,以便加快測試或生產遷移。之所以能提升導入速度,是因為TiDB通過將SQL語句解析為鍵值對,然後直接生成有序字符串表(SSTable)文件到RocksDB[25]

TiDB-Binlog

TiDB-Binlog是一個用於收集對TiDB集群所做邏輯更改的工具。它用於在兩個TiDB集群之間或從一個TiDB集群到另一個下游平台之間提供增量備份和複製。

它的功能類似於MySQL主從複製。主要的區別在於,由於TiDB是一個分布式數據庫文件管理器,因此每個TiDB實例生成的binlog需要在被下游使用之前,根據事務提交的時間進行合併和排序。[26]

用戶案例

目前,已有近3000家公司在使用 TiDB,其中包括Mastercard、AirBNB、Square、Paypay、中國銀行、建設銀行、美團、Bilibili、Shopee[27]、BookMyShow[28]、小米[29]、知乎[30]、美團點評[31]、愛奇藝[32], 轉轉[33]、摩拜[34]、易果[35],以及猿輔導[36]


參考文獻

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.