關於:轉載/知識產權
本文遵循 GPL開源協議,如若轉載:
- 1 請發郵件至博主,以作申請聲明。
- 2 請於引用文章的顯著處注明來源([大數據]ETL之增量數據抽取(CDC) - https://www.cnblogs.com/johnnyzen/p/12781942.html)。
關於:本文由來
本文系成都四方偉業公司第二階段產品培訓(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 推薦文獻
- 數據倉庫學習筆記:數據倉庫增量抽取(CDC)有哪些方式? - CSDN
(2021-01-06 補充)
