关于:转载/知识产权

本文遵循 GPL开源协议,如若转载:

关于:本文由来

本文系成都四方伟业公司第二阶段产品培训(ETL融合数据产品)的试题部分的个人思考答案(员工:Zeng Tai - Johnny)

  • 文中所涉技术、观点均具备行业内公开技术的特征
  • 博文内容与公司和产品本身无关,故与保密无关
  • 网络中,CDC相关博文甚少,故而觉得有必要写一篇笔记性的、科普性的文章~
  • 如若描述不当之处,欢迎指正、并进一步沟通,感谢~

1 CDC 概念

1.1 定义

Change Data Capture,变化的数据捕获,也称:【增量数据抽取】(名词解释)

CDC是一种实现数据的增量抽取解决方案,是实现【ETL整体解决方案】中的一项子方案/子问题。(对CDC的定位)

1.2 需求背景

在ETL项目中,面临需要抽取哪部分数据加载到数据仓库?全量抽取,还是增量抽取?

1.3 考察指标

如何捕获变化的数据是增量抽取的关键,对捕获方法一般有2点要求:

  • 准确性:能够将业务系统中的变化数据准确地捕获到;
  • 性能:尽量减少对业务系统造成太大的压力,影响现有业务。

2 CDC 常见解决方案

按CDC方案的任一操作是否对数据源系统产生影响(性能、功能等),分为:【侵入式CDC】、【非侵入式CDC】

按CDC方案所抽取的数据与数据源系统的变化数据是否在规定时间内同步,分为:【同步CDC】、【异步CDC】

以下,对各实现方案进一步地详细描述。

2.1 基于时间戳的CDC 【侵入式CDC + 异步CDC】

  • 【过程】

    首先,对数据加上【时间戳】;(加时间戳)

    然后,全记录中通过【关键字段】(新设判断是否新增、更新等状态的属性、索引等)对比;(全量对比)

    最终,将未出现在已采集/存储的数据集中的新采集数据记录存储下来;反之,则:不予采集/存储。

  • 【特点】简单、常用、暴力

    1 需要【新建数据库表】,以存储变化的、新增的数据记录。

    2 大数据量的情况下,需要有优异的查找、排序【算法】作支撑,否则,对比效率低而导致效率低下

    3 【无法实时】捕获

    4 不能记录删除记录的操作

    5 无法识别单位捕获时间差内的【多次更新】(∵无法实时捕获,存在抽取时间差)

2.2 基于触发器的CDC 【侵入式CDC / 非侵入式CDC + 同步CDC】

  • 【概念】

    当执行INSERT、UPDATE、DELETE等SQL语句时,可预先编写、激活数据库里的触发器,以调用、执行数据抽取动作。

  • 【过程】

    首先,可用触发器来捕获变更的数据,并把数据保存在中间临时表里;

    然后,将这些变更数据再从临时表取出,抽取到数据仓库的过渡区中。

  • 【特点】实时

    1 大多数场合下,不允许向操作型数据库里添加触发器,且这种方法会降低系统性能,所以用的不多。

    2 可在调用数据库的后端服务器层面编写触发器模式的程序,间接实现数据库中触发器的能力。

    3 基本能达到实时增量抽取

2.3 基于快照的CDC 【非侵入式CDC + 异步CDC】

  • 【概念】

    可通过比较源表和快照表来获得数据变化。

  • 【特点】

    1基于快照的CDC可检测到插入、更新和删除的数据 (相比基于时间戳的CDC的优点)

    2需要大量存储空间来保存快照

2.4 基于日志的CDC 【非侵入式CDC + 异步CDC】

  • 【概念】

    源数据库会把每个插入、更新、删除操作记录到日志里。

    通过分析已经发生的事件提交(commit)的日志记录来得到增量数据信息,有一定的时间延迟。
  • 【特点】复杂、异步、非侵入式

2.5 补充方案:与数据库引擎直接集成的CDC 【侵入式CDC + 同步CDC】

例如:数据库厂商Oracle

Oracle新增CDC特性,其在【数据库层面】上直接实现增量抽取功能;

在【性能层面】,由于和数据库引擎的直接集成,比第三方的实现方案应具有一定的优势。

3 参考文献

X 推荐文献

