国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于XML序列化技術(shù)的分布式數(shù)據(jù)庫(kù)同步實(shí)現(xiàn)

2018-03-08 07:12
關(guān)鍵詞:序列化表單數(shù)據(jù)表

劉 鵬

(中國(guó)電子科技集團(tuán)公司第41研究所,安徽 蚌埠 233000)

一、引言

當(dāng)前,很多企事業(yè)單位及科研院所都在不同地點(diǎn)建立了自己的分支機(jī)構(gòu),不同機(jī)構(gòu)之間的網(wǎng)絡(luò)都實(shí)現(xiàn)了互聯(lián)互通。由于很多單位對(duì)數(shù)據(jù)傳輸?shù)谋C苄砸蠛芨?,傳統(tǒng)的互聯(lián)網(wǎng)因其保密性差已無(wú)法滿足實(shí)際應(yīng)用的需要,在這種情況下,通過(guò)采用專線網(wǎng)絡(luò),可以極大保障數(shù)據(jù)傳輸?shù)陌踩浴?/p>

專線網(wǎng)絡(luò)雖然安全性好,但價(jià)格昂貴,帶寬受到限制。在企業(yè)信息系統(tǒng)的設(shè)計(jì)中,如果采用傳統(tǒng)的集中式數(shù)據(jù)庫(kù),除本地用戶以外,其他用戶在操作時(shí)都需要實(shí)時(shí)通過(guò)網(wǎng)絡(luò)向異地讀取或傳輸數(shù)據(jù),這會(huì)給專線網(wǎng)絡(luò)帶來(lái)很大的壓力。在這種情況下,使用分布式數(shù)據(jù)庫(kù)可以有效解決這一問(wèn)題。如何實(shí)時(shí)、高效地將不同數(shù)據(jù)庫(kù)之間的數(shù)據(jù)進(jìn)行同步是使用分布式數(shù)據(jù)庫(kù)的關(guān)鍵所在。本文以企業(yè)信息系統(tǒng)的設(shè)計(jì)為例,提出了一種基于XML序列化技術(shù)的分布式數(shù)據(jù)庫(kù)同步方案,有效克服了傳統(tǒng)數(shù)據(jù)同步方法的局限性。

二、傳統(tǒng)的分布式數(shù)據(jù)庫(kù)同步技術(shù)

分布式數(shù)據(jù)庫(kù)是由一組同時(shí)重復(fù)地存儲(chǔ)在不同的場(chǎng)地的數(shù)據(jù)組成的,當(dāng)應(yīng)用程序執(zhí)行時(shí),就可以在本地?cái)?shù)據(jù)庫(kù)的基礎(chǔ)上運(yùn)行,盡量不借助通信網(wǎng)絡(luò)去與外地?cái)?shù)據(jù)庫(kù)聯(lián)系。分布式數(shù)據(jù)庫(kù)避免場(chǎng)地之間的通信開銷,加快了應(yīng)用程序的運(yùn)行速度,具有很好的可靠性。傳統(tǒng)的分布式數(shù)據(jù)庫(kù)同步技術(shù)主要以文件傳輸技術(shù)和數(shù)據(jù)復(fù)制技術(shù)為主。

文件傳輸技術(shù)是通過(guò)專門編寫的應(yīng)用程序?qū)⑿枰碌臄?shù)據(jù)信息收集起來(lái)形成文件,存儲(chǔ)在物理介質(zhì)中,通過(guò)網(wǎng)絡(luò)或者物理拷貝的方式將文件傳輸?shù)骄W(wǎng)絡(luò)上其他場(chǎng)地,其他場(chǎng)地將接收的數(shù)據(jù)導(dǎo)入到本地?cái)?shù)據(jù)庫(kù)系統(tǒng)中。這種同步方式主要有以下缺點(diǎn):(1)數(shù)據(jù)的更新需要固定的時(shí)間段,數(shù)據(jù)庫(kù)得不到實(shí)時(shí)更新;(2)需要人工進(jìn)行干預(yù),難以保證正確性,而且效率低下;(3)無(wú)法解決數(shù)據(jù)同步過(guò)程中出現(xiàn)的數(shù)據(jù)沖突問(wèn)題。

