没有不值得去解决的问题,也没有不值得去学习的技术!

告别折磨人的 MySQL 分库分表!亿级数据无感扩容,后端需要懂的 NewSQL 选型

最近面试交流中,面试官问到了我对 TiDB 落地实践 的掌握深度。

从业 14 年 PHP 后端一线研发,我长期深耕 MySQL 高并发、大数据表架构演进与性能优化,从单机调优、主从复制,到 Sharding-JDBC / MyCat 手工分库分表整套方案都深度落地过,传统 MySQL 扩容痛点、跨分片难题、事务一致性、运维代价,一路亲身踩坑打磨。

日常工作里虽然一直在关注 TiDB 这类主流 NewSQL 分布式方案、也在线上架构评审和技术调研中多次接触,但一直没有专门系统化整理成标准选型框架 + 落地边界文档。借着这次面试契机,我结合多年 MySQL 大规模实战经验、业界成熟生产案例,再对照官方架构与最佳实践,完整复盘沉淀出这一份:

告别手工分库分表、亿级数据无感扩容的全维度选型参考,同时厘清工程里长期争论的经典问题:

业务上规模化使用 TiDB 之后,ElasticSearch 应该如何分层取舍、各司其职,哪些场景保留、哪些场景可以精简,彻底讲清 RDBMS 与检索引擎的真实架构边界。

整篇内容基于资深 PHP+MySQL 实战视角总结,兼顾面试应答标准 + 企业生产真实落地依据,既是知识体系补全,也方便同行直接用作数据库架构选型参考。

作为一名拥有多年开发经验的老程序员,这些年我踩过最多的坑,莫过于MySQL数据库的扩容难题。从最开始的单机MySQL扛业务,到单表数据突破千万后出现的查询卡顿、写入抖动,再到不得已上手Sharding-JDBC、MyCat做手工分库分表,整个过程堪称“运维噩梦”——自己规划分片键、调试路由规则,跨分片JOIN、跨分片事务处处是坑,扩容时还要手动迁移数据、修改业务代码,PHP业务层还要兼容复杂的分页、排序和聚合逻辑,中小团队根本扛不住这种架构的重量。

相信很多和我一样的后端,都有过同一个灵魂拷问:有没有一种数据库,能兼容MySQL协议、PHP无缝对接,不用我们关心分库分表,就能轻松支撑亿级、十亿级数据量,还能保证高可用和强一致性?答案是肯定的——NewSQL分布式数据库,就是为解决这个痛点而生的。今天这篇文章,我就结合自己的开发经验,详细盘点主流的免手工分片类MySQL分布式数据库(含开源+公有云),同时解答大家最关心的问题:用上TiDB后,ElasticSearch(ES)还需要吗?为后续生产环境数据库选型提供最实用的参考。

一、先复盘:MySQL手工分库分表的那些“致命痛点”

在聊NewSQL之前,我们先好好梳理一下传统MySQL架构的演进瓶颈,也让大家明白,为什么我们迫切需要“免分片”的分布式数据库。

1. 单机MySQL的天然局限:单表数据量一旦突破千万,就会出现明显的性能瓶颈——索引臃肿导致查询变慢,写入并发升高后出现抖动,扩容只能靠垂直升级服务器(加CPU、加内存、加磁盘),但这种方式有明确上限,撑不起亿级数据和高并发场景。

  • 分片规则全靠人工规划:选什么字段作为分片键、如何拆分数据、路由规则怎么配置,都需要自己反复调试,一旦分片键选得不合理,后续扩容和维护会更麻烦;
  • 跨分片操作极难实现:跨分片JOIN、跨分片事务几乎是“玄学”,要么放弃强一致性,要么写复杂的业务逻辑兜底,很容易出现数据不一致的问题;
  • 扩容迁移痛苦不堪:当数据继续增长,需要新增分片时,要手动迁移数据、调整路由配置,甚至修改业务代码,期间很容易出现服务中断或数据丢失;
  • 运维成本翻倍:需要专门安排人员维护中间件和分片集群,监控各个分片的负载、排查分片异常,中小团队根本没有足够的人力支撑。

对于我们后端来说,最痛苦的是:原本熟悉的MySQL语法,在分库分表后需要做大量适配,Laravel、Yii2等框架的ORM用法也要调整,业务开发效率大幅下降。而NewSQL的核心价值,就是帮我们摆脱这些麻烦——兼容MySQL协议、自动分片、免手工维护,业务层完全无感,亿级数据轻松扛住

