Sql-Server

事務複製和触發器能否用於近實時 ETL

  • March 13, 2019

我們希望有一個數據倉庫與我們的生產 OLTP 數據庫近乎實時地同步。是否可以使用事務複製和触發器來做到這一點?

我們目前如何 ETL

我們使用託管在 azure 上的 sql server。我們的應用程序有一個 OLTP 數據庫,並保留第二個 sql server 數據庫作為報告和建模的數據倉庫。目前,我們使用 azure 數據工廠編排了一個夜間 ETL(真正的 ELT)流程。每晚程序將數據倉庫上的引用表與 OLAP 應用程序數據庫同步,並呼叫繁重的儲存過程來重建報告和建模所需的所有非規範化表。每晚的過程需要很長時間。

我們如何認為它可以在近乎實時的情況下更好地工作

建議是選擇我們想要從OLTP數據庫同步到數據倉庫的引用表,並與sql server內置的事務複製進行單向同步。然後在數據倉庫中,我們將更改觸發器 (IUD) 放置到引用表中。這些觸發器會將修改記錄插入到倉庫中的表中,這將充當隊列跟踪對引用表數據的更改。然後,我們將建構一個流程來監視該隊列。隨著新的修改記錄的出現,該過程將查看更改了哪些表以及更改了哪些主鍵,然後更新所有依賴於該引用表和主鍵組合的非規範化表。我們不確定是否將這些非規範化過程編寫為 sql server 上的儲存過程或單獨的 .net 應用程序。

任何在這些領域有經驗的人都認為這可行。我們瘋了嗎?

如果您使用的版本和版本支持Change Data Capture 或 Change Tracking,那麼這些機制將更適合監視對引用表的更改,因為它們提供了一個輕量級的解決方案,用於僅辨識更改的行。

您可以在參考表上實施 CT 或 CDC 並經常輪詢它們以進行更改。當遇到更改時,您可以只拉入更改的行,更新您的數據倉庫並啟動修復數據倉庫中非規範化數據的過程。

您可能還需要重新評估數據倉庫的設計。根據您的描述,這些參考表可能是緩慢變化的維度,並且使用正確的 DWH 設計,您不需要在更改維度後更新倉庫中的非規範化數據,應該自動處理該更改。

您的問題並沒有真正的完整答案,因為有很多未知因素會影響您的數據倉庫和 ETL 流程的設計決策。您需要正確定義您對性能、數據延遲(DWH 可以落後多長時間)、歷史數據(您的事實表記錄是否應該反映插入時的維度詳細資訊或維度的目前狀態)、報告和其他幾個因素會影響您的 DWH 和 ETL 設計。

定義需求後,您可以開始研究滿足這些需求的技術和架構。

引用自:https://dba.stackexchange.com/questions/231684