在開發擁有多個入出口的高速公路、大中型停車場及城市泊車咪表系統等收費管理軟件中,為防止因服務器故障、臨時維護、網絡中斷或不穩定而導致車道或出口車輛長時間的等待,確保收費工作的持續進行,一般要為每個入出口配置本地應用數據庫,各入出口數據必須交換共享實時同步。
數據庫同步機制在應用中具有設置簡便,正確配置后系統按用戶設定的規則自動監視運行、交換更新數據,不必開發服務器端及通信軟件,性能穩定可靠等特點,大大簡化了應用開發。在層級模型扁平的應用中優勢尤其明顯,對于多層級的應用也可通過增加層級標志等方式把模型邏輯扁平化。
復制(Replication)簡介
要實現數據庫同步功能,首先要了解“復制”的概念。“復制”是在數據庫之間對數據和數據庫對象進行復制和分發并按預設的時間進行數據同步以確保其一致性的一組技術。使用復制可以將數據分發到不同位置,通過局域網、使用撥號連接、通過 Internet 分發給遠程或移動用戶。
在收費管理軟件中,可以以管理中心數據庫為核心,通過數據庫復制功能,在各道口收費站計算機中生成管理中心數據庫的一個復本,那么無論是管理中心數據庫要下傳的插入、刪除或更新數據或者是各道口收費站要上傳的插入、刪除或更新的數據都不必再人工干預,同步機制將自動監視一切數據的變動,把當前數據庫的變化發布給其他的數據庫,使各數據庫的數據始終保持最新狀態。
復制的優點
不同的應用程序對獨立性和數據一致性有不同的需求。復制在諸如收費管理等分布式數據環境中是一種良好的解決方案:
· 將數據復制或分發至一個或多個站點。
· 依照調度方式分發數據復本。
· 允許更大的獨立性。用戶可以在網絡連接斷開的情況下繼續使用本地的數據復本,然后在連接恢復時系統自動對數據庫所做的更改更新到其它數據庫。
· 允許多個用戶和站點進行更改,然后將數據修改合并到一起,潛在地識別和解決沖突。
· 生成需要在聯機或脫機環境下使用的數據應用程序。
· 生成用戶可以瀏覽大量數據的 Web 應用程序。
· 提高聚合讀取性能。
· 有助于減少因多個用戶進行數據修改和查詢而引起的沖突,因為數據可以通過網絡進行分發,所以可以根據不同商業單位或用戶的需求對數據進行分區。
· 復制可用作自定義備用服務器策略的一部分。復制是備用服務器策略的一種選擇。它包括日志傳送和故障轉移群集,它們在服務器失敗的情況下提供數據的復本。
復制的類型
數據庫可用的復制類型一般有三種:快照復制(Snapshot)、事務復制(Transaction)和合并復制(Merge)。
快照復制是完全按照數據和數據庫對象原本的狀態對其進行復制和分發的過程??煺諒椭撇灰髮Ω倪M行連續的監視,主要在數據不經常更改、一個時期內允許有已過時的數據復本、站點經常脫接,并且可接受高滯后時間時應用;
事務復制是將數據的初始快照傳播到訂閱服務器(本地數據庫),然后,當發布服務器(中心數據庫)上發生數據修改時,捕獲個別的事務并傳播到訂閱服務器。
合并復制主要在以下情況下使用:多個訂閱服務器需要在不同時刻更新數據并將這些更改傳播到發布服務器和其它訂閱服務器;訂閱服務器需要接收數據、脫機更改數據、然后將更改同步到發布服務器和其它訂閱服務器;站點獨立很重要。合并復制使各站點得以自主工作(聯機或脫機),并在預設的時間周期將多個站點上的數據修改合并為一個統一的結果。同步機制在發布服務器和訂閱服務器上跟蹤對已發布數據的更改。數據在調度時間或請求時在服務器之間進行同步。由于在多個服務器上獨立地進行更新(不提交協議),發布服務器或多個訂閱服務器可能更新同一數據。于是,合并更新時就可能出現沖突。合并復制包含默認或自定義沖突解決選項,可在配置合并復制功能時加以定義。當沖突發生時,合并代理程序喚醒調用沖突解決程序,決定接受和向其它站點傳播哪些數據。
由于在收費管理軟件中,一般要求下傳登錄的月租卡號、變更的月租卡存款金額以及收費費率變更等數據;同時要求上傳汽車通行繳費金額等數據,數據要求雙向插入更新與合并,因此在數據庫設計開發時一般選用合并復制功能。
復制模型
復制模型主要包含下列對象:發布服務器、分發服務器、訂閱服務器、發布、項目和訂閱。
發布服務器(Distribution Server):發布服務器是提供數據以便復制到其它服務器的服務器。發布服務器可以具有一個或多個發布,每個發布代表一組邏輯相關的數據。除了指定其中哪些數據需要復制之外,發布服務器還檢測事務復制期間發生更改的數據并維護有關此站點上所有發布的信息。
分發服務器:分發服務器是作為分發數據庫宿主并存儲歷史數據或事務以及源數據的服務器。分發服務器的角色根據執行的復制類型而不同。遠程分發服務器是獨立于發布服務器并配置為復制的分發服務器的服務器。本地分發服務器是既配置為復制的發布服務器又配置為復制的分發服務器的服務器。
訂閱服務器(Subscription Server):訂閱服務器是接收復制數據的服務器。訂閱服務器訂閱的是發布而不是發布中分離的項目;并且訂閱服務器只訂閱其需要的發布,而不是發布服務器上所有可用的發布。根據復制的類型和所選擇的復制選項,訂閱服務器還可以將數據更改傳播回發布服務器或將數據重新發布到其它訂閱服務器。
發布(Distribution):發布是一個數據庫中的一個或多個項目的集合。這種多個項目的分組使得指定邏輯相關的一組數據和數據庫對象一起復制變得更容易。
項目:項目是指定要復制的數據表、數據分區或數據庫對象。項目根據應用需要可以是完整的表、某幾列(使用垂直篩選)、某幾行(使用水平篩選)、存儲過程或視圖定義、存儲過程的執行、視圖、索引視圖或用戶定義函數。
訂閱(Subscription):訂閱是對數據或數據庫對象的復本的請求。訂閱定義將接收的發布和接收的時間、地點。訂閱的同步或數據分發可以由發布服務器(在發布服務器端向訂閱服務器強制訂閱)或訂閱服務器(在訂閱服務器端向發布服務器請求訂閱)請求。發布還支持強制訂閱和請求訂閱的混合。
復制的工作機制
合并復制是由快照代理程序和合并代理程序實現的??煺沾沓绦驕蕚淇煺瘴募?,其中包含已發布表的架構和數據,然后將這些文件存儲在快照文件夾中,并在發布數據庫中插入同步作業??煺沾沓绦蜻€創建復制特定的存儲過程、觸發器和系統表。
合并復制代理程序將保存在發布數據庫表中的初始快照作業應用到訂閱服務器上。該代理程序也合并那些創建初始快照之后在發布服務器或訂閱服務器上發生的增量數據更改,并根據配置的規則或者使用創建的自定義沖突解決程序協調沖突。
在合并復制中分發服務器的角色非常有限,所以在本地(即在與發布服務器所在的同一臺服務器上)實現分發服務器是很常見的。在合并復制過程中根本不使用分發代理程序,分發服務器上的分發數據庫存儲有關合并復制的歷史信息和雜項信息。復制的工作機制如圖1所示:
同步數據
同步處理數據是指在初始快照已經設置應用于訂閱服務器之后,數據在發布服務器和訂閱服務器之間傳播的過程。當對某個訂閱進行同步處理時,發生的過程會有所不同,這取決于使用的復制類型以及此訂閱是否標記為重新初始化。對于快照發布,同步處理數據意味著在訂閱服務器