二、主流免手工分片 类MySQL分布式数据库全盘点(开源+公有云,生产可用)

目前市面上的免手工分片、兼容MySQL的分布式数据库,主要分为两大类别:开源自研版(适合私有化部署、自建机房)和公有云托管版(适合不想运维、开箱即用的企业)。下面我们逐一拆解,重点分析每个数据库的核心亮点、适合场景和短板,方便大家根据自己的业务情况选型。

(一)开源自研版(私有化部署/自建机房首选)

这类数据库可以部署在自己的服务器上,自主掌控数据和运维,适合对数据安全性要求高、有自建机房的企业,也是我们PHP开发者自学、小团队落地的首选。

① TiDB(PingCAP)【重点推荐,最适配PHP生态】

这也是我面试时被问到的数据库,也是目前最适合PHP后端、最容易落地的NewSQL数据库。作为PingCAP自研的开源分布式NewSQL数据库,它的核心定位就是“替代MySQL分库分表,兼容MySQL生态,支撑亿级数据高并发”。

核心亮点(重点关注,贴合PHP开发场景):

  • MySQL兼容性拉满:百分百兼容MySQL 5.7协议、语法和连接驱动,PHP项目(Laravel、Yii2、ThinkPHP)可以直接连接,不需要修改任何SQL语句和业务代码,平滑迁移毫无压力;
  • 自动分片,彻底解放双手:底层会自动将数据按“Region”(默认96MB)分片,数据均匀打散到多个TiKV节点,不需要人工规划分片键、不需要手动迁移数据,数据涨到亿级、十亿级,只需要新增TiKV节点即可,扩容完全无感;
  • 高可用+强事务:基于Raft协议实现3副本部署,单节点故障后自动切换,数据零丢失、服务不中断,支持跨机房容灾;同时支持分布式强事务ACID,解决了分库分表后跨片事务难的痛点,适合订单、支付等核心业务;
  • HTAP一体,兼顾交易和分析:TiKV(行存引擎)负责OLTP(在线事务,如用户下单、支付),TiFlash(列存引擎,可选)负责OLAP(在线分析,如后台报表、数据统计),数据实时同步,不需要再搭建单独的数据仓库做ETL,一套数据库搞定交易+分析;
  • 存算分离,弹性扩容:TiDB Server(计算层)和TiKV(存储层)分离,想提升并发能力,就新增TiDB节点;想存储更多数据,就新增TiKV节点,扩容灵活,成本可控。

适合场景:

  • 互联网场景:订单、用户、账单、流水等大表,数据量从千万级到百亿级,需要高并发读写;
  • PHP老项目迁移:不想修改业务代码,想摆脱分库分表的麻烦,平滑替代传统MySQL;
  • 中小团队落地:学习成本低,本地一条命令就能启动测试集群,运维难度远低于分库分表+中间件的方案。

短板:

  • 小规模数据部署略重:相对于单机MySQL,TiDB需要部署TiDB、TiKV、PD三个核心组件,服务器资源占用略高,适合数据量较大的场景,小数据量场景(单表百万级以下)用单机MySQL更高效;
  • 极低延迟查询不如原生MySQL:对于简单的、微秒级延迟要求的查询(如简单的主键查询),TiDB的延迟略高于单机MySQL,但对于绝大多数PHP业务(如Web接口、后台管理),完全满足需求。

② OceanBase 开源版(蚂蚁集团自研)

OceanBase是蚂蚁集团自研的分布式数据库,核心优势是“金融级稳定性”,支付宝的核心账务系统、双十一峰值都是靠它支撑的,开源版可以免费使用,适合对稳定性要求极高的场景。

核心亮点:

  • 金融级高可用:经过支付宝多年实战验证,支持异地多活、故障自动切换,数据零丢失,满足金融行业的合规要求;
  • 兼容性强:兼容MySQL协议,同时支持部分Oracle语法,适合需要从Oracle迁移到MySQL生态的企业;
  • 资源利用率高:支持自动分区、基线合并、数据高压缩,相同数据量下,存储成本低于TiDB,服务器资源利用率更高;
  • 强一致性:分布式事务支持ACID,适合账务、支付等核心金融场景。

适合场景:金融、支付、核心账务系统,对数据一致性、稳定性要求极高的企业。

短板:

  • 学习曲线陡:架构比TiDB更复杂,运维难度高,需要专门的运维人员维护,中小团队落地成本高;
  • 社区生态不如TiDB:国内社区活跃度低于TiDB,遇到问题时,文档和解决方案不如TiDB丰富;
  • PHP生态适配不如TiDB:虽然兼容MySQL协议,但在PHP框架的适配、社区案例上,比TiDB少,落地时可能需要额外调试。

③ PolarDB-X 开源版(阿里自研)

PolarDB-X是阿里原生的分布式MySQL数据库,定位和TiDB类似,核心优势是“阿里生态适配”,适合阿里系技术栈的企业,开源版可以私有化部署。

核心亮点:

  • MySQL兼容度高:无缝兼容MySQL语法、协议,PHP项目可以直接连接,迁移成本低;
  • 自动分片+全局二级索引:底层自动分片,支持全局二级索引,解决了分片后索引查询的痛点;
  • 阿里生态联动:和阿里云的其他产品(如RDS、OSS、DataWorks)联动性强,适合已经使用阿里生态的企业。

适合场景:阿里生态重度用户,需要私有化部署、兼容MySQL的分布式数据库。

短板:社区活跃度低于TiDB,开源版的功能更新速度不如TiDB,非阿里生态的企业落地优势不明显。

(二)公有云托管版(不用运维、开箱即用,企业生产首选)

对于大多数企业(尤其是中小团队)来说,自建分布式数据库集群的运维成本太高,此时选择公有云托管版,是更高效、更省心的选择——厂商负责底层的部署、运维、扩容、故障处理,我们只需要专注于业务开发,开箱即用。

1. 阿里云 PolarDB

阿里云的分布式MySQL托管版,基于PolarDB-X开源版优化而来,是阿里云推荐的“亿级数据分布式解决方案”,也是国内使用最广泛的公有云分布式MySQL之一。

核心优势:云端托管,底层分片细节完全屏蔽,业务层完全无感;支持弹性扩容、自动备份、故障自愈;和阿里云RDS、ECS、SLS等产品无缝联动,适合阿里云上的PHP项目落地;秒杀、订单、海量流水等场景有成熟的解决方案。

2. 腾讯云 TDSQL MySQL版

腾讯云自主研发的分布式MySQL,核心优势是“金融级稳定性”和“传统项目适配”,在金融、政企领域落地较多。

核心优势:自动分片、分布式强事务、异地多活;兼容MySQL协议,PHP项目迁移成本低;提供完善的监控、备份、运维工具,适合不想投入太多运维人力的企业;支持国产化适配,适合政企项目。

3. 华为云 GaussDB(for MySQL)

华为云的分布式MySQL,核心优势是“存算分离”和“超大规模数据支撑”,适合数据量极大、并发极高的场景。

核心优势:支持PB级数据存储,自动分片、弹性扩容;兼容MySQL协议,PHP无缝对接;提供金融级高可用,适合核心业务落地;华为云生态联动性强,适合使用华为云的企业。

4. AWS Aurora MySQL 分布式扩展

亚马逊云的分布式MySQL,核心优势是“海外部署”和“原生MySQL兼容”,适合海外业务、需要对接AWS生态的企业。

核心优势:完全兼容原生MySQL,PHP项目可以直接连接;支持弹性扩容,底层自动分片;海外节点覆盖广,适合海外部署的业务;提供完善的监控和运维工具。

(三)生产选型对比表(直接对照,快速决策)

为了方便大家快速选型,我整理了一张对比表,涵盖核心维度,生产环境直接参考即可:

数据库归属形态MySQL兼容度自动分片分布式事务运维难度典型最佳场景
TiDB(开源)开源自建极高(100%兼容5.7)全自动强ACID中等(适合中小团队)互联网/PHP项目迁移、替代分库分表、亿级结构化数据
OceanBase(开源)开源自建高(兼容MySQL+部分Oracle)全自动金融级强一致高(适合专业运维)账务/支付/银行核心、金融级高可用场景
PolarDB-X(开源)开源自建极高全自动中等阿里生态自建、兼容MySQL的分布式场景
阿里云PolarDB公有云托管极高厂商屏蔽细节极低(厂商运维)阿里云体系、不想运维、亿级数据场景
腾讯云TDSQL MySQL版公有云托管极高厂商屏蔽细节极低腾讯云体系、金融/政企项目、传统项目迁移
MyCat+MySQL(传统方案)中间件组合依赖分片规则人工规划弱、坑多极高老旧历史项目无奈续命,新项目不推荐

