張 瑩,步曉亮,李 強(qiáng),徐 輝
當(dāng)前,分布式數(shù)據(jù)庫系統(tǒng)已被廣泛應(yīng)用。分布式數(shù)據(jù)庫系統(tǒng)是指數(shù)據(jù)在物理上分散而在邏輯上集中的數(shù)據(jù)庫系統(tǒng)[1-3]。分布式數(shù)據(jù)庫系統(tǒng)通過適當(dāng)?shù)臄?shù)據(jù)冗余,增加了系統(tǒng)的效率和可靠性[4];通過提供局部的數(shù)據(jù)自治和全局的數(shù)據(jù)共享,使系統(tǒng)具有快速的數(shù)據(jù)處理能力。分布式數(shù)據(jù)庫還有一個(gè)重要特點(diǎn),即在用戶看來,整個(gè)數(shù)據(jù)庫仍然是一個(gè)集中的數(shù)據(jù)庫。用戶不關(guān)心數(shù)據(jù)物理位置分布的細(xì)節(jié),也不必關(guān)心數(shù)據(jù)副本是否一致,分布的實(shí)現(xiàn)完全由系統(tǒng)來完成。而要實(shí)現(xiàn)上述特點(diǎn),就要依賴數(shù)據(jù)同步技術(shù)。
數(shù)據(jù)同步技術(shù)[5]通過使在分布式數(shù)據(jù)庫中的數(shù)據(jù)庫站點(diǎn)之間的數(shù)據(jù)更新的同步,達(dá)到使數(shù)據(jù)分布存放的目的,從而實(shí)現(xiàn)數(shù)據(jù)庫的分布式處理應(yīng)用。這種處理方式允許應(yīng)用程序透明地存取分布存放的數(shù)據(jù),使用戶感覺好像這些數(shù)據(jù)就存放在本地的數(shù)據(jù)庫服務(wù)器上。
傳統(tǒng)的數(shù)據(jù)庫同步技術(shù)主要是由各大主流數(shù)據(jù)庫廠商提供的同步方案,如Oracle提出的透明網(wǎng)關(guān)技術(shù)、微軟公司的出版者/訂閱者方案、DB2提出的CCD(Consistent Change Data)表方式等。這些同步解決方案雖各有所長但也有缺點(diǎn),主要表現(xiàn)為過于依賴自身的數(shù)據(jù)庫系統(tǒng),無法實(shí)現(xiàn)真正的異構(gòu),且往往對(duì)自身的應(yīng)用系統(tǒng)改動(dòng)或影響較大。因此,設(shè)計(jì)一種應(yīng)對(duì)于異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)同步技術(shù)顯得十分必要。
本文根據(jù)分布式數(shù)據(jù)庫的有關(guān)理論,利用XML(eXtensible Markup Language)和JAVA技術(shù),結(jié)合實(shí)際需求,研究和設(shè)計(jì)一套分布式數(shù)據(jù)庫同步系統(tǒng)。此同步系統(tǒng)具有以下特點(diǎn)。
JAVA技術(shù)是一門跨平臺(tái)的語言。利用JAVA技術(shù)開發(fā)的模塊或系統(tǒng),不需要過多考慮操作系統(tǒng)的差異性,具有很好的跨平臺(tái)適應(yīng)能力。該同步系統(tǒng)采用JAVA技術(shù)進(jìn)行開發(fā),具有很好的跨平臺(tái)性。XML作為一種中間件,降低了異構(gòu)數(shù)據(jù)庫系統(tǒng)之間信息交換的復(fù)雜性,解決了異構(gòu)數(shù)據(jù)庫系統(tǒng)的差異性和不兼容性??砂旬悩?gòu)數(shù)據(jù)庫系統(tǒng)之間的信息交換轉(zhuǎn)變?yōu)閿?shù)據(jù)庫與XML之間的映射關(guān)系,然后使用一種XML格式實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫系統(tǒng)之間信息的交換。這有利于以后系統(tǒng)的擴(kuò)充和與其他系統(tǒng)的信息交流。
XML[6]是由W3C(World Wide Web Consortium)制定的一種基于SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)的標(biāo)記語言。它提供了一種用文本格式描述數(shù)據(jù)的方法,主要目的是使用標(biāo)記、屬性等選項(xiàng)來描述數(shù)據(jù)內(nèi)容。XML可以通過DTD(Document Type Definition,文檔類型定義)和XML schema對(duì)其結(jié)構(gòu)進(jìn)行定義和驗(yàn)證。XML技術(shù)支持DOM(Document Object Model,文檔對(duì)象模型)和SAX(Simple Application for XML,XML簡單應(yīng)用程序)兩種編程接口技術(shù),還能使用XPath語言對(duì)數(shù)據(jù)內(nèi)容進(jìn)行查詢。XML技術(shù)支持XSLT(eXtensible Style sheet Language Transformations,可擴(kuò)展樣式表語言轉(zhuǎn)換)格式轉(zhuǎn)換。利用XSLT技術(shù)能將XML文件轉(zhuǎn)換為各種不同的格式,如格式不同的XML文件、HTML文件、文本文件、無線標(biāo)記語言(WML)和SVG文件等。
可以按不同的應(yīng)用環(huán)境選擇不同的數(shù)據(jù)同步模式:全量同步或增量同步。全量同步即所有數(shù)據(jù)庫存有最大化數(shù)據(jù),任一數(shù)據(jù)庫數(shù)據(jù)發(fā)生變化,需要全量同步給所有其他數(shù)據(jù)庫;增量同步可以通過配置,選擇同步部分變化數(shù)據(jù)給指定數(shù)據(jù)庫。
不會(huì)因?yàn)榫W(wǎng)絡(luò)原因丟失數(shù)據(jù),也不能因?yàn)槟硞€(gè)站點(diǎn)的數(shù)據(jù)丟失導(dǎo)致整個(gè)系統(tǒng)數(shù)據(jù)的錯(cuò)亂。
傳輸數(shù)據(jù)遵循特殊的封裝格式,并通過安全設(shè)備進(jìn)行傳輸數(shù)據(jù)的機(jī)密性和完整性保護(hù)。
總之,該同步機(jī)制不僅實(shí)施簡單、配置靈活、效率高,而且具有較強(qiáng)的穩(wěn)定性和擴(kuò)展性。
本文采用基于交換中心的同步架構(gòu)方式,即每個(gè)數(shù)據(jù)庫站點(diǎn)只需要提交待同步數(shù)據(jù)給交換中心,然后由交換中心決定數(shù)據(jù)需要推送給哪個(gè)數(shù)據(jù)庫站點(diǎn)。這樣每個(gè)數(shù)據(jù)庫站點(diǎn)的數(shù)據(jù)發(fā)生變化后,就不需要分發(fā)給所有其他數(shù)據(jù)庫站點(diǎn),只需將數(shù)據(jù)推送給交換中心,然后由交換中心統(tǒng)一分發(fā)數(shù)據(jù)。這樣既避免了各站點(diǎn)間頻繁的交換數(shù)據(jù),減少了由于數(shù)據(jù)庫同步導(dǎo)致的網(wǎng)絡(luò)開銷,又減弱了各站點(diǎn)間的耦合性。同步架構(gòu)如圖1所示。
圖1 同步架構(gòu)
如圖1所示,基于交換中心的同步架構(gòu)具有如下優(yōu)點(diǎn)。
第一,可方便實(shí)現(xiàn)同步模式的靈活配置。每個(gè)站點(diǎn)只需要將數(shù)據(jù)上報(bào)給交換中心,至于數(shù)據(jù)需要全量同步還是部分同步,是同步給其他所有站點(diǎn)還是只同步給某個(gè)特定站點(diǎn),則只需在交換中心進(jìn)行配置,而不需要在每個(gè)站點(diǎn)進(jìn)行配置。
第二,減少了數(shù)據(jù)庫站點(diǎn)需要維護(hù)其他站點(diǎn)的麻煩,方便擴(kuò)展站點(diǎn)和刪減站點(diǎn)。由于每個(gè)站點(diǎn)只需與交換中心交互,對(duì)當(dāng)前站點(diǎn)來說,其他數(shù)據(jù)庫站點(diǎn)的存在與否是透明的,即使由于后期需要而增加或刪減了站點(diǎn),當(dāng)前數(shù)據(jù)庫站點(diǎn)的運(yùn)行也不受任何影響。
2.2.1 系統(tǒng)組成
該同步系統(tǒng)包含三部分:各數(shù)據(jù)庫站點(diǎn)同步模塊、交換中心和數(shù)據(jù)傳輸模塊。其中,數(shù)據(jù)庫站點(diǎn)同步模塊主要負(fù)責(zé)變化數(shù)據(jù)的采集、XML數(shù)據(jù)的封裝、XML數(shù)據(jù)的解析以及同步數(shù)據(jù)的入庫等操作;交換中心主要負(fù)責(zé)同步模式的配置、同步站點(diǎn)的維護(hù)、同步數(shù)據(jù)的收集與分發(fā)等;數(shù)據(jù)傳輸模塊則主要負(fù)責(zé)數(shù)據(jù)的安全傳輸?shù)?。它的組成結(jié)構(gòu),如圖2所示。
圖2 同步系統(tǒng)組成
如圖2所示,同步模塊A和同步模塊B分別部署于數(shù)據(jù)庫站點(diǎn)A和數(shù)據(jù)庫站點(diǎn)B,以用于監(jiān)聽對(duì)應(yīng)站點(diǎn)的數(shù)據(jù)變化。當(dāng)本站點(diǎn)有數(shù)據(jù)變化時(shí),通過數(shù)據(jù)采集模塊采集變化數(shù)據(jù),然后調(diào)用XML封裝模塊將數(shù)據(jù)封裝成一定格式的XML文件,交由數(shù)據(jù)傳輸模塊進(jìn)行傳輸;交換中心接收到數(shù)據(jù)傳輸模塊傳來的數(shù)據(jù)后,通過數(shù)據(jù)收集模塊進(jìn)行匯總;至此,數(shù)據(jù)上報(bào)階段完成。交換中心對(duì)數(shù)據(jù)進(jìn)行匯總后,可根據(jù)同步配置信息,調(diào)用數(shù)據(jù)分發(fā)模塊,將待同步數(shù)據(jù)交予數(shù)據(jù)傳輸模塊,由數(shù)據(jù)傳輸模塊將數(shù)據(jù)下發(fā)給對(duì)應(yīng)的站點(diǎn)。對(duì)應(yīng)的接收站點(diǎn)接收到數(shù)據(jù)后,調(diào)用XML解析模塊解析數(shù)據(jù),然后由入庫模塊完成數(shù)據(jù)的入庫。至此,數(shù)據(jù)下發(fā)完成。它的數(shù)據(jù)同步過程,如圖3所示。
圖3 同步過程
如圖3所示,在一次數(shù)據(jù)同步過程中,數(shù)據(jù)庫站點(diǎn)A的數(shù)據(jù)發(fā)生了變化。需要同步數(shù)據(jù)時(shí),A的同步模塊通過將待同步數(shù)據(jù)轉(zhuǎn)換成符合一定格式的XML文本,然后發(fā)送給交換中心。交換中心則根據(jù)配置信息選擇將數(shù)據(jù)發(fā)送給哪(幾)個(gè)站點(diǎn)。B接收到XML文件后,通過本地同步程序解析為數(shù)據(jù)庫有效數(shù)據(jù)。
交換中心的站點(diǎn)維護(hù)模塊主要完成數(shù)據(jù)庫站點(diǎn)的增刪和信息維護(hù)等,主要包含站點(diǎn)的IP信息、端口信息、在線信息等,如表1所示。
表1 同步維護(hù)信息表
同步配置模塊主要配置同步模式、數(shù)據(jù)下發(fā)模式等。其中,同步模式主要是配置全量同步或增量同步;數(shù)據(jù)下發(fā)模式可以配置數(shù)據(jù)是實(shí)時(shí)下發(fā)或定時(shí)下發(fā)等,如表2所示。
表2 同步配置表
2.2.2 同步詳細(xì)流程
本同步系統(tǒng)的詳細(xì)流程,如圖4所示。
圖4 同步詳細(xì)流程
如圖4所示,當(dāng)網(wǎng)絡(luò)不通或?qū)?yīng)站點(diǎn)不在線時(shí),同步系統(tǒng)提供數(shù)據(jù)臨時(shí)存儲(chǔ)功能,防止數(shù)據(jù)丟失,以保證數(shù)據(jù)同步的穩(wěn)定性。
2.2.3 數(shù)據(jù)變化的捕捉方式
數(shù)據(jù)信息變化的獲取是數(shù)據(jù)進(jìn)行同步的基礎(chǔ)。它是數(shù)據(jù)同步更新的依據(jù),也是同步操作的主體(即待同步數(shù)據(jù))產(chǎn)生的源頭。這里,本文選擇觸發(fā)器方式。在源數(shù)據(jù)庫中對(duì)同步數(shù)據(jù)信息對(duì)象建立一個(gè)觸發(fā)器,當(dāng)數(shù)據(jù)庫中的同步數(shù)據(jù)發(fā)生插入、修改和刪除變化操作時(shí),觸發(fā)器被激活,標(biāo)記變化數(shù)據(jù)。然后,觸發(fā)本地同步模塊啟動(dòng),將變化數(shù)據(jù)映射成XML文件并及時(shí)傳送給交換中心。經(jīng)過實(shí)驗(yàn)對(duì)比,相對(duì)于日志法、快照法等方案,該方案具有執(zhí)行效率較高的優(yōu)點(diǎn),原理如圖5所示。
圖5 數(shù)據(jù)捕捉原理
如圖5所示,當(dāng)數(shù)據(jù)庫站點(diǎn)的源數(shù)據(jù)庫發(fā)生數(shù)據(jù)變更時(shí),觸發(fā)器被觸發(fā),將變化的增量數(shù)據(jù)寫成XML文件,然后由同步模塊經(jīng)傳輸網(wǎng)絡(luò)發(fā)送給交換中心。
2.2.4 XML文本格式
當(dāng)數(shù)據(jù)庫站點(diǎn)中相應(yīng)表數(shù)據(jù)發(fā)生變化時(shí),數(shù)據(jù)庫同步程序根據(jù)表映射關(guān)系生成XML文檔,并視該文檔為消息載體,將此消息發(fā)布到交換中心。生成的XML文檔的主要結(jié)構(gòu)如下:
<complexType name="header">
<sequence>
<element name="id"type="string"/>
<elementname="sender"type="string"/>
<elementname="createdate"type="dateTime"/><elementname="perioddate"type="dateTime"/>
<elementname="datasize"type="long"/> < /sequence>
</complexType>
<complexTypename="content">
<sequence>
<elementname="dataid"type="string"/>
<elementname="tablename"type="string"/>
<elementname="columnid"type="ByteArray"/>
......
......
</sequence>
</complexType>
2.2.5 安全傳輸模塊
本同步系統(tǒng)基于交換中心,交換中心維護(hù)全部數(shù)據(jù)庫站點(diǎn)的IP地址等信息,各數(shù)據(jù)庫站點(diǎn)也清楚知道交換中心的地址。這里,本系統(tǒng)的安全傳輸模塊采用JAVA的套接字進(jìn)行編程,通過對(duì)方的IP與端口進(jìn)行建立連接。
socket是面向客戶/服務(wù)器模型而設(shè)計(jì)的。針對(duì)客戶和服務(wù)器程序,提供不同的socket系統(tǒng)調(diào)用??蛻綦S機(jī)申請(qǐng)一個(gè)socket,服務(wù)器擁有全局公認(rèn)的socket,任何客戶都可以向它發(fā)出連接請(qǐng)求和信息請(qǐng)求。socket利用客戶/服務(wù)器模式巧妙解決了進(jìn)程之間建立通信連接的問題。它的偽代碼如下:
//接收端
ServerSocket ss = new ServerSocket(Port);
Socket socket = ss.accept();
//發(fā)送端
Socket s = new Socket(IP, Port);
傳輸過程中的安全傳輸數(shù)據(jù)協(xié)議格式,如圖6所示。
圖6 安全傳輸數(shù)據(jù)格式
如圖6所示,數(shù)據(jù)密文是用對(duì)稱密鑰保護(hù)的發(fā)送數(shù)據(jù)體;對(duì)稱密鑰部分由接收方的公鑰保護(hù),僅可由接收方私鑰進(jìn)行解密;簽名值是數(shù)據(jù)體的簽名,以驗(yàn)證發(fā)送方的身份和保證數(shù)據(jù)的完整性。
文中描述了一種基于交換中心的數(shù)據(jù)同步技術(shù),通過交換中心的架構(gòu)提供服務(wù),并具體分析了該同步技術(shù)的架構(gòu)設(shè)計(jì)、組成部分、同步過程、數(shù)據(jù)捕捉方式以及XML的主體格式等。通過該數(shù)據(jù)同步技術(shù),不僅能夠高效、準(zhǔn)確地完成數(shù)據(jù)同步任務(wù),而且能夠靈活配置同步模式,大大降低了同步過程中各站點(diǎn)的配置復(fù)雜性,并將異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)交換簡單化。
[1] 王珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:電子工業(yè)出版社,2001.WANG Shan.Introduction to Database System[M].Beijing:Publishing House of Electronics Industry,2001.
[2] 薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].第3版.北京:高等教育出版社,2000.SA Shi-xuan,WANG Shan.Introduction to Database System[M].3rd Edition.Beijing:Higher Education Press,2000.
[3] 賈焰,王志英,韓偉紅等.分布式數(shù)據(jù)庫技術(shù)[M].北京:國防工業(yè)出版社,2001:342-349.JIA Yan,WANG Zhi-ying,HAN Wei-hong,et al.Distributed Database Technology[M].Beijing:National Defense Industry Press,2001:342-349.
[4] 蒲志林.網(wǎng)絡(luò)環(huán)境下分布式數(shù)據(jù)庫同步機(jī)制的研究[D].大連:大連海事大學(xué),2003.PU Zhi-lin.Distributed Database Synchronization Mechanism under Network Environment[D].Dalian:Dalian Maritime University,2003.
[5] 苗福友.數(shù)據(jù)庫同步技術(shù)的研究及其在ZK-MIS中的實(shí)現(xiàn)[D].北京:北京航天航空大學(xué),2001.MIAO Fu-you.Study on Database Synchronization Technology and Its Implementation in ZK-MIS[D].Beijing:Beijing Aerospace University,2001.
[6] XML 1.0.W3C Recommendation 10-February-1998[S].http://www.w3.org/XML.