變更數據捕獲:概述、原因及優秀實踐
當今的企業,尤其是那些已將數字化轉型置于優先地位的企業,需要接近實時的數據。每周和每月的批處理已不再適用。然而,從多種來源獲取實時數據以自動化流程并做出動態優化決策并非易事。
最近,在為客戶重新架構遺留系統并將單體架構拆分為微服務時,我們面臨了這個特定的挑戰。我們開始為新架構更改數據庫,并按模塊對系統進行現代化改造。在此階段,我們需要讓兩個數據庫保持同步,因為不同的模塊可能需要相同的數據 — 換句話說,舊系統需要新數據庫中新系統生成的數據,反之亦然。
我們探索了變更數據捕獲(CDC)來看它是否能實現這一目標。本文深入探討了CDC的概念、我們探索過的工具、它們的工作原理以及它們的好處。我們還提供了一些例子和建議,指導其他技術人員如何為其特定用例選擇合適的CDC工具。
什么是變更數據捕獲?
變更數據捕獲是檢測和捕獲源系統(通常是數據庫)中的變更,并將這些變更以幾乎實時的方式傳遞到目標系統的過程。這些變更可以是插入、刪除、更新以及通過DDL進行的數據庫結構更改等。
變更數據捕獲工具的工作原理
CDC工具通過持續監控源系統中的數據變更來工作。每當檢測到變更時,它會將其捕獲并記錄到一個單獨的位置,比如數據庫、日志文件,或發送到消息代理。然后捕獲的數據經過處理、轉換并加載到目標系統,比如數據倉庫、分析平臺或另一個數據庫中。
有多種捕獲數據庫變更的方法。讓我們來看看其中的一些:
1.基于時間戳/查詢的
在這種方法中,我們在源中維護類似于CREATED_AT、LAST_UPDATED或DATE_MODIFIED的審計列,并查詢源中的數據以根據這些列中的變更來捕獲任何變化。需要注意的是,這種方法無法捕獲刪除操作。
2.基于觸發器的
觸發器是根據數據庫中發生的特定事件執行用戶定義操作的函數。這可用于捕獲數據庫中的任何變更,包括刪除操作。然而,這種方法會降低數據庫性能,因為每次事件發生時都需要多次寫入。
3.基于日志的
數據庫包含用于在崩潰時進行恢復的事務日志(或重做日志),它存儲了所有事件。通過基于日志的CDC,新數據庫事務是從其本機日志中讀取的。這種方式可以捕獲變更,而無需掃描源表,因此比其他兩種方法更有效。
這種方法類似于事件驅動架構中的事件溯源,每當系統狀態發生變化時,我們將其記錄為一個事件。記錄的事件可以通過以相同的順序重播來隨時重建系統狀態。
為什么使用CDC?
根據情況、應用程序、架構和業務需求,CDC在許多場景下都是至關重要的。以下是CDC有助于工程過程的一些方式:
- 實時數據可用性:CDC工具以幾乎實時的方式捕獲變更,確保最新的數據可用于分析、報告或進一步處理。
- 更快的決策制定:CDC有助于減少捕獲和數據可用性之間的延遲,實現更快的分析和決策制定。
- 高效的數據集成:CDC工具有助于從多個操作源捕獲數據,并將其轉換為單一目標數據庫或數據湖中的通用格式。
- 目標數據庫的定制設計:CDC提供跨功能的好處,比如在CQRS系統中創建只讀搜索或查詢數據庫、創建審計數據庫,或在數據倉庫中捕獲數據。它允許將非功能性和架構需求與主要數據存儲解耦。
- 簡化的數據遷移:在我們的情況下,CDC有助于在現代化階段維護遺留和新數據庫之間的數據一致性。這也適用于其他各種數據遷移場景。
如何選擇合適的CDC工具?
市場上有幾種CDC工具,比如Oracle Golden Gate、Debezium、IBM Infosphere、Striim、StreamSets和Qlik Replicate。這些工具可以是開源的或付費的。它們通常支持本地和云環境,并能處理各種數據源。在選擇時,考慮以下幾點:
- 與數據源的兼容性:至少,您選擇的工具必須與您想要捕獲變更的所有數據源兼容。
- 實時數據捕獲:工具應該以幾乎實時的方式捕獲變更,以便您能夠使用最新的數據。
- 數據轉換和集成:CDC工具應該能夠處理從源到目標數據類型的數據轉換。
- 價格:CDC工具必須對您的用例具有成本效益。有開源、付費和許可產品可供選擇。
- 使用便捷性和支持:工具應該對您的團隊易于使用,并提供充分的支持,包括全面的文檔和技術支持。
- 其他功能:根據您的需求,您可能還想檢查其他特定功能,比如源和目標之間的雙向同步和云支持。
隨著企業變得以技術為驅動,歷史和當前的數據將成為一個至關重要的差異化因素。實現精確、及時、高效和具有成本效益的變更數據捕獲將成為任何技術轉型計劃的重要組成部分。當您面臨這種情況時,希望本文能對您有所幫助。