抽取處理需要重點考慮增量抽取,也被稱為變化數據捕獲,簡稱CDC。假設一個數據倉庫系統,在每天夜里的業務低峰時間從操作型源系統抽取數據,那么增量抽取只需要過去24小時內發生變化的數據。變化數據捕獲也是建立准實時數據倉庫的關鍵技術。
當你能夠識別並獲得最近發生變化的數據時,抽取及其后面的轉換、裝載操作顯然都會變得更高效,因為要處理的數據量會小很多。遺憾的是,很多源系統很難識別出最近變化的數據,或者必須侵入源系統才能做到。變化數據捕獲是數據抽取中典型的技術挑戰。
常用的變化數據捕獲方法有時間戳、快照、觸發器和日志四種。相信熟悉數據庫的讀者對這些方法都不會陌生。時間戳方法需要源系統有相應的數據列表示最后的數據變化。快照方法可以使用數據庫系統自帶的機制實現,如Oracle的物化視圖技術,也可以自己實現相關邏輯,但會比較復雜。觸發器是關系數據庫系統具有的特性,源表上建立的觸發器會在對該表執行insert、update、delete等語句時被觸發,觸發器中的邏輯用於捕獲數據的變化。日志可以使用應用日志或系統日志,這種方式對源系統不具有侵入性,但需要額外的日志解析工作。
CDC大體可以分為兩種,一種是侵入式的,另一種是非侵入式的。所謂侵入式的是指CDC操作會給源系統帶來性能的影響。只要CDC操作以任何一種方式對源庫執行了SQL語句,就可以認為是侵入式的CDC。基於時間戳的CDC、基於觸發器的CDC、基於快照的CDC是侵入性的,基於日志的CDC是非侵入性的。
下表總結了四種CDC方案的特點。