导读
本文来自 TiDB 社区合肥站走进蔚来汽车——来自吴记老师的演讲《TiDB 在新能源车企的实践:MySQL 到 TiDB 的迁移思考》。
这次分享深入探讨了新能源车企蔚来汽车从 MySQL 迁移到 TiDB 的过程与实践,包括迁移过程中的挑战和动机,以及面对单表数据量增长至 20 亿条时的应对策略;此外,也将分享使用 TiDB 过程中常见的问题与解决方法,帮助大家更有效地应用 TiDB 解决企业数据库管理中的挑战。
蔚来是一家全球化的智能电动汽车公司,致力于通过提供高性能的智能电动汽车与极致用户体验。2023 年第三季度中国汽车市场销量 566.8 万辆,同比增长 2.4%,其中新能源车型销量合计接近 200 万辆,同比增长 36%。其中,蔚来在中国 30 万元以上的纯电汽车市场中位列第一,市场份额占比 45%。
随着业务的快速扩张,蔚来公司内部某些业务的数据量急剧增加,部分业务的日增数据量达到千万级别。在 MySQL 数据库中,一些表的记录数已超过 20 亿条。在多种业务场景中,对这些大型表进行联接查询导致严重的性能瓶颈,查询效率低下,甚至经常超时。由于查询需求的多样性,传统基于 hash 的分表策略已无法满足业务需求。
我们目前面临的数据库挑战主要包括:
**1. 性能问题:**在执行包含 20 亿记录的大表与不同规模的其他表(百万、几十万、几万)的联接查询时,性能显著下降,特别是对于聚合函数如count的查询几乎不可行。
**2. 时间维度跨度大:**大多查询场景需要结合时间维度进行时间范围查询,通常要查询中过滤最近半年的数据,但也有可能需要查询历史数据。
**3. 表结构复杂性:**大型表初始包含 20 多亿条记录,拥有 30 多个字段,其中约 10 个字段需要与其他三个表进行联接查询。
**4. 写入与同步延迟:**部分数据库表的单表写入数据量巨大,导致主从复制(master-slave replication)出现延迟,影响多个业务流程。
**5. DDL 执行缓慢:**在 MySQL 中,由于单表数据量过大,执行数据定义语言(DDL)操作变得非常缓慢,有时需要数小时才能完成。
为了解决这些问题,可能需要考虑以下策略:
- **优化查询:**重写查询逻辑,减少不必要的联接和数据扫描。
- **索引优化:**为常用于联接和查询的字段创建索引,提高查询效率。
- **分区表:**根据业务逻辑对表进行分区,以提高查询和维护的性能。
- **读写分离:**通过读写分离来减轻主数据库的压力,提高查询响应速度。
- **分布式数据库:**考虑使用分布式数据库解决方案,以支持水平扩展和负载均衡。
- **异步处理:**对于不需要即时返回结果的查询,采用异步处理方式。
通过调研,蔚来数据应用团队将目光放到了分布式数据库上,TiDB 作为一款广泛使用的开源分布式 HTAP 数据库,已纳入团队的调研和应用范围。
在调研中,蔚来数据应用团队认为 TiDB 作为一款开源分布式关系型数据库,在线事务处理,在线分析处理融合型分布式数据库产品,具备水平弹性扩容或者缩容金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 /MySQL 8.0 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
TiDB 的多项优势特性有效满足了蔚来数据应用团队在处理大规模数据和高并发事务时的需求:
**1. 分布式架构:**TiDB 采用分布式关系型数据库架构,有效突破了单机处理能力的局限,提升了整体性能,扩展性。
**2. 高可用性:**TiDB 通过使用 Raft 一致性算法,数据在各 TiKV 节点间复制为多副本,以确保某个节点宕机时数据的安全性,同时具备同城双中心、两地三中心的金融级高可用方案。
**3. 水平弹性扩展:**TiDB 不仅支持传统关系型数据库的事务和分析功能,还具备非关系型数据库的水平扩展能力和灵活性,提供了高性能的数据存储解决方案。
**4. 分布式强一致性事务处理:**TiDB 支持 ACID(原子性、一致性、隔离性、持久性)事务,确保在分布式环境下的数据一致性和完整性。
**5. MySQL 协议高度兼容性:**TiDB 与 MySQL 协议高度兼容,支持广泛的 MySQL SQL 语法以及 MySQL 生态系统工具,降低了从 MySQL 迁移到 TiDB 的学习成本和技术障碍,实现了平滑过渡。
**6. 灵活的分区功能:**TiDB 提供了灵活的分区机制,支持 hash、range、list、key 等分区,简化了数据管理和维护工作,使得业务逻辑与数据分片解耦,提高了查询效率。
7. 强大的数据同步工具:
a. DM 可以方便的实现数据从 MySQL(全量+增量&