[大数据]ETL之增量数据抽取(CDC)的更多相关文章

  1. Tapdata 肖贝贝:实时数据引擎系列(六)-从 PostgreSQL 实时数据集成看增量数据缓存层的必要性

      摘要:对于 PostgreSQL 的实时数据采集, 业界经常遇到了包括:对源库性能/存储影响较大, 采集性能受限, 时间回退重新同步不支持, 数据类型较复杂等等问题.Tapdata 在解决 Pos ...

  2. 如何实现Qlikview的增量数据加载

    笔者备注: 刚刚接错Qlikview,上网搜集的资料,如何处理增量数据. 1 寻找增量时间戳(1)各种数据库:表的创建时间字段和修改时间字段或者最后的修改时间字段:(2)sql server:可以用找 ...

  3. Qlikview 处理增量数据的脚本

    一般设计Qlikview报表的时候需要些2个脚本文件,一个针对Qlikview的Server job 导出数据到qvd数据文具. 另一个用户访问的Qlikview的脚本是直接展示qvd文件的数据. 事 ...

  4. sqoop导入增量数据

    使用sqoop导入增量数据. 核心参数 --check-column 用来指定一些列,这些列在增量导入时用来检查这些数据是否作为增量数据进行导入,和关系行数据库中的自增字段及时间戳类似这些被指定的列的 ...

  5. DataPipeline的增量数据支持回滚功能

    DataPipeline的增量数据支持回滚功能 第一步:数据任务有增量数据时,回滚按钮激活,允许用户使用该功能进行数据回滚. 第二步:点击回滚按钮,允许用户选择回滚时间或者回滚位置进行数据回滚.选择按 ...

  6. ETL中的数据增量抽取机制

    ETL中的数据增量抽取机制 (     增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过 ...

  7. 数据抽取 CDC

    什么是数据抽取 数据抽取是指从源数据源系统抽取目的数据源系统需要的数据.实际应用中,数据源较多采用的是关系数据库. [编辑] 数据抽取的方式 (一) 全量抽取 全量抽取类似于数据迁移或数据复制,它将数 ...

  8. 大数据ETL详解

    ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更 ...

  9. Mysql大数据备份和增量备份及还原

    目前主流的有两个工具可以实现物理热备:ibbackup和xtrabackup ;ibbackup是需要授权价格昂贵,而xtrabackup功能比ibbackup强大而且是开源的 Xtrabackup提 ...

  10. 大数据离线分析平台 用户数据Etl

    Etl目标  解析我们收集的日志数据,将解析后的数据保存到hbase中.这里选择hbase来存储数据的主要原因就是: hbase的宽表结构设计适合我们的这样多种数据格式的数据存储(不同event有不同 ...

随机推荐

  1. PLC入门笔记12

    1.边沿应用 (1)边沿开关 (2)上升沿触发 下降沿触发 (3) MOVP K4M0 D0 传送比较 movp (=mov) 脉冲型指令 前面条件成立只能执行一次,仅执行一次扫描周期 不带P MOV ...

  2. 如何安装vm虚拟机软件并用该软件建立虚拟机

    一.安装vm虚拟机软件 1.双击打开虚拟机应用程序 找到VM应用程序所在的位置,双击安装 2.根据向导安装 根据提示点击下一步 点击安装之后耐心等待一会,会出现需要输入许可证的的界面,这时候不要关闭界 ...

  3. HTML5第五章作业

    5.1.3 html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" ...

  4. CMMI的软件工程13-16章读书笔记

    一.软件测试   软件测试是为了发现程序中的错误而执行的过程.测试只能证明软件有错,而不能保证软件程序没错. 1. 软件版本 Alpha版 公司内测版本 Beta版 对外公测版本 发布版 正式发布版本 ...

  5. iOS Unity 项目解析

    本文旨在记录Unity 导出的iOS 项目笔记,另带接入SDK的终极方案,顺带对比Android 项目 1蓝色的目录 Data 这个就是项目的数据,每个项目不一样也就是这个目录不一样,是不是可以把这个 ...

  6. linux-taglist

    vim 变量.函数索引 1. sudo dnf install vim-taglist 2. 下载taglist, https://www.vim.org/scripts/script.php?scr ...

  7. 如何确保获取的输入为整数-C语言基础

    这一篇探讨的是如何确保你输入的数据是一个整数.虽然标题用的是这个,但我其实真正想要探讨的内容是 "在程序调试的过程中,需要注意把输入缓存区中的上一次输入的残留信息清理干净,以免影响下一次的输 ...

  8. 论C语言数组

    一维数组  对于一个一维数组a[10]来说  它对储存空间的申请可以看成是这样的  数组名a就代表着首元素a[0]的地址,也很容易看出a+5是元素a[5]的地址. 二维数组  对于一个二维数组a[3] ...

  9. Js:当前日期格式化与比较大小

    //日期格式转换 getCurrentTime() { var date = new Date();//当前时间 var year = date.getFullYear() //返回指定日期的年份 v ...

  10. CH573 CH582 CH579蓝牙从机(peripheral)例程讲解二(广播内容修改)

    在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播. 在peripheral例程中,一直是以50ms的周期进行广播,使用手机软件扫描可以获取 ...