資料抽取中的CDC(變化資料捕獲)方式

petterchx發表於2021-09-09

       考慮一個問題:需要抽取哪部分資料載入到資料倉儲?是完全抽取還是變化資料捕獲?
       如果資料量很小,則採取完全源資料抽取;如果源資料量很大,則抽取變化的源資料,這種資料抽取模式叫做變化資料捕獲,簡稱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
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4606/viewspace-2817235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章