MySQL / Doris / ES 三角选型:数据密集型 AI 后端怎么决定谁做什么?
问题
“我应该把数据放在哪?”
这是任何一个数据密集型 AI 后端项目启动时第一个会撞上的问题。但不是”哪个最好”的问题,而是”应该用哪几个、各自负责什么”的问题。
今天 Java 后端做 AI 应用,可选的”核心数据组件”基本就是这三件套:MySQL、Doris、Elasticsearch。再加一个 MQ 做异步。
但这三个东西看起来都能存数据、都能做查询,凭什么非要全用上?为什么不能只用一个?
重新认识这三件东西
在聊选型之前,必须先纠正一个常见误解:这三件东西不是同类。
| 组件 | 真正擅长的事 | 不擅长的事 |
|---|---|---|
| MySQL | 强一致事务、随机点查、行级更新、垂直扩展 | 大规模 OLAP 聚合、模糊搜索 |
| Doris | 大数据量 OLAP 聚合、列存压缩、向量化执行 | 强事务(只能最终一致)、行级单点更新 |
| Elasticsearch | 倒排索引全文搜索、近似向量检索、多维度过滤 | 强事务、复杂 JOIN、精确聚合统计 |
它们在 2026 年都开始”补对方的能力”:MySQL 9.2 有了向量搜索,Doris 4.x 有了全文搜索+向量+AI Functions,ES 也有了 PPL 之类的 SQL-like 查询。
但这不意味着”现在可以三选一了”。每补一个能力,都需要付出代价——HNSW 索引让 MySQL 内存翻倍,Doris 全文搜索的分词体验不如 ES,ES 的事务能力依然鸡肋。
三角决策的三个真实场景
场景一:传统业务 + AI 搜索
- 业务数据 → MySQL(用户、订单、配置,强一致)
- 搜索/向量 → ES(全文+语义+聚合,索引多维度)
- 离线分析 → Doris(业务指标的复杂聚合)
这是 90% 的 AI 后端的真实组合。MySQL 写、ES 同步、Doris 异步 ETL。
为什么不是 Doris 做 ES 的事? Doris 4.x 的全文搜索和向量搜索在性能上能打,但生态分词器、query DSL、相关性调优经验都集中在 ES。把搜索逻辑迁到 Doris,等于把 10 年积累丢掉,从零调。
场景二:AI 数据洞察平台
- 原始日志/事件 → MQ → Doris(实时写入 + 即席分析)
- 业务维度数据 → Doris 也存一份(拉链表 + 维度宽表)
- 偶尔的全文搜索 → Doris 内置全文索引够用
这种场景是 Doris 4.x 真正发力的时候——一个 Doris 把 OLAP + 全文 + 向量全包,运维简单度飞升。前提是接受最终一致性。
场景三:极简的 RAG Demo / 中小规模知识库
- 业务数据 + 向量数据 → MySQL 9.2 一个库搞定
- ES 都不需要
几万到几十万文档的内部知识库 RAG,MySQL 9.2 的 HNSW 完全扛得住,省了至少 2 个组件。架构最简单,运维最轻松,但上了 100 万文档就该考虑拆出来。
一个反直觉的事实:MySQL + ES + Doris 不是”全用了”
更准确的描述是:
MySQL 是”主数据真相源”,ES 是”搜索加速层”,Doris 是”分析镜像层”。
数据流向是单向的:
1 | 写:业务 → MySQL → MQ → 消费 → ES / Doris |
任何”写 MySQL 同时写 ES”的双写模式都该升级为 MQ 异步 + 事务消息,详见 ES 与 MySQL 双写一致性:MQ 能解决到什么程度?。
我自己用的决策清单
每次碰到新项目,我会按这个顺序问:
- 数据强一致性需求多大? 大 → MySQL 必须有;不大 → 可以放进 Doris。
- 搜索需求是全文还是结构化? 全文为主 → ES;结构化过滤为主 → Doris 也能做。
- 向量规模到 100 万了吗? 到了 → ES 或专用向量库;没到 → MySQL 9.2 一把梭。
- OLAP 聚合的复杂度? 高(多表 JOIN + 窗口 + 子查询) → Doris;低 → MySQL 也行。
- 团队对哪个最熟? 优先选最熟的,少一个上手成本。
第 5 条经常被忽略,但它决定了”出问题时谁去修”。组件选型的最后一关永远是团队能力,不是性能跑分。
意味着什么?
对正在做 AI 后端的 Java 工程师来说,2026 年的选型逻辑已经清晰:
- 不要为”看起来更强”上更多组件。多一个组件,多一份一致性、监控、升级、值班负担。
- 不要为”省一个组件”硬扛。Doris 做事务、ES 做聚合、MySQL 做全文,每一项都是血泪。
- 组件不是替代关系,是分工关系。MySQL 9.2 有向量搜索不意味着 ES 该被淘汰,ES 有 PPL 不意味着 Doris 该退场。
未来 12 个月最值得关注的不是”哪个会赢”,而是当一个组件的能力溢出到另一个组件的传统领域时,怎么调整自己架构的边界。这是数据密集型 AI 后端工程师最核心的判断力。
