Sql-Server
在 2 DB 中保持大表同步的最佳解決方案
我管理著幾張超過 10 億條記錄的表。每天,他們的 ETL 都會執行,從平面文件中讀取數據並在每個文件中插入數千條記錄。
現在我需要將這些相同的表也保留在另一個數據庫上,當然它們需要具有相同的數據。數據將使用連結伺服器傳輸。
最簡單的方法是截斷目標表,選擇源插入到目標,然後重建其索引。但我不喜歡每天複製相同數據的想法。
我看到的另一個解決方案是查詢源表和目標表,按日期維度區分,然後只複製缺失日期的記錄。然後我會創建一個監視器來查看每天的記錄數量是否相等並突出顯示不匹配的日期。
第二個解決方案是否足夠好,或者這種情況有最佳實踐嗎?
如果我必須對此進行管理,我會查看在 ETL 流程之外修改表中的數據的內容(如果有的話)。
如果除了您的 ETL 之外沒有其他任何東西修改數據,我只需更新 ETL 流程以在兩個位置插入完成的數據(並同樣執行您在兩個位置進行的任何索引維護)。
如果其他東西更新了這些數據,但只有一個伺服器,那麼事務複製可能是將數據獲取到輔助伺服器的最輕量級的方式。即使數據沒有在 ETL 之外進行修改,那麼這也不是修改 ETL 過程以更新兩個目標的糟糕替代方案。聽起來每天插入的數據比例相對較小。
如果兩台伺服器上的數據都在修改,那麼您可能需要考慮合併複製。這在很大程度上取決於表是否有任何標識列。