大家在数据库选型的时候看了哪些数据库?最后为什么选择了 TiDB ?

一、 调研的数据库列表
我们的调研主要围绕解决可扩展性、高可用性、SQL 兼容性以及运维复杂度这几个核心痛点。因此,我们重点关注了以下几类数据库:

  1. 传统关系型数据库 (RDBMS)
    MySQL / PostgreSQL: 作为基准进行对比。它们生态成熟、应用广泛,但我们面临的业务存在明显的单机瓶颈问题,分库分表方案又带来了巨大的应用改性和运维复杂度。
  2. NewSQL 数据库 (核心调研类别)
    TiDB: 平凯星辰 公司开发,开源分布式关系型数据库。
    Google Cloud Spanner / CockroachDB: Spanner 是这一领域的开创者,但作为云托管的闭源产品,限制较多。CockroachDB 是 Spanner 的开源实现,与 TiDB 是直接竞品。
    YugabyteDB: 另一个重要的分布式 SQL 数据库,兼容 PostgreSQL 协议。
  3. NoSQL 数据库 (作为特定场景的补充考量)
    MongoDB: 文档型数据库,考虑用于非结构化或半结构化数据场景。
    Cassandra / ScyllaDB: 宽列存储,考虑用于高吞吐的写入场景。
    Redis: 作为缓存和会话存储的选项,不参与主数据库的竞争。

二、 为什么最终选择了 TiDB?
具体决策依据如下:

  1. 高度兼容 MySQL 协议
    迁移成本极低:我们的核心业务原本就基于 MySQL。TiDB 对 MySQL 协议和语法的高度兼容,使得我们绝大多数业务代码无需修改或仅需极少修改即可平滑迁移。这对于一个已有庞大业务系统的团队来说,是至关重要的“杀手级”特性。
    生态工具无缝对接:我们可以继续使用现有的 MySQL 生态工具,如 mysqldump、Navicat、以及各种 ORM 框架,团队成员学习成本低,上手快。

  2. 真正的弹性扩展与高可用性
    无缝水平扩展:TiDB 的计算层 (TiDB Server) 和存储层 (TiKV) 均可独立、在线地水平扩展。当业务遇到瓶颈时,我们只需要简单地添加节点即可提升整体性能或存储容量,整个过程对业务透明,无需停机和数据迁移。这完美解决了我们因业务快速增长带来的不确定流量和数据量问题。

  3. 强大的分布式事务支持
    TiDB 默认支持分布式 ACID 事务,这对于我们核心业务中如订单、账户等需要强一致性的场景是必需的。这让我们在享受分布式系统扩展性的同时,无需在应用层处理复杂的一致性补偿逻辑。

  4. 活跃的开源社区与成熟的商业支持
    TiDB 拥有非常活跃和健康的开源社区,这意味着我们能快速获得帮助,跟进最新的功能和发展趋势。同时,平凯星辰 公司提供了专业的商业支持,这对于企业级应用的稳定性和出了问题后能找到“负责人”至关重要。

优势在哪:
1.无需分库分表:彻底告别了分库分表带来的应用层路由、分布式事务、全局唯一ID、跨库查询等复杂性。
2.运维自动化:自动负载均衡、自动故障转移,运维复杂度从“地狱级”降至“普通级”。
3.扩展性更优雅:扩展是连续的、平滑的,而分库分表往往需要预估未来,提前规划,后期调整非常痛苦。