首页/数据/NoSQL 速查/主存储到搜索索引的同步方案
选型与架构50 条

主存储到搜索索引的同步方案

检索副本与主存储之间的同步有四种常见做法:应用双写、CDC 投递、消息队列中转、定时全量重建加增量补偿。无论哪种都要处理删除事件与版本乱序,并保留从主存储全量重建索引的能力。

NoSQL 速查数据更新于 2026-10-12

方案对照

方案优点注意点
应用双写链路短、实现直接写失败要补偿;两个写路径逻辑对称
CDC(binlog/oplog)不侵入业务、顺序有保障组件多、延迟与重复投递
消息队列中转削峰、可多消费方消息积压与顺序性要设计
定时全量重建 + 增量可作为兜底修复手段全量期间增量要并行捕获

版本控制消除乱序(ES external version 示例)

版本控制消除乱序(ES external version 示例)
curl -X PUT "localhost:9200/orders/_doc/1001?version=7&version_type=external" \
  -H 'Content-Type: application/json' \
  -d '{"orderId":1001,"status":"paid","updatedAt":"2026-10-12T10:00:00Z"}'

# 旧版本号的写入会被拒绝:version conflict,消费者跳过即可
删除要显式传递:软删除(status=deleted 过滤)或发删除请求;只同步新增更新而漏删除,会让搜索结果长期残留已删数据。

易错点

  • 同步链路没有版本字段时,乱序到达的旧事件会覆盖新状态
  • 忽略删除事件:搜索/缓存中已删数据长期存在,用户可见且排查困难

数据来源与参考

  • Elasticsearch Guide: Indexing and versioning
  • Debezium Documentation: Connectors
  • MongoDB Manual: Change streams
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