張 瑩,步曉亮,李 強,徐 輝
當前,分布式數據庫系統已被廣泛應用。分布式數據庫系統是指數據在物理上分散而在邏輯上集中的數據庫系統[1-3]。分布式數據庫系統通過適當的數據冗余,增加了系統的效率和可靠性[4];通過提供局部的數據自治和全局的數據共享,使系統具有快速的數據處理能力。分布式數據庫還有一個重要特點,即在用戶看來,整個數據庫仍然是一個集中的數據庫。用戶不關心數據物理位置分布的細節,也不必關心數據副本是否一致,分布的實現完全由系統來完成。而要實現上述特點,就要依賴數據同步技術。
數據同步技術[5]通過使在分布式數據庫中的數據庫站點之間的數據更新的同步,達到使數據分布存放的目的,從而實現數據庫的分布式處理應用。這種處理方式允許應用程序透明地存取分布存放的數據,使用戶感覺好像這些數據就存放在本地的數據庫服務器上。
傳統的數據庫同步技術主要是由各大主流數據庫廠商提供的同步方案,如Oracle提出的透明網關技術、微軟公司的出版者/訂閱者方案、DB2提出的CCD(Consistent Change Data)表方式等。這些同步解決方案雖各有所長但也有缺點,主要表現為過于依賴自身的數據庫系統,無法實現真正的異構,且往往對自身的應用系統改動或影響較大。因此,設計一種應對于異構數據庫間的數據同步技術顯得十分必要。
本文根據分布式數據庫的有關理論,利用XML(eXtensible Markup Language)和JAVA技術,結合實際需求,研究和設計一套分布式數據庫同步系統。此同步系統具有以下特點。
JAVA技術是一門跨平臺的語言。利用JAVA技術開發的模塊或系統,不需要過多考慮操作系統的差異性,具有很好的跨平臺適應能力。該同步系統采用JAVA技術進行開發,具有很好的跨平臺性。XML作為一種中間件,降低了異構數據庫系統之間信息交換的復雜性,解決了異構數據庫系統的差異性和不兼容性??砂旬悩嫈祿煜到y之間的信息交換轉變為數據庫與XML之間的映射關系,然后使用一種XML格式實現異構數據庫系統之間信息的交換。這有利于以后系統的擴充和與其他系統的信息交流。
XML[6]是由W3C(World Wide Web Consortium)制定的一種基于SGML(Standard Generalized Markup Language,標準通用標記語言)的標記語言。它提供了一種用文本格式描述數據的方法,主要目的是使用標記、屬性等選項來描述數據內容。XML可以通過DTD(Document Type Definition,文檔類型定義)和XML schema對其結構進行定義和驗證。XML技術支持DOM(Document Object Model,文檔對象模型)和SAX(Simple Application for XML,XML簡單應用程序)兩種編程接口技術,還能使用XPath語言對數據內容進行查詢。XML技術支持XSLT(eXtensible Style sheet Language Transformations,可擴展樣式表語言轉換)格式轉換。利用XSLT技術能將XML文件轉換為各種不同的格式,如格式不同的XML文件、HTML文件、文本文件、無線標記語言(WML)和SVG文件等。
可以按不同的應用環境選擇不同的數據同步模式:全量同步或增量同步。全量同步即所有數據庫存有最大化數據,任一數據庫數據發生變化,需要全量同步給所有其他數據庫;增量同步可以通過配置,選擇同步部分變化數據給指定數據庫。
不會因為網絡原因丟失數據,也不能因為某個站點的數據丟失導致整個系統數據的錯亂。
傳輸數據遵循特殊的封裝格式,并通過安全設備進行傳輸數據的機密性和完整性保護。
總之,該同步機制不僅實施簡單、配置靈活、效率高,而且具有較強的穩定性和擴展性。
本文采用基于交換中心的同步架構方式,即每個數據庫站點只需要提交待同步數據給交換中心,然后由交換中心決定數據需要推送給哪個數據庫站點。這樣每個數據庫站點的數據發生變化后,就不需要分發給所有其他數據庫站點,只需將數據推送給交換中心,然后由交換中心統一分發數據。這樣既避免了各站點間頻繁的交換數據,減少了由于數據庫同步導致的網絡開銷,又減弱了各站點間的耦合性。同步架構如圖1所示。

圖1 同步架構
如圖1所示,基于交換中心的同步架構具有如下優點。
第一,可方便實現同步模式的靈活配置。每個站點只需要將數據上報給交換中心,至于數據需要全量同步還是部分同步,是同步給其他所有站點還是只同步給某個特定站點,則只需在交換中心進行配置,而不需要在每個站點進行配置。
第二,減少了數據庫站點需要維護其他站點的麻煩,方便擴展站點和刪減站點。由于每個站點只需與交換中心交互,對當前站點來說,其他數據庫站點的存在與否是透明的,即使由于后期需要而增加或刪減了站點,當前數據庫站點的運行也不受任何影響。
2.2.1 系統組成
該同步系統包含三部分:各數據庫站點同步模塊、交換中心和數據傳輸模塊。其中,數據庫站點同步模塊主要負責變化數據的采集、XML數據的封裝、XML數據的解析以及同步數據的入庫等操作;交換中心主要負責同步模式的配置、同步站點的維護、同步數據的收集與分發等;數據傳輸模塊則主要負責數據的安全傳輸等。它的組成結構,如圖2所示。

