考虑一个问题:需要抽取哪部分数据加载到数据仓库?是完全抽取还是变化数据捕获?
如果数据量很小,则采取完全源数据抽取;如果源数据量很大,则抽取变化的源数据,这种数据抽取模式叫做变化数据捕获,简称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方法是基于日志的方式。数据库会把每个插入、更新、删除操作记录到日志里。
作者:阿猫阿狗Hakuna
链接:https://www.jianshu.com/p/dd0448e67bf3
共同学习,写下你的评论
评论加载中...
作者其他优质文章