虽然该方法在管理已删除行的方面 , 比时间戳CDC的效果更好 , 但是它在发现差异时 , 所需要的CPU资源较为显著 。而且此类开销会随着数据数量的增加 , 而呈线性增加 。此外 , 针对源数据库或生产环境的分析查询 , 也可能会降低应用本身的性能 。对此 , 您可以定期将数据库导出至暂存环境中进行比较 。不过 , 随着数据量的增加 , 此类传输的成本也会呈指数级增长 。
表差异的另一个问题是 , 它无法捕获数据的临时性变更 。例如 , 假设有人更新了某个字段 , 但随后又将其变更回了原始值 。那么 , 如果您只是运行一个简单比较的话 , 将无法捕获到这个变更事件 。而由于diff方法本身存在着延迟 , 因此也无法实时执行 。
优点:
- 可使用各种原生的SQL脚本 , 来获取变更数据的准确视图 。
- 由于此方法会用到数据源的三个副本:原始数据、先前快照和当前快照 , 因此整体存储需求会有所增加 。
- 在那些具有繁重事务负载的应用程序中 , 无法得到很好的扩展 。
基于触发器的CDC
文章插图
- 我们需要为参与数据复制的每个表 , 创建三个触发器 , 当数据记录发生如下特定事件时 , 则会触发相应的操作:
- 将新的记录插入数据表时 , 触发的是INSERT触发器 。
- 数据记录发生变更时 , 触发的是UPDATE触发器 。
- 数据记录被删除时 , 触发的是DELETE触发器 。
- “事件历史”的影子表被存储在数据库本身 , 并由各种状态改变事件的序列所组成 。
- 每当对象的状态发生变化时 , 新的事件都会被附加到该序列中 。据此 , 有关变更记录的信息 , 也会被转移到“事件历史”的影子表中 。
- 最后 , 根据历史表中的各个事件 , 变更会被传输到目标数据库中 。
文章插图
由于源数据库中的每个表都需要一个触发器 , 因此在有变更发生时 , 在操作表上运行触发器的开销也会随之增加 。不过 , 由于基于触发器的CDC是工作在SQL级别上的 , 因此许多用户会趋向于使用该方法 。
优点:
- 非常可靠且详尽 。
- 影子表可以提供所有事务的不可变详细日志 。
- 每次插入、更新或删除数据行时 , 都需要对数据库进行多次写入 , 此举降低了数据库的性能 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 电脑打印照片怎么打印两寸 如何打印2寸照片
- 电脑定时关机如何解除 如何让电脑定时关机
- 爆料快速涨粉的3大秘诀 新手如何运营抖音好涨粉
- 怎么制作微信小程序 如何制作微信小程序
- 手机怎么下载两个微信 手机如何下载两个微信
- 微信怎么发高清视频 微信如何发高清视频
- 手机丢失如何追踪位置 手机丢了如何找回
- 高血压最怕的三种水果 如何预防高血压
- 不删除数据合并分区 硬盘如何合并分区
- 大学为什么禁止共享单车 共享单车如何使用