數(shù)據(jù)復(fù)制技術(shù)是一些數(shù)據(jù)庫(kù)系統(tǒng)自帶的數(shù)據(jù)復(fù)制機(jī)制,其主要原理就是將一組數(shù)據(jù)從一個(gè)數(shù)據(jù)源拷貝到多個(gè)數(shù)據(jù)源,從而使不同的服務(wù)器用戶在權(quán)限許可的范圍內(nèi)共享這份數(shù)據(jù)。復(fù)制技術(shù)作也存在不少應(yīng)用局限性。主要體現(xiàn)在以下幾方面:(1)對(duì)網(wǎng)絡(luò)的要求很高,專線網(wǎng)絡(luò)的窄帶寬不能滿足需求;(2)在大量的數(shù)據(jù)傳輸過(guò)程中會(huì)導(dǎo)致數(shù)據(jù)丟失;(3)在網(wǎng)絡(luò)延時(shí)的情況下無(wú)法很好解決數(shù)據(jù)沖突問(wèn)題。

三、XML及序列化技術(shù)

XML即可擴(kuò)展標(biāo)記語(yǔ)言,具有可擴(kuò)展性,不但可以表達(dá)數(shù)據(jù)的內(nèi)容,還可以表達(dá)數(shù)據(jù)的結(jié)構(gòu),可以跨平臺(tái)使用,能夠適應(yīng)多種不同的網(wǎng)絡(luò)環(huán)境,具有體積小、便于傳輸?shù)葍?yōu)點(diǎn),XML的這些特性使得XML在分布式應(yīng)用程序的數(shù)據(jù)交換時(shí)體現(xiàn)出很大的優(yōu)勢(shì)。

隨著分布式應(yīng)用程序的發(fā)展,要想在不同應(yīng)用程序域之間,或者在不同平臺(tái)上進(jìn)行對(duì)象的傳遞就顯得非常不方便,這個(gè)時(shí)候,序列化技術(shù)應(yīng)運(yùn)而生。序列化就是將對(duì)象轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)臄?shù)據(jù)格式的過(guò)程。將對(duì)象序列化,可以將對(duì)象永久保存在數(shù)據(jù)存儲(chǔ)區(qū)中,并使用HTTP協(xié)議在服務(wù)器之間進(jìn)行傳輸。其過(guò)程如圖1所示。

圖1 序列化和反序列化

XML序列化是序列化技術(shù)的典型應(yīng)用,是將對(duì)象的公共屬性和字段轉(zhuǎn)換化為XML流以便存儲(chǔ)或傳輸?shù)倪^(guò)程,反序列化則是從XML輸出中重新創(chuàng)建對(duì)象的副本。XML序列化的使用,可以將一個(gè)應(yīng)用程序域中的對(duì)象序列化,通過(guò)網(wǎng)絡(luò)傳輸?shù)搅硪粋€(gè)應(yīng)用程序域,另一個(gè)應(yīng)用程序域通過(guò)讀取序列化后的數(shù)據(jù)形式,通過(guò)反序列化,重新構(gòu)建該對(duì)象,再執(zhí)行某些業(yè)務(wù)邏輯,得到需要的結(jié)果。

四、基于XML序列化的分布式數(shù)據(jù)庫(kù)同步實(shí)現(xiàn)

(一)系統(tǒng)功能介紹

本單位企業(yè)信息系統(tǒng)為兩地部署,通過(guò)專線網(wǎng)絡(luò)實(shí)現(xiàn)互聯(lián)互通,是集辦公、計(jì)算機(jī)、科研、生產(chǎn)、質(zhì)量等功能為一體的綜合管理系統(tǒng),涉及到申請(qǐng)、審批、處理、信息維護(hù)等多種操作,在本單位的辦公及科研生產(chǎn)中發(fā)揮著重要的作用。

