CDC(Change Data Capture) 数据变化捕获 | | | |
实现方式 | 原理 | 缺点 | 优点 | 典型方案 |
时间戳/版本号/修改状态列 | 根据更新时间戳列,识别数据变化。 一般是非实时。 | 1) 实时性 2) 不能识别多次更新 3) 不能记录删除操作 4) 要改程序 | | | |
快照 | 通过比较源表和快照表来获得数据变化。 | 1) 实时性 2) 不能识别多次更新 3) 需要大量存储空间保存快照 4) 做数据比较的消耗 | | | |
触发器 | 创建数据增/删/改的触发器,将变更数据写入临时表。 | 1) 影响数据库性能 2) 引入一些不可控的影响 | | SymmetricDS java开源项目 | 1)会根据用户的配置自动安装触发器 2)会定期地再次安装新的触发器和更新原有的触发器(默认情况下,是在每天午夜) 3)数据库触发器记录的数据变化都在DATA表 4)变化的数据被插入到DATA表之后,会被分批交给节点处理 |
数据库日志 | 绝大多数数据库都会有种日志,记录操作产生的数据变更,用来做多副本同步或者数据恢复。注:得到的是行级更改,如:一条update语句可能修改多行记录。 | 1) 开发难度 ? a)没统一标准 ? b)格式不公开 | 1) 实时性 2) 通过数据库自身机制实现 | Oracle ? GoldenGate ? LogMiner ? Xstreams MySql ? Maxwell Debezium | GoldenGate是直接解析的日志 Debezium及很多三方方案都是基于LogMiner/Xstreams |
抓取命令 | 通过网络抓包得到发给Oracle数据库的TNS命令包(仅Oracle响应是执行成功的),从中解析得到数据变更操作的语句和参数。 | 1) 存在漏命令包的可能 ? a)抓包程序故障 2) 开发难度
其他不确定:加密、命令包顺序 | 1) 实时性 2) 不依赖数据库功能 | | |