劉 鵬
(中國電子科技集團公司第41研究所,安徽 蚌埠 233000)
當(dāng)前,很多企事業(yè)單位及科研院所都在不同地點建立了自己的分支機構(gòu),不同機構(gòu)之間的網(wǎng)絡(luò)都實現(xiàn)了互聯(lián)互通。由于很多單位對數(shù)據(jù)傳輸?shù)谋C苄砸蠛芨?,傳統(tǒng)的互聯(lián)網(wǎng)因其保密性差已無法滿足實際應(yīng)用的需要,在這種情況下,通過采用專線網(wǎng)絡(luò),可以極大保障數(shù)據(jù)傳輸?shù)陌踩浴?/p>
專線網(wǎng)絡(luò)雖然安全性好,但價格昂貴,帶寬受到限制。在企業(yè)信息系統(tǒng)的設(shè)計中,如果采用傳統(tǒng)的集中式數(shù)據(jù)庫,除本地用戶以外,其他用戶在操作時都需要實時通過網(wǎng)絡(luò)向異地讀取或傳輸數(shù)據(jù),這會給專線網(wǎng)絡(luò)帶來很大的壓力。在這種情況下,使用分布式數(shù)據(jù)庫可以有效解決這一問題。如何實時、高效地將不同數(shù)據(jù)庫之間的數(shù)據(jù)進行同步是使用分布式數(shù)據(jù)庫的關(guān)鍵所在。本文以企業(yè)信息系統(tǒng)的設(shè)計為例,提出了一種基于XML序列化技術(shù)的分布式數(shù)據(jù)庫同步方案,有效克服了傳統(tǒng)數(shù)據(jù)同步方法的局限性。
分布式數(shù)據(jù)庫是由一組同時重復(fù)地存儲在不同的場地的數(shù)據(jù)組成的,當(dāng)應(yīng)用程序執(zhí)行時,就可以在本地數(shù)據(jù)庫的基礎(chǔ)上運行,盡量不借助通信網(wǎng)絡(luò)去與外地數(shù)據(jù)庫聯(lián)系。分布式數(shù)據(jù)庫避免場地之間的通信開銷,加快了應(yīng)用程序的運行速度,具有很好的可靠性。傳統(tǒng)的分布式數(shù)據(jù)庫同步技術(shù)主要以文件傳輸技術(shù)和數(shù)據(jù)復(fù)制技術(shù)為主。
文件傳輸技術(shù)是通過專門編寫的應(yīng)用程序?qū)⑿枰碌臄?shù)據(jù)信息收集起來形成文件,存儲在物理介質(zhì)中,通過網(wǎng)絡(luò)或者物理拷貝的方式將文件傳輸?shù)骄W(wǎng)絡(luò)上其他場地,其他場地將接收的數(shù)據(jù)導(dǎo)入到本地數(shù)據(jù)庫系統(tǒng)中。這種同步方式主要有以下缺點:(1)數(shù)據(jù)的更新需要固定的時間段,數(shù)據(jù)庫得不到實時更新;(2)需要人工進行干預(yù),難以保證正確性,而且效率低下;(3)無法解決數(shù)據(jù)同步過程中出現(xiàn)的數(shù)據(jù)沖突問題。
數(shù)據(jù)復(fù)制技術(shù)是一些數(shù)據(jù)庫系統(tǒng)自帶的數(shù)據(jù)復(fù)制機制,其主要原理就是將一組數(shù)據(jù)從一個數(shù)據(jù)源拷貝到多個數(shù)據(jù)源,從而使不同的服務(wù)器用戶在權(quán)限許可的范圍內(nèi)共享這份數(shù)據(jù)。復(fù)制技術(shù)作也存在不少應(yīng)用局限性。主要體現(xiàn)在以下幾方面:(1)對網(wǎng)絡(luò)的要求很高,專線網(wǎng)絡(luò)的窄帶寬不能滿足需求;(2)在大量的數(shù)據(jù)傳輸過程中會導(dǎo)致數(shù)據(jù)丟失;(3)在網(wǎng)絡(luò)延時的情況下無法很好解決數(shù)據(jù)沖突問題。
XML即可擴展標(biāo)記語言,具有可擴展性,不但可以表達(dá)數(shù)據(jù)的內(nèi)容,還可以表達(dá)數(shù)據(jù)的結(jié)構(gòu),可以跨平臺使用,能夠適應(yīng)多種不同的網(wǎng)絡(luò)環(huán)境,具有體積小、便于傳輸?shù)葍?yōu)點,XML的這些特性使得XML在分布式應(yīng)用程序的數(shù)據(jù)交換時體現(xiàn)出很大的優(yōu)勢。
隨著分布式應(yīng)用程序的發(fā)展,要想在不同應(yīng)用程序域之間,或者在不同平臺上進行對象的傳遞就顯得非常不方便,這個時候,序列化技術(shù)應(yīng)運而生。序列化就是將對象轉(zhuǎn)換為可以存儲或傳輸?shù)臄?shù)據(jù)格式的過程。將對象序列化,可以將對象永久保存在數(shù)據(jù)存儲區(qū)中,并使用HTTP協(xié)議在服務(wù)器之間進行傳輸。其過程如圖1所示。
圖1 序列化和反序列化
XML序列化是序列化技術(shù)的典型應(yīng)用,是將對象的公共屬性和字段轉(zhuǎn)換化為XML流以便存儲或傳輸?shù)倪^程,反序列化則是從XML輸出中重新創(chuàng)建對象的副本。XML序列化的使用,可以將一個應(yīng)用程序域中的對象序列化,通過網(wǎng)絡(luò)傳輸?shù)搅硪粋€應(yīng)用程序域,另一個應(yīng)用程序域通過讀取序列化后的數(shù)據(jù)形式,通過反序列化,重新構(gòu)建該對象,再執(zhí)行某些業(yè)務(wù)邏輯,得到需要的結(jié)果。
本單位企業(yè)信息系統(tǒng)為兩地部署,通過專線網(wǎng)絡(luò)實現(xiàn)互聯(lián)互通,是集辦公、計算機、科研、生產(chǎn)、質(zhì)量等功能為一體的綜合管理系統(tǒng),涉及到申請、審批、處理、信息維護等多種操作,在本單位的辦公及科研生產(chǎn)中發(fā)揮著重要的作用。
兩地都采用SQL Server關(guān)系型數(shù)據(jù)庫,在數(shù)據(jù)同步時,需要實現(xiàn)兩地的雙向同步,可以看作是兩個單向同步的有機組合。在同步時,將同步數(shù)據(jù)發(fā)起端稱為源端,將同步數(shù)據(jù)接收端稱為目標(biāo)端。
在實現(xiàn)數(shù)據(jù)同步之前,需要做以下準(zhǔn)備性工作:
(1)定義業(yè)務(wù)實體:在應(yīng)用程序中,業(yè)務(wù)實體用來存儲與該業(yè)務(wù)相關(guān)的操作或數(shù)據(jù),在我們的企業(yè)信息系統(tǒng)中,主要包括表單號、事件號及其它與具體表單相關(guān)的業(yè)務(wù)數(shù)據(jù)。
(2)定義同步數(shù)據(jù)表:在源端和目標(biāo)端分別定義同步數(shù)據(jù)發(fā)送表和同步數(shù)據(jù)接收表,兩者有著相同的數(shù)據(jù)結(jié)構(gòu)。發(fā)送表用于存儲本地變化的數(shù)據(jù)信息,接收表用于接收從異地傳送過來的數(shù)據(jù)信息。該系統(tǒng)多個業(yè)務(wù)表單共享一個同步數(shù)據(jù)表,其結(jié)構(gòu)定義如表1所示:
表1 同步數(shù)據(jù)表結(jié)構(gòu)定義
(3)構(gòu)建同步規(guī)則:根據(jù)對業(yè)務(wù)邏輯的分析,同步規(guī)則定義了數(shù)據(jù)同步時如何根據(jù)具體的條件執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,以及在沖突發(fā)生時如何保證兩地數(shù)據(jù)一致性等問題。
兩地分布式數(shù)據(jù)庫同步總體框架如圖2所示。
圖2 數(shù)據(jù)庫同步總體框架
首先將源端獲取的同步數(shù)據(jù)序列化成XML文件,寫入源端數(shù)據(jù)同步發(fā)送表,接著執(zhí)行數(shù)據(jù)傳送操作,將源端序列化的XML文件通過專線網(wǎng)絡(luò)傳輸?shù)侥繕?biāo)端,寫入目標(biāo)端數(shù)據(jù)庫同步接收表,目標(biāo)端提取傳輸過來的XML文件進行反序列化操作,得到同步數(shù)據(jù)的副本,最后根據(jù)同步規(guī)則執(zhí)行同步操作。
采用基于事件操作的方法來獲取同步數(shù)據(jù),當(dāng)用戶進行事件操作時,將該操作所包含的相關(guān)信息,包括表單號、事件號以及其他業(yè)務(wù)數(shù)據(jù)記錄下來,一方面根據(jù)這些信息更新本地業(yè)務(wù)數(shù)據(jù)表,另一方面將這些信息作為同步數(shù)據(jù)提供給異地。通過這種方式,避免了從數(shù)據(jù)庫中捕獲數(shù)據(jù)變化的過程,減輕了服務(wù)器的負(fù)擔(dān),提高了工作效率。
XML序列化的目的是將源端對數(shù)據(jù)庫的操作及操作所涉及的數(shù)據(jù)序列化成一個XML文件,該XML文件記錄了某個操作同步所需要的全部信息。通過XML序列化,可以方便地將源端產(chǎn)生的同步數(shù)據(jù)傳送到目標(biāo)端。序列化后的XML格式如圖3所示。
圖3 序列化XML格式
系統(tǒng)定時將從源端同步發(fā)送表中讀取的XML數(shù)據(jù)形成發(fā)送隊列,通過專線網(wǎng)絡(luò)傳送到目標(biāo)端,插入目標(biāo)端同步接收表中。目標(biāo)端接收到XML數(shù)據(jù)以后,即時調(diào)用XML解析程序,通過將XML反序列化,從中解析出表單號、事件號及各項業(yè)務(wù)數(shù)據(jù),并通過對表單號和事件號進行判斷,將業(yè)務(wù)數(shù)據(jù)組裝成相應(yīng)的SQL語句并執(zhí)行,更新對應(yīng)的業(yè)務(wù)數(shù)據(jù)表,實現(xiàn)源端數(shù)據(jù)庫和目標(biāo)端數(shù)據(jù)庫的同步。
在網(wǎng)絡(luò)傳輸?shù)倪^程中不可避免的會出現(xiàn)同步數(shù)據(jù)丟失或延時的情況,如果不加以控制,則會導(dǎo)致兩地數(shù)據(jù)不一致的現(xiàn)象。所以在系統(tǒng)設(shè)計的過程中,必須采取合理的措施加以解決,這也是保證分布式數(shù)據(jù)庫數(shù)據(jù)一致性的關(guān)鍵所在。
⑴數(shù)據(jù)完整性控制
數(shù)據(jù)完整性控制就是為了防止數(shù)據(jù)在網(wǎng)絡(luò)傳輸?shù)倪^程中發(fā)生丟失而導(dǎo)致數(shù)據(jù)不一致所采取的解決辦法,我們設(shè)計了如圖4所示的解決機制。
程序首先讀取源數(shù)據(jù)庫同步數(shù)據(jù)發(fā)送表中的數(shù)據(jù),形成數(shù)據(jù)發(fā)送隊列,如果發(fā)送隊列中有數(shù)據(jù),則按照數(shù)據(jù)產(chǎn)生的時間依次傳送,如果收到對方傳送回來的應(yīng)答信號,則將該條數(shù)據(jù)從數(shù)據(jù)表中刪除,繼續(xù)傳送發(fā)送隊列中的下條數(shù)據(jù),如果沒有收到應(yīng)答信號,則重新讀取源端同步數(shù)據(jù)發(fā)送表,重復(fù)以上流程。通過該機制,可以有效避免同步數(shù)據(jù)在傳輸過程中發(fā)生丟失導(dǎo)致的兩地數(shù)據(jù)不一致現(xiàn)象。
圖4 數(shù)據(jù)完整性控制流程
(2)沖突控制
分布式數(shù)據(jù)庫系統(tǒng)中的每一個場地都有對數(shù)據(jù)進行修改的權(quán)限,如果在網(wǎng)絡(luò)傳輸延時的情況下存在兩地向同一張表插入數(shù)據(jù)或者修改同一條記錄,那么在數(shù)據(jù)同步的過程中就會產(chǎn)生沖突。在我們設(shè)計過程中根據(jù)表單執(zhí)行深度、執(zhí)行結(jié)果(通過、不通過)和同步數(shù)據(jù)來源(是否來自表單申請人歸屬地)幾個條件來進行沖突控制,主要有以下幾種操作沖突解決機制:
①如果兩端表單執(zhí)行深度和執(zhí)行結(jié)果均相同:
同步數(shù)據(jù)來源于表單申請人歸屬地,以同步數(shù)據(jù)為準(zhǔn),同步數(shù)據(jù)非來源于表單申請人歸屬地,拋棄同步數(shù)據(jù);
②如果兩端執(zhí)行深度相同,執(zhí)行結(jié)果不同,以不通過為準(zhǔn);
③如果同步數(shù)據(jù)執(zhí)行深度大于本地,以同步數(shù)據(jù)為準(zhǔn);
④如果同步數(shù)據(jù)執(zhí)行深度小于本地,拋棄同步數(shù)據(jù),以本地數(shù)據(jù)為準(zhǔn)。
其流程圖如圖5所示。
圖5 數(shù)據(jù)沖突解決機制
通過沖突機制的使用,避免了網(wǎng)絡(luò)延時對分布式數(shù)據(jù)庫同步造成的影響,有效保證了數(shù)據(jù)的一致性。
隨著網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫技術(shù)的飛速發(fā)展,分布式數(shù)據(jù)庫已經(jīng)得到了非常廣泛的應(yīng)用。本文基于專線網(wǎng)絡(luò)環(huán)境提出了一種基于XML序列化技術(shù)的分布式數(shù)據(jù)庫同步解決方案,并詳細(xì)論述了其原理和實現(xiàn)方法。該方案具有擴展性好、可靠性高等優(yōu)點,已成功運用于本單位企業(yè)信息系統(tǒng),運行效果良好,具有較高的參考價值。
[1]林 源,陳志泊.分布式異構(gòu)數(shù)據(jù)庫同步系統(tǒng)的研究與應(yīng)用[J].計算機工程與設(shè)計,2010,31(24):5278-5281.
[2]劉建芳,夏棟梁.XML序列化機制在客戶關(guān)系管理中的應(yīng)用[J].電腦開發(fā)與應(yīng)用,2011,24(2):31-33,37.
[3]沈 敏,許華虎,等.基于XML的分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步系統(tǒng)研究[J].計算機工程與應(yīng)用,2005,41(5):184-186.