(二)總體框架

兩地都采用SQL Server關(guān)系型數(shù)據(jù)庫(kù),在數(shù)據(jù)同步時(shí),需要實(shí)現(xiàn)兩地的雙向同步,可以看作是兩個(gè)單向同步的有機(jī)組合。在同步時(shí),將同步數(shù)據(jù)發(fā)起端稱為源端,將同步數(shù)據(jù)接收端稱為目標(biāo)端。

在實(shí)現(xiàn)數(shù)據(jù)同步之前,需要做以下準(zhǔn)備性工作:

(1)定義業(yè)務(wù)實(shí)體:在應(yīng)用程序中,業(yè)務(wù)實(shí)體用來(lái)存儲(chǔ)與該業(yè)務(wù)相關(guān)的操作或數(shù)據(jù),在我們的企業(yè)信息系統(tǒng)中,主要包括表單號(hào)、事件號(hào)及其它與具體表單相關(guān)的業(yè)務(wù)數(shù)據(jù)。

(2)定義同步數(shù)據(jù)表:在源端和目標(biāo)端分別定義同步數(shù)據(jù)發(fā)送表和同步數(shù)據(jù)接收表,兩者有著相同的數(shù)據(jù)結(jié)構(gòu)。發(fā)送表用于存儲(chǔ)本地變化的數(shù)據(jù)信息,接收表用于接收從異地傳送過(guò)來(lái)的數(shù)據(jù)信息。該系統(tǒng)多個(gè)業(yè)務(wù)表單共享一個(gè)同步數(shù)據(jù)表,其結(jié)構(gòu)定義如表1所示:

表1 同步數(shù)據(jù)表結(jié)構(gòu)定義

(3)構(gòu)建同步規(guī)則:根據(jù)對(duì)業(yè)務(wù)邏輯的分析,同步規(guī)則定義了數(shù)據(jù)同步時(shí)如何根據(jù)具體的條件執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,以及在沖突發(fā)生時(shí)如何保證兩地?cái)?shù)據(jù)一致性等問(wèn)題。

兩地分布式數(shù)據(jù)庫(kù)同步總體框架如圖2所示。

圖2 數(shù)據(jù)庫(kù)同步總體框架

首先將源端獲取的同步數(shù)據(jù)序列化成XML文件,寫入源端數(shù)據(jù)同步發(fā)送表,接著執(zhí)行數(shù)據(jù)傳送操作,將源端序列化的XML文件通過(guò)專線網(wǎng)絡(luò)傳輸?shù)侥繕?biāo)端,寫入目標(biāo)端數(shù)據(jù)庫(kù)同步接收表,目標(biāo)端提取傳輸過(guò)來(lái)的XML文件進(jìn)行反序列化操作,得到同步數(shù)據(jù)的副本,最后根據(jù)同步規(guī)則執(zhí)行同步操作。

(三)同步數(shù)據(jù)獲取

采用基于事件操作的方法來(lái)獲取同步數(shù)據(jù),當(dāng)用戶進(jìn)行事件操作時(shí),將該操作所包含的相關(guān)信息,包括表單號(hào)、事件號(hào)以及其他業(yè)務(wù)數(shù)據(jù)記錄下來(lái),一方面根據(jù)這些信息更新本地業(yè)務(wù)數(shù)據(jù)表,另一方面將這些信息作為同步數(shù)據(jù)提供給異地。通過(guò)這種方式,避免了從數(shù)據(jù)庫(kù)中捕獲數(shù)據(jù)變化的過(guò)程,減輕了服務(wù)器的負(fù)擔(dān),提高了工作效率。

(四)XML序列化

XML序列化的目的是將源端對(duì)數(shù)據(jù)庫(kù)的操作及操作所涉及的數(shù)據(jù)序列化成一個(gè)XML文件,該XML文件記錄了某個(gè)操作同步所需要的全部信息。通過(guò)XML序列化,可以方便地將源端產(chǎn)生的同步數(shù)據(jù)傳送到目標(biāo)端。序列化后的XML格式如圖3所示。

圖3 序列化XML格式

(五)XML數(shù)據(jù)的發(fā)送與解析

系統(tǒng)定時(shí)將從源端同步發(fā)送表中讀取的XML數(shù)據(jù)形成發(fā)送隊(duì)列,通過(guò)專線網(wǎng)絡(luò)傳送到目標(biāo)端,插入目標(biāo)端同步接收表中。目標(biāo)端接收到XML數(shù)據(jù)以后,即時(shí)調(diào)用XML解析程序,通過(guò)將XML反序列化,從中解析出表單號(hào)、事件號(hào)及各項(xiàng)業(yè)務(wù)數(shù)據(jù),并通過(guò)對(duì)表單號(hào)和事件號(hào)進(jìn)行判斷,將業(yè)務(wù)數(shù)據(jù)組裝成相應(yīng)的SQL語(yǔ)句并執(zhí)行,更新對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)表,實(shí)現(xiàn)源端數(shù)據(jù)庫(kù)和目標(biāo)端數(shù)據(jù)庫(kù)的同步。

(六)數(shù)據(jù)完整性和沖突控制

在網(wǎng)絡(luò)傳輸?shù)倪^(guò)程中不可避免的會(huì)出現(xiàn)同步數(shù)據(jù)丟失或延時(shí)的情況,如果不加以控制,則會(huì)導(dǎo)致兩地?cái)?shù)據(jù)不一致的現(xiàn)象。所以在系統(tǒng)設(shè)計(jì)的過(guò)程中,必須采取合理的措施加以解決,這也是保證分布式數(shù)據(jù)庫(kù)數(shù)據(jù)一致性的關(guān)鍵所在。

⑴數(shù)據(jù)完整性控制

數(shù)據(jù)完整性控制就是為了防止數(shù)據(jù)在網(wǎng)絡(luò)傳輸?shù)倪^(guò)程中發(fā)生丟失而導(dǎo)致數(shù)據(jù)不一致所采取的解決辦法,我們?cè)O(shè)計(jì)了如圖4所示的解決機(jī)制。

程序首先讀取源數(shù)據(jù)庫(kù)同步數(shù)據(jù)發(fā)送表中的數(shù)據(jù),形成數(shù)據(jù)發(fā)送隊(duì)列,如果發(fā)送隊(duì)列中有數(shù)據(jù),則按照數(shù)據(jù)產(chǎn)生的時(shí)間依次傳送,如果收到對(duì)方傳送回來(lái)的應(yīng)答信號(hào),則將該條數(shù)據(jù)從數(shù)據(jù)表中刪除,繼續(xù)傳送發(fā)送隊(duì)列中的下條數(shù)據(jù),如果沒(méi)有收到應(yīng)答信號(hào),則重新讀取源端同步數(shù)據(jù)發(fā)送表,重復(fù)以上流程。通過(guò)該機(jī)制,可以有效避免同步數(shù)據(jù)在傳輸過(guò)程中發(fā)生丟失導(dǎo)致的兩地?cái)?shù)據(jù)不一致現(xiàn)象。

圖4 數(shù)據(jù)完整性控制流程

(2)沖突控制

分布式數(shù)據(jù)庫(kù)系統(tǒng)中的每一個(gè)場(chǎng)地都有對(duì)數(shù)據(jù)進(jìn)行修改的權(quán)限,如果在網(wǎng)絡(luò)傳輸延時(shí)的情況下存在兩地向同一張表插入數(shù)據(jù)或者修改同一條記錄,那么在數(shù)據(jù)同步的過(guò)程中就會(huì)產(chǎn)生沖突。在我們?cè)O(shè)計(jì)過(guò)程中根據(jù)表單執(zhí)行深度、執(zhí)行結(jié)果(通過(guò)、不通過(guò))和同步數(shù)據(jù)來(lái)源(是否來(lái)自表單申請(qǐng)人歸屬地)幾個(gè)條件來(lái)進(jìn)行沖突控制,主要有以下幾種操作沖突解決機(jī)制:

