2. 核心概念:业务数据库、搜索引擎、索引与文档、CDC

在构建搜索索引与业务数据库的数据同步方案之前,必须清晰理解四个核心概念:业务数据库(MySQL / PostgreSQL)、搜索引擎(Elasticsearch)、索引与文档、以及CDC(Change Data Capture)。这些概念构成了整个同步方案的技术基石。

2.1 业务数据库:MySQL 与 PostgreSQL

业务数据库是系统的数据源,负责存储用户、订单、商品等核心业务数据。在同步方案中,业务数据库承担“写端”角色,所有数据变更(增、删、改)首先发生在业务数据库。

特性 MySQL PostgreSQL
事务支持 ACID(InnoDB) ACID(原生)
复制机制 基于 Binlog(二进制日志) 基于 WAL(预写式日志)
CDC 支持 Binlog 解析(Row 模式) 逻辑复制 / pgoutput 插件
常见场景 电商、CMS、OLTP 金融、GIS、复杂查询
关键点:无论是 MySQL 还是 PostgreSQL,其底层日志(Binlog / WAL)都是 CDC 技术的核心数据源。同步方案必须依赖这些日志实现低延迟、无侵入的数据捕获。

2.2 搜索引擎:Elasticsearch

Elasticsearch 是一个基于 Lucene 的分布式搜索与分析引擎。在同步方案中,它承担“读端”角色,提供全文搜索、模糊匹配、聚合分析等能力。业务数据库的数据经过同步后,最终写入 Elasticsearch 的索引中。

  • 近实时搜索:数据写入后通常在 1 秒内可被搜索到。
  • 分布式架构:索引分片(Shard)分布在多个节点,支持水平扩展。
  • RESTful API:通过 HTTP 接口进行索引、搜索、管理操作。
  • 倒排索引:核心数据结构,支持高效全文检索。

2.3 索引与文档

在 Elasticsearch 中,索引(Index) 是文档的集合,类似于关系数据库中的“表”;文档(Document) 是索引中的基本数据单元,类似于关系数据库中的“行”。

关系数据库概念 Elasticsearch 概念 说明
数据库(Database) 集群(Cluster) 物理存储边界
表(Table) 索引(Index) 文档的逻辑容器
行(Row) 文档(Document) JSON 格式的数据实体
列(Column) 字段(Field) 文档中的属性
主键(Primary Key) _id 文档唯一标识
索引(Index) 倒排索引(Inverted Index) 搜索加速结构
映射关系:同步方案的核心任务就是将业务数据库中的“行”转换为 Elasticsearch 中的“文档”,并保持字段映射(Mapping)的一致性。例如,MySQL 的 varchar 类型通常映射为 ES 的 text 或 keyword 类型。

2.4 CDC(Change Data Capture)概念

CDC(变更数据捕获)是一种捕获数据库数据变更的技术,能够实时捕获插入、更新、删除操作,并将变更事件传递给下游系统。CDC 是同步方案中数据流动的引擎。

2.4.1 CDC 的两种主流实现方式

  • 基于日志的 CDC(Log-based CDC):直接读取数据库的事务日志(MySQL Binlog / PostgreSQL WAL),无侵入、低延迟,是生产环境的首选。
  • 基于轮询的 CDC(Polling-based CDC):通过定时查询业务表中的时间戳或版本号字段来发现变更,侵入性强、延迟较高,仅适用于低并发场景。
避坑提示:基于轮询的 CDC 在高并发写入场景下容易产生“漏数据”或“重复数据”问题,且对业务表有额外字段要求。在 Kubernetes 集群下的生产同步方案中,强烈推荐使用基于日志的 CDC。

2.4.2 CDC 在同步方案中的位置

CDC 组件(如 Debezium、Canal、Maxwell)部署在业务数据库与 Elasticsearch 之间,扮演数据管道角色:

  1. CDC 组件连接到业务数据库,实时读取 Binlog / WAL。
  2. 解析变更事件,生成结构化的 JSON 消息(包含操作类型、旧数据、新数据)。
  3. 将消息发送到消息队列(Kafka / Pulsar)或直接写入 Elasticsearch。
  4. 下游消费者(如 Logstash、自定义同步服务)根据消息更新 ES 索引。
CDC 数据流架构图 业务数据库 MySQL / PostgreSQL Binlog / WAL 事务日志 CDC 组件 Debezium / Canal 消息队列 Kafka / Pulsar Elasticsearch 搜索索引 CDC 组件实时读取事务日志 无侵入、低延迟捕获变更

2.5 同步方案中的核心数据流

将上述概念串联起来,形成完整的同步数据流:

  1. 写入:业务应用向 MySQL / PostgreSQL 写入数据。
  2. 捕获:CDC 组件实时捕获 Binlog / WAL 中的变更事件。
  3. 传输:变更事件通过消息队列(Kafka)进行缓冲和分发。
  4. 转换:同步服务将关系行数据转换为 Elasticsearch 文档格式。
  5. 索引:文档写入 Elasticsearch 索引,更新倒排索引。
  6. 搜索:用户通过搜索 API 查询 Elasticsearch,获取最新数据。
同步数据流全景图 业务应用 业务数据库 CDC 捕获 消息队列 同步服务 Elasticsearch 搜索用户 虚线:搜索请求直接查询 ES 实线:数据变更同步路径

2.6 概念总结

概念 角色 关键技术点
业务数据库 数据源(写端) Binlog / WAL 日志、事务 ACID
Elasticsearch 搜索端(读端) 倒排索引、分片、近实时搜索
索引与文档 数据模型 Mapping 映射、JSON 文档结构
CDC 数据管道 日志解析、变更事件、无侵入捕获
核心认知:同步方案的本质是将业务数据库的“行变更”实时转化为 Elasticsearch 的“文档变更”。CDC 是连接两者的桥梁,而索引与文档是数据在两端的不同表现形式。理解这些概念,是后续设计同步架构、选型组件、处理数据一致性问题的前提。