Sql-Server
如何在不同的寫入和讀取數據庫之間保持同步
我的一個朋友在面試中被問到這個問題。給定兩個不同的數據庫,一個只完成寫入,另一個只完成讀取。給定指定的時間延遲,如何保持兩者之間的同步。我想補充一點,這些數據庫具有相同的架構。
例如:R 是我的讀數據庫,W 是我的寫數據庫。我想確保讀取數據庫應該是一分鐘前寫入數據庫的副本。
我在這裡熱衷於完成的技術(概念)而不是實現。假設 RDBMS 是 SQL Server。
在 SQL Server 2012 中,您可以擁有隻讀輔助伺服器,它允許您使用可用性組將一個數據庫或一組數據庫鏡像到另一台伺服器,並在它們被鏡像時對它們執行只讀查詢。
缺點:這需要兩個節點上的企業版,只能按核心(不是 CAL)獲得許可,並且底層作業系統需要是 WSFC,因此作業系統也需要是企業版(這沒什麼大不了的因為與 SQL Server 許可證成本的跳躍相比,企業在作業系統級別的額外成本是可笑的)。
在以前的版本中,您可以通過日誌傳送(受@datagod 已經提到的惱人限制)或鏡像+快照(也需要企業版)來做到這一點。我還沒有看到我們的任何客戶使用複制來滿足這個特定要求,但我認為這也是可能的。
假設 SQL Server,發生在可寫數據庫中的事務將需要備份並應用於數據庫的只讀副本。這稱為日誌傳送。
這種方法的缺點是,在進行還原時,必須將只讀數據庫置於單使用者模式。要麼連接的使用者被強制退出,要麼日誌堆積等待應用。
在最新版本的 SQL Server 中可能有一個選項可以解決這個問題,但我不確定。