爲了實現數據倉庫中的更加高效的數據處理,今天和小黎子一塊兒來探討ETL系統中的增量抽取方式。增量抽取是數據倉庫ETL(數據的抽取(extraction)、轉換(transformation)和裝載(loading))實施過程當中須要重點考慮的問題。ETL抽取數據的過程當中,增量抽取的效率和可行性是決定ETL實施成敗的關鍵問題之一,作過數據建模的小夥伴都知道ETL中的增量更新機制比較複雜,採用何種機制每每取決於源數據系統的類型以及對增量更新性能的要求。今天咱們只重點對各類方法進行對比分析,從而總結各類機制的使用條件和優劣性,爲數據倉庫項目的ETL工程的實施提供增量抽取技術方案參考。數據庫
在數據庫倉庫開發過程當中,不管是全量抽取方案仍是增量抽取方案,抽取數據的工做通常由數據倉庫工具來完成。目前數據倉庫開發工具很是多,好比SE-DWA,DTS,Kettle等等。雖然增量抽取方案設置比較簡單,可是咱們仍是須要具體來了解一下增量抽取機制以便後續更合理的利用增量抽取方案。下面討論各類增量抽取的實現機制原理。編程
實現增量抽取關鍵準確快速的捕獲變化的數據。優秀的增量抽取機制要求ETL可以將業務系統中的變化數據按必定的頻率準確地捕獲,同時不能對業務系統形成太大的壓力,影響現有業務。相對全量抽取而言,增量抽取的設計更復雜,有一種將全量抽取過程自動轉換爲增量抽取過程的ETL設計思路,前提是必須捕獲變化的數據,增量數據抽取中經常使用的捕獲變化數據的方法小黎子瞭解到的有如下四種方式:運維
使用觸發器生成增量數據是廣泛採起的一種增量抽取機制。該方式是根據抽取要求,在要被抽取的源表上創建3個觸發器插入、修改、刪除,每當源表中的數據發生變化,就被相應的觸發器將變化的數據寫入一個增量日誌表,ETL的增量抽取則是從增量日誌表中而不是直接在源表中抽取數據,同時增量日誌表中抽取過的數據要及時被標記或刪除。工具
爲了簡單演示,增量日誌表通常不存儲增量數據的全部字段信息,而只是存儲源表名稱、更新的關鍵字值和更新操做類型(knsen、update或delete),ETL增量抽取進程首先根據源表名稱和更新的關鍵字值,從源表中提取對應的完整記錄,再根據更新操做類型,對目標表進行相應的處理。性能
優勢:數據庫自己的觸發器機制,契合度高,可靠性高,不會存在有增量數據未被捕獲到的現象 開發工具
缺點:對於源系統有較大的影響,須要創建觸發器機制,增長運維人員,還要創建臨時表,儲存臨時表,增長儲存成本和運維成本測試
時間戳方式是指增量抽取時,抽取進程經過比較系統時間與抽取源表的時間戳字段的值來決定抽取哪些數據。這種方式須要在源表上增長一個時間戳字段,系統中更新修改表數據的時候,同時修改時間戳字段的值。優化
有的數據庫(例如Sql Server)的時間戳支持自動更新,即表的其它字段的數據發生改變時,時間戳字段的值會被自動更新爲記錄改變的時刻。在這種狀況下,進行ETL實施時就只須要在源表加上時間戳字段就能夠了。對於不支持時間戳自動更新的數據庫,這就要求業務系統在更新業務數據時,經過編程的方式手工更新時間戳字段。使用時間戳方式能夠正常捕獲源表的插入和更新操做,但對於刪除操做則無能爲力,須要結合其它機制才能完成。spa
優勢:數據處理邏輯清楚,速度較快,成本低廉,流程簡單設計
缺點:要求源表的時間字段必須是隨表變更而變更的不爲空數據,因爲是直接讀取表數據,該方法沒法獲取刪除類型的數據。
全表比對即在增量抽取時,ETL進程逐條比較源表和目標表的記錄,將新增和修改的記錄讀取出來。
優化以後的所有比對方式是採用MD5校驗碼,須要事先爲要抽取的表創建一個結構相似的MD5臨時表,該臨時表記錄源表的主鍵值以及根據源表全部字段的數據計算出來的MD5校驗碼,每次進行數據抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,若有不一樣,進行update操做:如目標表沒有存在該主鍵值,表示該記錄尚未,則進行insert操做。而後,還須要對在源表中已不存在而目標表仍保留的主鍵值,執行delete操做。
優勢:由於是基於目標對比抽取數據,因此對源系統無影響
缺點:該方法僅僅適合表有主鍵,惟一鍵或者數據量較小的表,否則海量數據中每條數據的每一列都進行逐一比對,很顯然這種頻繁的I/O操做以及複雜的比對運算會形成很大的性能開銷。這樣操做須要足夠的硬件作支撐
對於創建了業務系統的生產數據庫,能夠在數據庫中建立業務日誌表,當特定須要監控的業務數據發生變化時,由相應的業務系統程序模塊來更新維護日誌表內容。增量抽取時,經過讀日誌表數據決定加載哪些數據及如何加載。日誌表的維護須要由業務系統程序用代碼來完成。
優勢:能夠作到數據無偏差傳輸,有回滾機制,有容災備份的能力
缺點:數據庫開歸檔模式會對源系統數據庫的磁盤形成壓力,增長儲存成本,此外大多數數據庫的日誌都是不對外開放的,只針對數據庫自己的工具開放讀取
可見,ETL在進行增量抽取操做時,有以上各類機制能夠選擇。現從兼容性、完備性、性能和侵入性3個方面對這些機制的優劣進行比較分析。各類數據增量抽取機制的優劣性綜合分析以下圖所示。
經過對各類增量抽取機制的對比分析,咱們發現,沒有一種機制具備絕對的優點,不一樣機制在各類因素的表現大致上都是相對平衡的。因此,ETL實施過程當中究競選擇哪一種增量抽取機制,要根據實際的數據源系統環境進行決策,須要綜合考慮源系統數據庫的類型、抽取的數據量(決定對性能要求的苛刻程度)、對源業務系統和數據庫的控制能力以及實現難度等各類因素,甚至結合各類不一樣的增量機制以針對環境不一樣的數據源系統進行ETL實施。
爲了實現數據倉庫中數據的高效抽取,增量抽取是ETL數據抽取過程當中很是重要的一步,實現增量抽取的機制直接決定了數據倉庫項目總體開發的效果。咱們經過對比幾種常見的增量抽取機制並總結了各類機制的特性並分析了它們的優劣。各類增量抽取機制都有它有存在的價值和固有的限制條件,因此在ETL的設計和實施工做過程當中,只能依據項目的實際環境進行綜合考慮,甚至須要對可採用的多種機制進行實際的測試,才能肯定一個最優的增量抽取方法。