TiDB:一个能扛住海量数据的分布式 SQL 数据库

TiDB 在 GitHub 上已经拿到 40,181 Star 了。

PingCAP 开源了这个项目,用 Go 语言写的,做的事情很明确:提供一个兼容 MySQL 的分布式数据库,同时支持事务处理和数据分析。

正文顶部截图

1、 这东西解决什么问题

传统单机数据库有个硬伤:数据量一大,要么垂直扩容加机器配置,要么分库分表改代码。前者有上限,后者开发成本高,运维也麻烦。

TiDB 的思路是把计算和存储拆开。TiDB Server 负责 SQL 解析和执行,TiKV 负责存数据,两者独立扩展。需要更多存储就加 TiKV 节点,需要更强计算就加 TiDB Server,互不影响。

数据自动分片,不需要手动做分库分表。写入的数据会按 Region 拆分,均匀分布在各个节点上。扩容的时候数据自动迁移,对业务层来说基本透明。

2、 核心能力

分布式事务是最基础的。TiDB 用两阶段提交协议保证 ACID,事务可以跨多个节点执行,即使出现网络分区或者节点故障,数据一致性也能保证。

高可用靠 Raft 共识协议实现。每份数据默认存三个副本,写入需要多数副本确认才算成功。单个节点挂了不影响服务,自动做故障转移。副本的地理分布可以配置,满足不同级别的容灾需求。

HTAP 是 TiDB 区别于很多分布式数据库的地方。它同时提供两个存储引擎:TiKV 是行存引擎,擅长事务处理;TiFlash 是列存引擎,擅长分析查询。TiFlash 通过 Multi-Raft Learner 协议从 TiKV 实时同步数据,两边数据保持一致。查询的时候,TiDB Server 会根据代价模型自动选择走 TiKV 还是 TiFlash,也可以同时用两个引擎做协同计算。

README区域截图

3、 MySQL 兼容性

TiDB 兼容 MySQL 8.0 协议。大多数情况下,现有的 MySQL 应用可以直接连 TiDB,不用改代码或者只做少量修改。MySQL 的驱动、ORM 框架、管理工具都能直接用。

PingCAP 也提供了一套数据迁移工具,支持从 MySQL 把数据迁到 TiDB,包括全量导入和增量同步。

4、 部署方式

本地测试可以用 TiUP 快速拉起一个 Playground 集群,适合开发调试。

生产环境有几种选择:用 TiDB Operator 部署在 Kubernetes 上,支持自建 K8s 集群或者各大云厂商的托管 K8s 服务;也可以直接用 TiDB Cloud,这是 PingCAP 提供的全托管服务,点几下就能创建集群,有免费额度可以试。

5、 适合什么场景

业务增长快,单机数据库快扛不住了,但又不想做分库分表的团队。TiDB 的水平扩容能力可以随着业务增长线性加节点,不用提前规划分片策略。

同时有 OLTP 和 OLAP 需求的场景。以前通常要搭两套系统,一套跑事务,一套跑分析,中间还要做数据同步。TiDB 一套搞定,省掉了数据搬运的成本。

对 MySQL 生态有依赖的团队。迁移到 TiDB 的学习成本低,现有的工具链基本都能复用。

6、 开源与社区

TiDB 用 Apache 2.0 协议开源,企业级功能也全部开放。社区活跃,有详细的贡献者指南和开发文档,新手可以先从标记了 good first issue 的问题入手。

,有详细的贡献者指南和开发文档,新手可以先从标记了 good first issue 的问题入手。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