一句话选型结论(重点记,面试+生产都能用):

  • PHP传统Web/互联网业务、想低成本迁移、自学落地、面试加分 → TiDB(开源版)最优;
  • 金融账务、支付等核心场景,追求极致稳定性 → OceanBase(开源版)或腾讯云TDSQL;
  • 全阿里云体系、不想投入运维人力、直接云上落地 → 阿里云PolarDB;
  • 海外业务、需要对接AWS生态 → AWS Aurora MySQL;
  • 老旧历史项目,无法直接迁移NewSQL → 暂时用MyCat+MySQL续命,新项目优先选NewSQL。

三、核心答疑:用上TiDB后,ElasticSearch(ES)能不用吗?

这是我在考虑TiDB时,最纠结的一个问题——很多PHP项目中,我们都会用MySQL存储业务数据,用ES做全文检索(如文章搜索、商品搜索),如果用上了TiDB,能不能把ES干掉,减少一套集群的运维成本?经过深入了解和实践验证,答案很明确:TiDB不能完全替代ES,两者定位不同,是否需要保留ES,取决于你的业务是否需要全文检索

(一)先明确:TiDB和ES的核心定位,完全不一样

我们先理清两者的核心强项,就知道为什么不能互相替代了。

1. ElasticSearch(ES)的核心强项:全文检索+非结构化数据处理

ES的本质是“检索引擎”,不是数据库,它的核心价值的是“快速检索”,尤其是全文分词检索,这是TiDB无法替代的:

  • 全文分词搜索:支持中文、英文等多种语言的分词,比如“PHP分布式数据库”,可以拆分成“PHP”“分布式”“数据库”三个关键词,用户搜索任意一个关键词,都能快速匹配到相关内容,还能实现高亮、权重排序(比如匹配度高的内容排在前面);
  • 日志检索:系统日志、操作日志、错误日志等非结构化/半结构化数据,ES能快速索引、检索,方便我们排查问题(比如根据关键词快速定位某条错误日志);
  • 多维自由筛选:支持多字段、多条件的自由筛选,比如商品搜索时,可同时根据价格、分类、销量、评价等多个维度筛选,且检索速度极快;
  • 非结构化数据处理:支持文本、图片(需插件)等非结构化数据的检索,这是TiDB完全不具备的能力。

2. TiDB的核心强项:结构化事务数据+标准SQL操作

TiDB的本质是“分布式关系型数据库”,核心价值是“存储和管理结构化事务数据”,替代的是MySQL,而不是ES:

  • 结构化数据存储:适合存储订单、用户、余额、流水等结构化数据,保证数据的强一致性和事务性;
  • 标准SQL操作:支持JOIN、事务、DDL、分页、排序等所有MySQL支持的SQL操作,PHP业务层可以直接用熟悉的方式操作;
  • 亿级数据支撑:自动分片,轻松支撑亿级、十亿级结构化数据的存储和查询;
  • 基础分析能力:通过TiFlash列存引擎,可以做简单的大数据统计分析(如月度订单量、用户活跃度统计),但无法实现ES那样的全文检索。

(二)生产落地结论:分场景判断,不用盲目保留或删除ES

结合PHP项目的常见场景,我们可以分两种情况判断,避免浪费资源,也避免踩坑:

✅ 可以下线/不用部署ES的场景(TiDB完全够用)

如果你的业务只有“结构化数据查询”,没有全文检索需求,那么ES完全可以不用部署,TiDB+TiFlash就能搞定所有需求:

  • 用户基础信息查询:根据用户ID、手机号、用户名等精准条件查询,TiDB的索引查询速度完全满足;
  • 订单、账单查询:根据订单号、用户ID、时间范围等条件查询,支持分页、排序、简单聚合(如统计某用户的订单总数);
  • 后台普通报表:如销售报表、用户报表,通过TiFlash列存引擎,能快速完成统计分析,不需要再同步数据到ES或数据仓库;
  • 精准条件查询:所有不需要中文分词、不需要模糊检索的场景,TiDB都能胜任,且性能优于ES(因为ES的检索需要经过分词、倒排索引等过程,延迟高于TiDB的精准查询)。

❌ 绝对不能替换ES的场景(必须保留)

只要你的业务有以下需求,ES就不能省,TiDB无法替代:

  • 全文分词搜索:如博客文章、商品标题/详情、新闻内容的模糊搜索、关键词检索,需要分词、高亮、权重排序;
  • 日志检索:系统日志、操作日志、错误日志的集中检索、排查,尤其是海量日志场景(如每天千万级日志);
  • 多维自由筛选:如电商商品搜索,用户可同时根据价格、分类、销量、评价、品牌等多个维度自由筛选,且要求检索速度快;
  • 非结构化文本检索:如用户评论、文章内容等非结构化文本的检索、分析。

