[大數據]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 參考文獻

X 推薦文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM