§ 00概述
不是所有数据都该住在关系数据库里。当业务出现多维组合查询、全文检索、海量写入这三类需求时,正确答案往往不是继续给 MySQL 加索引,而是把这类数据「换道」到专门的引擎:检索进 Elasticsearch,文档与时序进 NoSQL。
本章的数据集核心是一张选型矩阵:关系库、搜索引擎、文档库、宽列库、时序库各自的能力边界,以及「主库 + 异构副本」的同步方案。换道不等于抛弃关系数据库——它仍是交易与一致性的锚点,检索与海量场景才是新引擎的战场。
§ 01演进定位
关系数据库的舒适区是事务与结构化关联查询。一旦查询模式变成「多条件 + 模糊 + 聚合」(商品搜索、日志分析、用户画像筛选),B+ 树索引就会力不从心——LIKE 前缀模糊直接全表扫,多维组合索引盖不住。
搜索引擎(倒排索引)天然为「查」而生:分词、相关性排序、聚合分析开箱即用;NoSQL 各家族则按数据形态分工:文档库存灵活结构、宽列库扛海量行、时序库吃高吞吐写入。
架构上的正确姿势是异构而非替换:MySQL 继续做交易主库(唯一事实源),数据经 CDC 管道实时同步到搜索/NoSQL 副本,各查询各的。主库的权威性与专用引擎的查询能力同时拿到。
§ 02技术架构
检索链路:binlog → CDC(Canal/DTS/Kafka)→ 消费者组装文档 → 写入 ES 索引。索引设计按查询场景倒推:分词器、字段类型、路由按租户/类目,避免一张大索引包打天下。
ES 集群基线:3 节点起步(2C8G/节点起),冷热角色分离,副本数 1 起步;分片数按「单分片 20-40GB」预估并预留余量。索引生命周期管理(ILM)自动滚动与清理。
NoSQL 分工:文档库(MongoDB)承接灵活 Schema 的内容类数据;宽列(HBase/Cassandra 类)承接海量行;时序库承接监控与埋点。数据管道与 ES 共用同一套 CDC,避免多点同步互踩。
§ 03实施路径
第一阶段(1 周)查询画像:统计慢查询与 LIKE 查询的真实模式,映射到目标引擎能力,产出「换道数据清单」(哪些表、哪些字段、TTL 多长)。
第二阶段(2 周)管道与索引:CDC 链路搭建、ES 索引设计与分词验证、别名机制就位(重建索引零停机)、数据回补脚本。
第三阶段(1-2 周)切流与观测:检索接口灰度、相关性人工评估(Top10 相关性)、延迟与命中率看板、回补与重索引演练。总周期 4-5 周。
§ 04客户价值与适用判断
该换道:搜索框成为核心功能、报表聚合把主库 CPU 打满、日志/埋点写入量超过关系库承载、或非结构化数据占比过半。
不该换道:只为「技术先进」;交易数据(订单、账务)永远留在关系库——搜索引擎不承担交易一致性,这是红线。
规模提醒:ES 最小有意义规模是 3 节点,月成本千元级。查询量真的很小的话,先把数据库索引和 SQL 治理做透,别为 < 10 QPS 的搜索上集群。
§ D01组件与选型清单
DATA搜索引擎与 NoSQL · 标准组件栈主库 + 异构副本
| 层级 | 组件 | 选型建议 | 职责与要点 |
|---|
| 交易主库 | MySQL(沿用 05 章架构) | 唯一事实源 | 交易与一致性锚点,不承担检索压力 |
| 搜索引擎 | Elasticsearch 3 节点 | 2C8G/节点 · 冷热分离 | 全文检索、多维聚合,别名机制支持零停机重建 |
| 文档库 | MongoDB 副本集 | 按内容类数据 | 灵活 Schema,内容与画像类数据 |
| 时序库 | 云时序数据库 | 监控/埋点专用 | 高吞吐写入 + 自动降采样与 TTL |
| 同步管道 | CDC + Kafka | binlog 订阅 | 主库变更实时进异构副本,幂等消费 |
| 索引治理 | ILM 生命周期 | 滚动 + 自动清理 | 索引按天/周滚动,存储成本可控 |
| 检索监控 | 慢查询 + 命中率看板 | P95 < 200ms | 相关性抽样评估机制化 |
CDC 消费必须幂等:重复消费是常态而非异常,文档写入按 _id 天然去重。
§ D02成本测算数据集
DATA成本测算示例(检索换道增量 · 月度)月度 · CNY
| 项目 | 规格 | 月成本 | 说明 |
|---|
| ES 集群 | 3 节点 · 2C8G · SSD | ≈ ¥1,100 | 冷热分离可再降 30% |
| Kafka | 实例 3 分区 | ≈ ¥150 | CDC 事件通道 |
| CDC 同步 | DTS/binlog 订阅 | ≈ ¥100 | 持续运行 |
| 时序库 | 按写入点计费 | ≈ ¥80 | 监控埋点可选 |
| 存储增量 | ES SSD 300GB | 含集群价 | 按 20-40GB/分片规划 |
增量合计 ≈ ¥1,430/月 · 检索 P95 从秒级进入 200ms
本章是系列中「绝对成本」最高的一跳,因此触发条件也最苛刻:查询模式错位是前提,不是可选项。
§ D03关键指标基准
DATA可用性与体验基线SLO 参考
| 指标 | 关系库硬扛基线 | 本阶段目标 | 行业良好 |
|---|
| 检索 P95 | 1-5s(LIKE 全表扫) | < 200ms | < 100ms |
| 索引同步延迟 | — | < 1 分钟 | < 5 秒 |
| 聚合查询 CPU(主库) | 峰值 80%+ | < 10%(移出主库) | 接近 0 |
| Top10 相关性人工评估 | — | ≥ 80% 相关 | ≥ 90% + 算法迭代 |
| 数据一致性(主库 vs 副本) | — | 对账差异 = 0 | 实时监控自动修复 |
§ D04演进触发信号
DATA什么时候必须走向下一阶段任一命中即评估
| 触发信号 | 判定阈值 | 演进方向 |
|---|
| 服务数量失控 | 手工部署 > 10 个服务 | 微服务治理体系(09) |
| 团队并行冲突 | 多团队改同一代码库 | 业务拆分(08)先行 |
| 交付环境不一致 | 「我本地是好的」月度重现 | 容器化统一交付(10) |
| 资源利用率低 | 峰值 CPU < 15% 但无法缩容 | 容器化混部(10) |
| 发布窗口排不过来 | 服务互锁发布需半天 | CI/CD 与服务自治(09) |
§ D05上线检查清单
查询画像先行慢查询与 LIKE 模式统计完毕,换道清单经评审
别名机制就位ES 重建索引通过别名原子切换,全程零停机
幂等消费验证CDC 重放一整天数据,异构副本与主库对账一致
相关性评估Top10 人工相关性 ≥ 80% 才切流量,建立持续评估机制
主库卸压确认聚合与检索流量迁移后,主库 CPU 峰值下降可观测
备份与恢复ES 快照到对象存储,恢复演练一次
§ D06高频翻车点
把 ES 当主库唯一事实写进搜索引擎,主库与副本角色颠倒,一致性事故不可避免
一张大索引用到底不分场景不分词,检索相关性与性能双输
分片数一次定死数据增长后单分片膨胀到 80GB+,重建索引苦不堪言
CDC 不幂等重复消费产生脏数据,对账永远差一点
同步延迟无监控索引落后用户无感知,客服先于系统发现「搜不到刚下的单」
§ D07常见问答
DATA搜索引擎与 NoSQL · 问答数据集4 组
| 问题 | 答案 |
|---|
| MySQL 加索引真的解决不了吗? | 等值与范围查询可以;但「多条件 + 模糊 + 排序 + 聚合」的组合是倒排索引的主场,B+ 树在模糊匹配上结构性劣势,加索引只是延缓。 |
| ES 集群要多少台起步? | 生产环境 3 节点是底线(脑裂防护 + 角色分离),2C8G/节点配 SSD。低于这个规模不如用数据库全文索引或云托管检索服务凑合。 |
| 数据和主库不一致了怎么办? | 预防优先:CDC 幂等 + 全量对账任务(夜间比对行数与校验和)。出现差异时以主库为准触发定向回补,不要手改副本。 |
| MongoDB 和 ES 重复吗? | 不重复。ES 解决「怎么查」,MongoDB 解决「怎么存」——灵活结构的海量文档。很多内容型业务两者并用:MongoDB 为源、ES 为检索副本。 |
§ D8角色分工数据集
DATA角色分工数据集本阶段人员配置
| 角色 | 核心职责 | 投入度 | 备注 |
|---|
| 后端 | 索引设计 · CDC 管道 · 检索接口 | 70% | 换道主力 |
| 运维 | ES 集群 · 快照 · ILM | 40% | 集群基线维护 |
| 数据(兼) | 对账任务 · 质量报告 | 30% | 一致性看门人 |
| 业务 | 相关性人工评估 | 10% | 每周 Top10 抽评 |
§ D9风险登记册
DATA风险登记册概率 × 影响
| 风险 | 概率 | 影响 | 缓解措施 |
|---|
| 主库与检索副本不一致 | 中 | 致命 | 幂等消费 + 夜间全量对账 + 定向回补 |
| 索引膨胀拖垮集群 | 中 | 严重 | ILM 滚动 + 分片 20-40GB 规划 |
| 相关性劣化无人察觉 | 中 | 中 | 每周人工评估机制化 |
| CDC 单点断流 | 低 | 严重 | 断点续传 + 延迟告警 + 全量回补脚本 |
§ D10监控告警清单
DATA监控告警清单阈值即责任
| 监控对象 | 指标 | 告警阈值 | 响应动作 |
|---|
| 同步管道 | 索引延迟 | > 5 分钟 | 短信 · 管道健康排查 |
| 检索 | P95 延迟 | > 300ms | 工单 · 慢查询与资源 |
| ES | 堆内存 / 磁盘水位 | > 75% | 电话 / 工单 · 扩容或 ILM |
| 数据一致性 | 对账差异 | > 0 | 电话 · 定向回补 |
| 管道积压 | Kafka Lag | > 阈值 | 短信 · 消费能力扩容 |
§ D12实施时间线
DATA实施时间线周为单位
| 周次 | 里程碑 | 责任角色 | 出口物 |
|---|
| W1 | 查询画像 | 后端 + 业务 | 换道清单评审通过 |
| W2-3 | 管道与索引 | 后端 + 运维 | CDC 联通 · 索引别名就位 |
| W4 | 回补与对账 | 数据 | 全量回补完成 · 差异 = 0 |
| W5 | 灰度切流 | 全员 | 检索接口 10%→100% · 评估达标 |
§ D13SLA 与容灾基线
DATASLA 与容灾基线对内承诺
| 指标 | 基线承诺 | 度量方式 | 未达标处置 |
|---|
| 检索 P95 | < 200ms | APM 采样 | 分片与缓存优化 |
| 索引延迟 | < 1 分钟 | 延迟监控 | 管道扩容 |
| 集群可用性 | 99.9% | 集群健康 API | 3 节点 + 快照常备 |
| 一致性 | 对账差异 = 0 | 夜间全量对账 | 回补脚本化 |
§ D14应急预案
DATA应急预案一页纸预案
| 故障场景 | 典型现象 | 处置步骤 | 升级路径 |
|---|
| ES 集群红/ yellow | 分片未分配 | ① 查分配原因 ② 磁盘/节点修复 ③ 必要时重路由 | 数据风险 → 停写排查 |
| 管道断流 | 索引延迟放大 | ① 断点续传 ② 追平积压 ③ 核对幂等消费 | 积压过大 → 全量回补 |
| 检索结果劣化 | 相关性投诉 | ① 比对分词与映射变更 ② 回滚索引版本 ③ 评估流程复盘 | 核心功能 → 立即 |
| NoSQL 主节点故障 | 副本集选举 | ① 确认自动切换 ② 连接串健康 ③ 数据完整性抽查 | 反复选举 → 升级厂商 |
§ D15首年成本明细
DATA首年成本明细CNY
| 项目 | 月成本 | 年成本 | 备注 |
|---|
| ES 3 节点 2C8G | ≈ ¥1,100 | ≈ ¥13,200 | 冷热分离可再降 |
| Kafka 云托管 | ≈ ¥150 | ≈ ¥1,800 | 3 分区起步 |
| CDC 持续同步 | ≈ ¥100 | ≈ ¥1,200 | binlog 订阅 |
| ES 快照存储 | ≈ ¥40 | ≈ ¥480 | 每日快照 |
首年增量 ≈ ¥16,680——全系列最贵一跳,务必让「查询模式错位」成为唯一的立项理由。
§ D16团队能力要求
DATA团队能力要求按需补齐
| 能力项 | 要求级别 | 如何补齐 |
|---|
| 倒排索引与相关性 | 必须 | 索引设计评审 + 分词实测 |
| CDC 管道工程 | 必须 | 幂等消费 + 回补演练 |
| ES 集群运维 | 必须 | ILM + 快照恢复演练 |
| 数据对账方法 | 建议 | 夜间对账任务值班 |
§ D17关键决策速查(ADR)
DATA关键决策速查(ADR)本阶段 4 个决策
| 决策 | 备选方案 | 结论理由 |
|---|
| 换道引擎 | ES vs 云托管检索 | ES 生态成熟;托管换运维 |
| 集群规模 | 2 节点 vs 3 节点 | 3 节点:脑裂防护 + 角色分离 |
| 同步管道 | 自建 Canal vs DTS | DTS 管道少踩坑;自建要配监控 |
| 文档库 | MongoDB vs PG JSONB | 按 Schema 灵活度与团队栈 |
§ D18高频面试题
DATA高频面试题本阶段 4 题
| 问题 | 考察点 | 优秀回答特征 |
|---|
| 为什么不继续用 MySQL LIKE? | 选型论证 | 倒排索引与 B+ 树的结构性差异 |
| ES 零停机重建索引怎么做? | 工程能力 | 别名原子切换流程完整 |
| CDC 消费怎么保证幂等? | 数据工程 | 按 _id 去重 + 全量对账 |
| 相关性怎么评估? | 质量意识 | Top10 人工评估机制化 |
§ D19命令与操作速查
DATA命令与操作速查检索专项
| 场景 | 命令/操作 | 说明 |
|---|
| 集群健康 | GET _cluster/health | green/yellow/red |
| 慢查询 | slowlog 设置与查看 | 按索引粒度 |
| 别名切换 | POST _aliases 原子操作 | 重建索引标准动作 |
| 分片分布 | GET _cat/shards | 单分片 20-40GB 校验 |
§ D20采购与商务要点
DATA采购与商务要点本阶段采购项
| 采购项 | 询价要点 | 商务注意 |
|---|
| ES 集群 | 节点规格 + SSD 容量 + 快照 | 冷热分离降本 30% |
| Kafka | 分区数与保留时长 | 保留期与磁盘挂钩 |
| 云托管检索 | 兼容 ES API 的版本差异 | 锁定版本避免锁定厂商 |
§ D21阶段 KPI 卡
DATA阶段 KPI 卡验收口径
| KPI | 口径 | 目标 |
|---|
| 检索 P95 | APM 采样 | < 200ms |
| 索引延迟 | 端到端 | < 1 分钟 |
| 一致性 | 夜间对账 | 差异 = 0 |
| 相关性 | 人工评估 | ≥ 80% |
§ D22交接清单
DATA交接清单换人不换知识
| 交接项 | 载体 | 验收 |
|---|
| 索引设计文档 | Wiki | mapping 与分词依据可查 |
| 管道监控大盘 | 监控平台 | 延迟/积压可观测 |
| 回补脚本 | Git | 全量重建演练通过 |
| 相关性评估记录 | 归档 | 每周评估有台账 |
§ D23演进检查点评审
DATA演进检查点评审走向 08 章前
| 检查项 | 达标标准 | 结果 |
|---|
| 对账零差异 | 夜间全量对账通过 | 通过/不通过 |
| 幂等消费验证 | 重放一天数据一致 | 通过/不通过 |
| 相关性评估 | Top10 人工评估 ≥ 80% | 通过/不通过 |
| 快照恢复演练 | ES 快照恢复成功 | 通过/不通过 |