? ? ? ?考慮一個問題:需要抽取哪部分?jǐn)?shù)據(jù)加載到數(shù)據(jù)倉庫播揪?是完全抽取還是變化數(shù)據(jù)捕獲?
? ? ? ?如果數(shù)據(jù)量很小筒狠,則采取完全源數(shù)據(jù)抽戎肀贰;如果源數(shù)據(jù)量很大辩恼,則抽取變化的源數(shù)據(jù)雇庙,這種數(shù)據(jù)抽取模式叫做變化數(shù)據(jù)捕獲,簡稱CDC灶伊。
? ? ? ?CDC大體分為兩種:侵入式和非侵入式疆前。侵入式指CDC操作會給源系統(tǒng)帶來性能影響,只要CDC操作以任何一種方式對源數(shù)據(jù)庫執(zhí)行了SQL操作聘萨,就認(rèn)為是侵入式的竹椒。
? ? ? ?常用的4種CDC方法是:基于時間戳的CDC、基于觸發(fā)器的CDC米辐、基于快照的CDC和基于日志的CDC胸完,其中前三種是侵入式的。
1.基于時間戳的CDC
? ? ? ?抽取過程可以根據(jù)某些屬性列來判斷哪些數(shù)據(jù)是增量的翘贮,最常見的屬性列有以下兩種:
1.時間戳:最好有兩個列赊窥,一個插入時間戳,表示何時創(chuàng)建狸页,一個更新時間戳锨能,表示最后一次更新的時間。
2.序列:大多數(shù)數(shù)據(jù)庫都提供自增功能芍耘,如果數(shù)據(jù)庫表列被定義成自增的腹侣,就可以很容易地根據(jù)該列識別新插入的數(shù)據(jù)。
? ? ? ?這種方法是最簡單且常用的齿穗,但是有如下缺點(diǎn):
1.不能記錄刪除記錄的操作
2.無法識別多次更新
3.不具有實(shí)時能力
2.基于觸發(fā)器的CDC
? ? ? ?當(dāng)執(zhí)行INSERT、UPDATE饺律、DELETE這些SQL語句時窃页,可以激活數(shù)據(jù)庫里的觸發(fā)器跺株,并執(zhí)行一些動作,就是說觸發(fā)器可以用來捕獲變更的數(shù)據(jù)并把數(shù)據(jù)保存在中間臨時表里脖卖。然后這些變更數(shù)據(jù)再從臨時表取出乒省,抽取到數(shù)據(jù)倉庫的過渡區(qū)中。大多數(shù)場合下畦木,不允許向操作型數(shù)據(jù)庫里添加觸發(fā)器袖扛,且這種方法會降低系統(tǒng)性能,所以用的不多十籍。
? ? ? ?可以使用源數(shù)據(jù)庫的復(fù)制功能蛆封,將源庫的數(shù)據(jù)備用到備用庫上,在備庫上創(chuàng)建觸發(fā)器勾栗。
3.基于快照的CDC
? ? ? ?如果沒有時間戳惨篱,不允許使用觸發(fā)器,就要使用快照表围俘≡一洌可以通過比較源表和快照表來獲得數(shù)據(jù)變化。
? ? ? ?基于快照的CDC可以檢測到插入界牡、更新和刪除的數(shù)據(jù)簿寂,這是相對于基于時間戳的CDC方案的有點(diǎn)。其缺點(diǎn)是需要大量存儲空間來保存快照宿亡。
4.基于日志的CDC
? ? ? ?最復(fù)雜的和沒有侵入性的CDC方法是基于日志的方式常遂。數(shù)據(jù)庫會把每個插入、更新她混、刪除操作記錄到日志里烈钞。