zoukankan      html  css  js  c++  java
  • [大数据]ETL之增量数据抽取(CDC)

    关于:转载/知识产权

    本文遵循 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 参考文献

  • 相关阅读:
    scheme中的fold-left和fold-right
    test
    2018.4.24-ml笔记(多元线性回归)
    2018.4.23-ml笔记(线性回归、梯度下降)
    springboot shiro开启注释
    Spring杂记BeanFactory之getBean方法
    docker搭建nginx+springboot集群
    springboot属性注入转化为对象
    mac下nginx搭建
    mybatis随笔五之Executor
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/12781942.html
Copyright © 2011-2022 走看看