TiDB

兼容MySQL协议的分布式NewSQL数据库

TiDB是一个开源的NewSQL数据库,支持混合事务和分析处理(HTAP)工作负载[3]。它与MySQL兼容,并且可以提供水平可扩展性、强一致性和高可用性。它主要由PingCAP公司开发和支持,并在Apache 2.0下授权。TiDB从Google的Spanner[4]和F1[5]论文中汲取了最初的设计灵感。[6]

TiDB
開發者北京平凯星辰科技发展有限公司(PingCAP)
首次发布2017年10月15日,​6年前​(2017-10-15[1]
当前版本
  • 7.6.0 (2024年1月25日;穩定版本)[2]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
编程语言Go (TiDB), Rust (TiKV)
语言英文、中文
类型NewSQL
许可协议Apache 2.0
网站pingcap.co.jp/tidb-overview/ 编辑维基数据

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]


参考文献 编辑

  1. ^ 1.0 GA release notes. 
  2. ^ 2.0 2.1 Release 7.6.0. 2024年1月25日 [2024年2月20日]. 
  3. ^ How TiDB combines OLTP and OLAP in a distributed database. [2019-12-07]. (原始内容存档于2019-05-02). 
  4. ^ Spanner: Google's Globally-Distributed Database. [2019-12-07]. (原始内容存档于2018-12-30). 
  5. ^ F1: A Distributed SQL Database That Scales. [2019-12-07]. (原始内容存档于2019-12-02). 
  6. ^ TiDB Brings Distributed Scalability to SQL. [2019-12-07]. (原始内容存档于2019-05-02). 
  7. ^ The best open source software for data storage and analytics. [2019-12-07]. (原始内容存档于2019-09-02). 
  8. ^ TiDB developer PingCAP wants to expand in North America after raising $50M Series C. [2019-12-07]. (原始内容存档于2019-05-02). 
  9. ^ Compatibility with MySQL. [2019-12-07]. (原始内容存档于2019-05-02). 
  10. ^ Meet TiDB: An open source NewSQL database. [2019-12-07]. (原始内容存档于2019-07-31). 
  11. ^ TiKV Architecture. [2019-12-07]. (原始内容存档于2019-05-02). 
  12. ^ CNCF to Host TiKV in the Sandbox. [2019-12-07]. (原始内容存档于2019-09-03). 
  13. ^ The Raft Consensus Algorithm. [2019-12-07]. (原始内容存档于2018-01-20). 
  14. ^ Database Operators Bring Stateful Workloads to Kubernetes. [2019-12-07]. (原始内容存档于2019-12-29). 
  15. ^ Introducing Operators: Putting Operational Knowledge into Software. [2019-12-07]. (原始内容存档于2019-11-25). 
  16. ^ TiDB Operator GitHub repo. [2019-12-07]. (原始内容存档于2019-07-16). 
  17. ^ Introducing the Kubernetes Operator for TiDB. [2019-12-07]. (原始内容存档于2019-05-02). 
  18. ^ Deploy TiDB to Kubernetes on Your Laptop. [2019-12-07]. (原始内容存档于2018-08-17). 
  19. ^ Deploy TiDB, a distributed MySQL compatible database, to Kubernetes on Google Cloud. 
  20. ^ Deploy TiDB, a distributed MySQL compatible database, on Kubernetes via AWS EKS. 
  21. ^ Ansible Playbook for TiDB. [2019-12-07]. (原始内容存档于2020-08-25). 
  22. ^ How to Spin Up an HTAP Database in 5 Minutes With TiDB + TiSpark. [2019-12-07]. (原始内容存档于2019-05-02). 
  23. ^ Syncer User Guide. [2019-12-07]. (原始内容存档于2019-11-21). 
  24. ^ DM GitHub Repo. [2019-12-07]. (原始内容存档于2020-08-25). 
  25. ^ Introducing TiDB Lightning. [2019-12-07]. (原始内容存档于2019-05-08). 
  26. ^ TiDB-Binlog Architecture Evolution and Implementation Principles. [2019-12-07]. (原始内容存档于2019-06-16). 
  27. ^ Shopping on Shopee, the TiDB Way - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  28. ^ BookMyShow.com: More Uptime, 30% Less Operational Cost with TiDB - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  29. ^ Powering the Xiaomi Mobile Lifestyle with TiDB - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  30. ^ Lesson Learned from Queries over 1.3 Trillion Rows of Data Within Milliseconds of Response Time at Zhihu.com - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  31. ^ TiDB, the Key to a Better Life for Meituan-Dianping’s 290 Million Monthly Users - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-21). 
  32. ^ Always Fun, Always On: How TiDB Helps iQiyi Deliver Streaming Videos - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  33. ^ Managing the Surging Data Volume of a Fast-Growing Marketplace with TiDB - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06). 
  34. ^ Blitzscaling the Largest Dockless Bikesharing Platform with TiDB’s Help - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-05-02). 
  35. ^ States, Austin TX United. The Hybrid Database Capturing Perishable Insights at Yiguo. Datanami. 2018-02-22 [2019-12-07]. (原始内容存档于2019-11-06). 
  36. ^ How TiDB tackles fast data growth and complex queries for yuanfudao.com - TiDB. pingcap.com. [2019-12-07]. (原始内容存档于2019-11-06).