圖2 同步系統組成
如圖2所示,同步模塊A和同步模塊B分別部署于數據庫站點A和數據庫站點B,以用于監聽對應站點的數據變化。當本站點有數據變化時,通過數據采集模塊采集變化數據,然后調用XML封裝模塊將數據封裝成一定格式的XML文件,交由數據傳輸模塊進行傳輸;交換中心接收到數據傳輸模塊傳來的數據后,通過數據收集模塊進行匯總;至此,數據上報階段完成。交換中心對數據進行匯總后,可根據同步配置信息,調用數據分發模塊,將待同步數據交予數據傳輸模塊,由數據傳輸模塊將數據下發給對應的站點。對應的接收站點接收到數據后,調用XML解析模塊解析數據,然后由入庫模塊完成數據的入庫。至此,數據下發完成。它的數據同步過程,如圖3所示。

圖3 同步過程
如圖3所示,在一次數據同步過程中,數據庫站點A的數據發生了變化。需要同步數據時,A的同步模塊通過將待同步數據轉換成符合一定格式的XML文本,然后發送給交換中心。交換中心則根據配置信息選擇將數據發送給哪(幾)個站點。B接收到XML文件后,通過本地同步程序解析為數據庫有效數據。
交換中心的站點維護模塊主要完成數據庫站點的增刪和信息維護等,主要包含站點的IP信息、端口信息、在線信息等,如表1所示。

表1 同步維護信息表
同步配置模塊主要配置同步模式、數據下發模式等。其中,同步模式主要是配置全量同步或增量同步;數據下發模式可以配置數據是實時下發或定時下發等,如表2所示。

表2 同步配置表
2.2.2 同步詳細流程
本同步系統的詳細流程,如圖4所示。

圖4 同步詳細流程
如圖4所示,當網絡不通或對應站點不在線時,同步系統提供數據臨時存儲功能,防止數據丟失,以保證數據同步的穩定性。
2.2.3 數據變化的捕捉方式
數據信息變化的獲取是數據進行同步的基礎。它是數據同步更新的依據,也是同步操作的主體(即待同步數據)產生的源頭。這里,本文選擇觸發器方式。在源數據庫中對同步數據信息對象建立一個觸發器,當數據庫中的同步數據發生插入、修改和刪除變化操作時,觸發器被激活,標記變化數據。然后,觸發本地同步模塊啟動,將變化數據映射成XML文件并及時傳送給交換中心。經過實驗對比,相對于日志法、快照法等方案,該方案具有執行效率較高的優點,原理如圖5所示。

圖5 數據捕捉原理
如圖5所示,當數據庫站點的源數據庫發生數據變更時,觸發器被觸發,將變化的增量數據寫成XML文件,然后由同步模塊經傳輸網絡發送給交換中心。
2.2.4 XML文本格式
當數據庫站點中相應表數據發生變化時,數據庫同步程序根據表映射關系生成XML文檔,并視該文檔為消息載體,將此消息發布到交換中心。生成的XML文檔的主要結構如下:
<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 安全傳輸模塊
本同步系統基于交換中心,交換中心維護全部數據庫站點的IP地址等信息,各數據庫站點也清楚知道交換中心的地址。這里,本系統的安全傳輸模塊采用JAVA的套接字進行編程,通過對方的IP與端口進行建立連接。
socket是面向客戶/服務器模型而設計的。針對客戶和服務器程序,提供不同的socket系統調用??蛻綦S機申請一個socket,服務器擁有全局公認的socket,任何客戶都可以向它發出連接請求和信息請求。socket利用客戶/服務器模式巧妙解決了進程之間建立通信連接的問題。它的偽代碼如下:
//接收端
ServerSocket ss = new ServerSocket(Port);
Socket socket = ss.accept();
//發送端
Socket s = new Socket(IP, Port);
傳輸過程中的安全傳輸數據協議格式,如圖6所示。

圖6 安全傳輸數據格式
如圖6所示,數據密文是用對稱密鑰保護的發送數據體;對稱密鑰部分由接收方的公鑰保護,僅可由接收方私鑰進行解密;簽名值是數據體的簽名,以驗證發送方的身份和保證數據的完整性。
文中描述了一種基于交換中心的數據同步技術,通過交換中心的架構提供服務,并具體分析了該同步技術的架構設計、組成部分、同步過程、數據捕捉方式以及XML的主體格式等。通過該數據同步技術,不僅能夠高效、準確地完成數據同步任務,而且能夠靈活配置同步模式,大大降低了同步過程中各站點的配置復雜性,并將異構數據庫間的數據交換簡單化。
[1] 王珊.數據庫系統概論[M].北京:電子工業出版社,2001.WANG Shan.Introduction to Database System[M].Beijing:Publishing House of Electronics Industry,2001.
[2] 薩師煊,王珊.數據庫系統概論[M].第3版.北京:高等教育出版社,2000.SA Shi-xuan,WANG Shan.Introduction to Database System[M].3rd Edition.Beijing:Higher Education Press,2000.
[3] 賈焰,王志英,韓偉紅等.分布式數據庫技術[M].北京:國防工業出版社,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] 蒲志林.網絡環境下分布式數據庫同步機制的研究[D].大連:大連海事大學,2003.PU Zhi-lin.Distributed Database Synchronization Mechanism under Network Environment[D].Dalian:Dalian Maritime University,2003.
[5] 苗福友.數據庫同步技術的研究及其在ZK-MIS中的實現[D].北京:北京航天航空大學,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.