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