(三)折中方案:中小团队省钱技巧(轻度搜索不用ES)

如果你的业务只有“轻度搜索”需求(比如简单的关键词模糊查询,不需要复杂分词和权重排序),不想维护笨重的ES集群,可以考虑以下折中方案,比ES更轻量、更易维护:

  • TiDB + MySQL原生全文索引:TiDB兼容MySQL的全文索引功能,对于简单的中文分词、模糊查询(如用户名、标题模糊搜索),可以凑合使用,但性能和功能远不如ES,适合轻度需求;
  • 接入轻量检索引擎:如Meilisearch、Typesense,这些检索引擎比ES轻量很多,部署简单、运维成本低,支持基本的分词、高亮、模糊搜索,适合中小团队的轻度检索需求;
  • 注意:如果是重度搜索需求(如电商商品搜索、海量文章检索),还是老老实实保留ES,避免影响用户体验。

四、结合14年PHP经验:架构演进最佳路线(生产落地实战)

结合我这些年的PHP开发经验,给大家推荐一套“极简、高效、易落地”的架构演进路线,适合大多数PHP项目,尤其是从传统MySQL分库分表迁移的项目:

(一)老架构(痛苦版,不推荐继续使用)

PHP + 单机MySQL → 数据爆涨 → 主从复制瓶颈 → MyCat/Sharding-JDBC手工分库分表 → 改代码、改SQL、跨片坑无数、运维成本爆炸

这套架构的问题的是:运维复杂、业务开发效率低、扩容困难,适合老旧历史项目暂时续命,新项目绝对不要用。

(二)新极简架构(推荐,生产落地首选)

根据业务是否有检索需求,分为两种方案,都能彻底摆脱手工分库分表的麻烦:

方案1:无检索需求(如后台管理系统、支付系统)

PHP + TiDB → 搞定所有需求

  • 不用关心分库分表,数据涨到亿级也能平稳运行;
  • PHP代码、SQL语句完全不用改,平滑迁移;
  • TiFlash负责后台报表统计,不需要额外搭建数据仓库;
  • 运维简单,只需要维护TiDB集群,比分库分表+中间件省心10倍。

方案2:有检索需求(如电商、博客、内容平台)

PHP + TiDB(核心业务数据) + 轻量检索引擎/ES(检索需求)

  • TiDB:存储订单、用户、余额等核心结构化数据,保证事务和一致性;
  • 轻量检索引擎(Meilisearch):处理轻度检索需求(如简单关键词搜索),运维成本低;
  • ES(可选):处理重度检索需求(如商品全文搜索、日志检索),只部署必要的节点,减少运维成本;
  • 数据同步:通过TiDB的binlog,将需要检索的数据同步到检索引擎,实现数据实时更新。

这套架构的优势:核心业务稳定、检索需求满足、运维成本可控,完美适配PHP生态,中小团队也能轻松落地。

五、总结:PHP后端数据库选型的终极思路

作为一名14年的PHP老程序员,经历过MySQL分库分表的折磨,也深入了解了NewSQL的优势后,我对数据库选型有了更清晰的认知,在这里分享给大家,也作为这篇博客的收尾:

1. 对于PHP项目来说,TiDB是目前最适合的开源NewSQL数据库——兼容MySQL、自动分片、免手工维护、PHP零改造,能彻底解决分库分表的痛点,支撑亿级数据高并发,无论是自学、面试还是生产落地,都是最优解;

2. 公有云托管版(如阿里云PolarDB、腾讯云TDSQL),适合不想投入运维人力的企业,开箱即用,稳定性有保障,是企业生产的首选;

3. TiDB和ES不是“二选一”的关系,而是“互补”的关系——TiDB解决结构化数据的存储、事务和基础分析,ES解决全文检索和非结构化数据处理,是否需要保留ES,取决于业务的检索需求;

4. 新项目尽量避免手工分库分表,优先选择NewSQL数据库,减少架构复杂度和运维成本;老旧项目可以逐步迁移,先将核心大表迁移到TiDB,再逐步淘汰分库分表中间件;

5. 数据库选型的核心原则:贴合业务需求、降低开发和运维成本、保证稳定性和可扩展性,不用盲目追求“高大上”,适合自己业务的才是最好的。

最后,希望这篇文章能帮到和我一样,被MySQL分库分表折磨过的后端开发者,也希望大家能快速掌握NewSQL的核心知识点,在面试和生产选型中少走弯路,彻底告别手工分库分表的痛苦!

需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan