[笔记]CDC(Change Data Capture) 数据变化捕获,实现原理 方案

整理了下对CDC的理解,以及基于Oracle的实现方式。备案如下

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) 不依赖数据库功能
  

基于 Oracle redo log 实现数据变化捕获
方式介绍说明
Oracle提供解析原生日志  
GoldenGate  
LogMiner是由一组SQL包和一些动态视图组成,能帮助我们从 redo logs (Online/Offline) 中提取数据。特别是可以分析出所有对于数据库操作的DML和DDL语句。Oracle 8i 开始提供的工具
后续可能被阉割或砍掉?Vs. Xstreams & OGG
XStreamsOracle数据库组件和API,能够直接解析出数据库操作的DML和DDL发送给应用程序。需要购买OGG授权
最初可能是要给OGG用的,但最终OGG是直接解析的 redo log
三方库/工具OpenLogReplicator
(c++开源项目)
是一个转换器,读取 Oracle redo log 并输出成JSON。1) 不支持 Oracle 11.2 之前的版本;
2) 不保证能捕获100%完整的数据库事务操作
  a) 如果遇到无法解码的 redo log 会立即停止,但用户可以强制跳过无效的日志记录并继续工作;
  b) 有许多安全检查来验证 redo log 的完整性;
Debezium
(java开源项目)
支持多种数据库的数据捕获,但对Oracle 数据库实际是调用  LogMiner or Xstreams 实现的。 
  

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/debug_fan/article/details/121035162

posted @ 2022-05-07 14:25  俊哥V  阅读(407)  评论(0编辑  收藏  举报