TiDB

来自Local Chinese Wikipedia
imported>Yumeto2026年3月2日 (一) 15:26的版本 (使用DisamAssist清理消歧義連結:Go(改連結至Go語言)。)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

页面Module:Infobox/styles.css没有内容。

TiDB
开发者北京平凯星辰科技发展有限公司(PingCAP)
首次发布2017年10月15日,​8年前​(2017-10-15[1]
当前版本Module:Wd第196行Lua错误:attempt to call field 'getGlobalSiteId' (a nil value)Module:Wd第196行Lua错误:attempt to call field 'getGlobalSiteId' (a nil value)错误:第一个参数不能被解析为日期或时间。
编程语言Go (TiDB), Rust (TiKV)
语言英文、中文
类型NewSQL
许可协议Apache 2.0
页面Module:Infobox/styles.css没有内容。

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

TiDB被InfoWorld 2018 Bossie Award评选为最佳数据存储和分析开源软件之一。[6]

历史[编辑]

PingCAP Inc.是一家软件公司,成立于2015年4月,成立后便开始开发TiDB。该公司是TiDB及其关联的开源社区的主要开发人员,维护人员和驱动者。[7]

主要特性[编辑]

水平可扩展性[编辑]

TiDB可以通过添加新节点来扩展SQL处理和存储容量。这使得基础设施容量的扩展更加容易和灵活,而传统的关系数据库只能垂直扩展。

MySQL兼容性[编辑]

对于应用程序来说,TiDB的行为就如同一个MySQL 5.7服务器。用户可以继续使用所有现有的MySQL客户端库。因为TiDB的SQL处理层是从头开始构建的,而不是一个MySQL分支,所以它的兼容性不是100%,[8]而且MySQL和TiDB之间存在已知的行为差异。[9]

具有强一致性的分布式事务[编辑]

TiDB在内部基于范围将表分片为的小块,这些块称为“区域”。[10]每个区域的默认大小约为100 MB,TiDB在内部使用二阶段提交来确保区域以事务上一致的方式进行维护。

云原生[编辑]

为了使部署、配置、操作和维护更加灵活,TiDB被设计成可在云中工作。TiDB的存储层称为TiKV,于2018年8月成为云原生计算基金会的沙盒级别项目。[11]TiDB平台的体系结构还允许分别独立扩展SQL处理和存储。

更精简的ETL流程[编辑]

TiDB可以支持联机事务处理(OLTP)和联机分析处理(OLAP)工作负载。这意味着,虽然用户可能传统上在MySQL上进行交易,然后将数据抽取、转换和加载(ETL)到一个列存储中进行分析处理,但这一步骤不再需要。

高可用性[编辑]

TiDB使用Raft一致性算法[12]确保数据在整个Raft组的存储过程中高度可用和安全复制。在发生故障时,Raft组将自动为失败的成员选择一个新的领导者,并自我修复TiDB集群,而不需要任何必要的人工干预。失败和自愈操作对应用程序是透明的。

部署方法[编辑]

Kubernetes Operator[编辑]

可以使用TiDB Operator将TiDB部署到支持Kubernetes的云环境中。[13]Operator是打包、部署和管理Kubernetes应用程序的方法。它是为运行有状态工作负载而设计的,最早由CoreOS在2016年引入。[14]TiDB Operator[15]最初由PingCAP开发,并于2018年8月开源。[16]TiDB Operator可以用于在笔记本电脑[17]、Google Cloud Platform的Google Kubernetes引擎[18]和Amazon Web Services的Kubernetes弹性容器服务上部署TiDB。[19]

Ansible[编辑]

通过使用TiDB-Ansible playbook,可以使用Ansible (软件)部署TiDB。[20]

Docker[编辑]

可以使用Docker在多个节点和多台机器上的容器化环境中部署TiDB,而Docker Compose可以使用单个命令部署TiDB以进行测试。[21]

工具[编辑]

TiDB提供了一系列开源工具来帮助现有MySQLMariaDB用户进行数据复制和迁移。

Syncer与Data Migration[编辑]

Syncer是一个工具,它支持从MySQL或MariaDB实例到TiDB集群的完整数据迁移或增量数据复制。[22]Data Migration(DM)是 Syncer的第二代迭代,它适合将已分片的MySQL或MariaDB表中的数据复制到TiDB。[23]Syncer/DM的一个常见用例是将MySQL或MariaDB表连接到TiDB,几乎将TiDB视为从属,然后在该TiDB集群上直接实时运行分析工作负载。

Lightning[编辑]

Lightning是一个可将大型MySQL转储高速完全导入到新的TiDB聚类中的工具,它提供了比执行每个SQL语句更快的导入体验。该工具用于把大量数据快速填充到一个最初为空的TiDB集群,以便加快测试或生产迁移。之所以能提升导入速度,是因为TiDB通过将SQL语句解析为键值对,然后直接生成有序字符串表(SSTable)文件到RocksDB[24]

TiDB-Binlog[编辑]

TiDB-Binlog是一个用于收集对TiDB集群所做逻辑更改的工具。它用于在两个TiDB集群之间或从一个TiDB集群到另一个下游平台之间提供增量备份和复制。

它的功能类似于MySQL主从复制。主要的区别在于,由于TiDB是一个分布式数据库文件管理器,因此每个TiDB实例生成的binlog需要在被下游使用之前,根据事务提交的时间进行合并和排序。[25]

用户案例[编辑]

目前,已有近3000家公司在使用 TiDB,其中包括Mastercard、AirBNB、Square、Paypay、中国银行、建设银行、美团、Bilibili、Shopee[26]、BookMyShow[27]、小米[28]、知乎[29]、美团点评[30]、爱奇艺[31], 转转[32]、摩拜[33]、易果[34],以及猿辅导[35]


参考文献[编辑]

  1. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  2. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  3. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  4. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  5. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  6. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  7. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  8. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  9. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  10. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  11. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  12. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  13. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  14. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  15. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  16. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  17. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  18. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  19. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  20. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  21. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  22. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  23. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  24. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  25. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  26. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  27. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  28. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  29. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  30. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  31. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  32. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  33. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  34. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found
  35. package.lua第80行Lua错误:module 'Module:Citation/CS1/People' not found

package.lua第80行Lua错误:module 'Module:NavboxV2/NavboxContext' not found