①如果兩端表單執(zhí)行深度和執(zhí)行結(jié)果均相同:

同步數(shù)據(jù)來(lái)源于表單申請(qǐng)人歸屬地,以同步數(shù)據(jù)為準(zhǔn),同步數(shù)據(jù)非來(lái)源于表單申請(qǐng)人歸屬地,拋棄同步數(shù)據(jù);

②如果兩端執(zhí)行深度相同,執(zhí)行結(jié)果不同,以不通過(guò)為準(zhǔn);

③如果同步數(shù)據(jù)執(zhí)行深度大于本地,以同步數(shù)據(jù)為準(zhǔn);

④如果同步數(shù)據(jù)執(zhí)行深度小于本地,拋棄同步數(shù)據(jù),以本地?cái)?shù)據(jù)為準(zhǔn)。

其流程圖如圖5所示。

圖5 數(shù)據(jù)沖突解決機(jī)制

通過(guò)沖突機(jī)制的使用,避免了網(wǎng)絡(luò)延時(shí)對(duì)分布式數(shù)據(jù)庫(kù)同步造成的影響,有效保證了數(shù)據(jù)的一致性。

五、結(jié)語(yǔ)

隨著網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫(kù)技術(shù)的飛速發(fā)展,分布式數(shù)據(jù)庫(kù)已經(jīng)得到了非常廣泛的應(yīng)用。本文基于專線網(wǎng)絡(luò)環(huán)境提出了一種基于XML序列化技術(shù)的分布式數(shù)據(jù)庫(kù)同步解決方案,并詳細(xì)論述了其原理和實(shí)現(xiàn)方法。該方案具有擴(kuò)展性好、可靠性高等優(yōu)點(diǎn),已成功運(yùn)用于本單位企業(yè)信息系統(tǒng),運(yùn)行效果良好,具有較高的參考價(jià)值。

[1]林 源,陳志泊.分布式異構(gòu)數(shù)據(jù)庫(kù)同步系統(tǒng)的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(24):5278-5281.

[2]劉建芳,夏棟梁.XML序列化機(jī)制在客戶關(guān)系管理中的應(yīng)用[J].電腦開發(fā)與應(yīng)用,2011,24(2):31-33,37.

[3]沈 敏,許華虎,等.基于XML的分布式異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)同步系統(tǒng)研究[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(5):184-186.

猜你喜歡
序列化表單數(shù)據(jù)表
Java Web反序列化網(wǎng)絡(luò)安全漏洞分析
移動(dòng)App表單組件體驗(yàn)設(shè)計(jì)
如何建構(gòu)序列化閱讀教學(xué)
某物資管理調(diào)度系統(tǒng)的數(shù)據(jù)序列化技術(shù)
湖北省新冠肺炎疫情數(shù)據(jù)表(2.26-3.25)
湖北省新冠肺炎疫情數(shù)據(jù)表
湖北省新冠肺炎疫情數(shù)據(jù)表
淺談網(wǎng)頁(yè)制作中表單的教學(xué)
使用智能表單提高工作效率
QH165點(diǎn)焊機(jī)器人數(shù)據(jù)庫(kù)開發(fā)技術(shù)
东明县| 长乐市| 高安市| 伊春市| 柞水县| 孙吴县| 武穴市| 华亭县| 龙游县| 隆回县| 府谷县| 彰化县| 白银市| 澜沧| 峨山| 阿克苏市| 大兴区| 深水埗区| 白银市| 中江县| 孝昌县| 伊宁市| 郑州市| 易门县| 新巴尔虎右旗| 临沂市| 荃湾区| 江陵县| 柏乡县| 大关县| 司法| 休宁县| 济源市| 昂仁县| 兰州市| 新龙县| 万盛区| 佛山市| 寿宁县| 壶关县| 塘沽区|