AI 术语表 · 进阶 · 数据工程
CDC
CDC(Change Data Capture,变更数据捕获)是一种从数据库中只挑出新增、修改或删除的数据,并立即传递给其他系统的技术。它不必每次都整体复制全部数据,而是只追踪“发生变化的部分”。
工作原理
大多数数据库为应对故障,会保留按顺序记录所有变更的日志(事务日志)。基于日志的 CDC 读取这一日志,将其转换为“新增了这一行、这个值被修改、这一行被删除”之类的变更事件并输出。事件通常经由消息队列或事件流,传递到数据仓库、搜索索引、缓存等多个地方。无法使用日志时,也会采用定期查询“最后修改时间”列或设置触发器的方式,但容易漏掉删除操作,或给源数据库带来负担。
为什么重要
要把运营数据库的内容快速反映到分析、检索、AI 系统中,每次整体复制的方式既慢又成本高。使用 CDC 只迁移变化的部分,对源数据库的负担小,分析数据也不会延迟数小时,而是几乎实时跟进。在 RAG 系统中,文档被修改时只对相应部分重新嵌入并更新向量数据库,用的也是同样的原理。归根结底,它起到“让多个系统看到同一份最新数据”的纽带作用。
注意事项
源表的结构(模式)发生变化时,接收端也需要随之调整,因此需要数据契约之类的约定。事件可能重复或乱序到达,因此接收端的设计要保证同一事件处理两次结果也相同。首次连接时,需要先将现有数据整体复制一次(快照),再接上此后的变更。包含个人信息的变更也会原样流转,因此在传递环节要一并考虑去标识化和权限管理。
CDC 方式比较
基于日志读取事务日志
- 对源数据库负担小
- 连删除也能无遗漏捕获
- 需针对各数据库配置
基于查询定期查询修改时间列
- 配置简单
- 容易漏掉删除
- 查询频繁时增加数据库负担
基于触发器变更时执行触发器
- 在数据库内部直接捕获
- 影响写入性能
공통 都是只迁移“变化部分”的方法
示例
给网上商城的订单数据库接入 CDC 后,每当顾客下单或配送状态发生变化,这些变更都会流入事件流。接收这些事件,可以几乎实时地更新数据仓库中的销售仪表盘,同时让商品搜索索引和客服聊天机器人参考的数据也保持最新。开源连接器或云端的数据复制服务被广泛用于这类用途。