数据抽取中的CDC(变化数据捕获)方式

       考虑一个问题:需要抽取哪部分数据加载到数据仓库?是完全抽取还是变化数据捕获?
       如果数据量很小,则采取完全源数据抽取;如果源数据量很大,则抽取变化的源数据,这种数据抽取模式叫做变化数据捕获,简称CDC。
       CDC大体分为两种:侵入式和非侵入式。侵入式指CDC操作会给源系统带来性能影响,只要CDC操作以任何一种方式对源数据库执行了SQL操作,就认为是侵入式的。
       常用的4种CDC方法是:基于时间戳的CDC、基于触发器的CDC、基于快照的CDC和基于日志的CDC,其中前三种是侵入式的。

1.基于时间戳的CDC

       抽取过程可以根据某些属性列来判断哪些数据是增量的,最常见的属性列有以下两种:
1.时间戳:最好有两个列,一个插入时间戳,表示何时创建,一个更新时间戳,表示最后一次更新的时间。
2.序列:大多数数据库都提供自增功能,如果数据库表列被定义成自增的,就可以很容易地根据该列识别新插入的数据。

       这种方法是最简单且常用的,但是有如下缺点:
1.不能记录删除记录的操作
2.无法识别多次更新
3.不具有实时能力

2.基于触发器的CDC

       当执行INSERT、UPDATE、DELETE这些SQL语句时,可以激活数据库里的触发器,并执行一些动作,就是说触发器可以用来捕获变更的数据并把数据保存在中间临时表里。然后这些变更数据再从临时表取出,抽取到数据仓库的过渡区中。大多数场合下,不允许向操作型数据库里添加触发器,且这种方法会降低系统性能,所以用的不多。
       可以使用源数据库的复制功能,将源库的数据备用到备用库上,在备库上创建触发器。

3.基于快照的CDC

       如果没有时间戳,不允许使用触发器,就要使用快照表。可以通过比较源表和快照表来获得数据变化。
       基于快照的CDC可以检测到插入、更新和删除的数据,这是相对于基于时间戳的CDC方案的有点。其缺点是需要大量存储空间来保存快照。

4.基于日志的CDC

       最复杂的和没有侵入性的CDC方法是基于日志的方式。数据库会把每个插入、更新、删除操作记录到日志里。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,177评论 2 89
  • 宫崎骏的《千与千寻》里,那个无脸男给我的感动很深刻。我所理解的他是一种孤独到极点的代表。当遇到善良的小千时,他的世...
    瑜伽喵阅读 4,153评论 17 14
  • 剪短的发,不带一丝凌乱与分叉 一丝丝,一缕缕, 宣告分离的神秘与神话; 暗暗的红,装点久违的黑色挥洒, 一处处,一...
    Hnlyx阅读 3,093评论 0 0
  • 之前一直在追求干货,原因很简单,简单快捷省时省里,唯一需要付出的就是对他们的理解而已,简直是高效学习的不二之选。 ...
    四横阅读 1,679评论 0 0

友情链接更多精彩内容