郭大春,田農(nóng)樂
(浙江萬里學(xué)院 信息化辦公室,浙江 寧波315100)
目前,由于大多數(shù)高校的網(wǎng)絡(luò)應(yīng)用系統(tǒng)存在各自為政,沒有統(tǒng)一規(guī)范的信息、接口標(biāo)準(zhǔn),信息難以交換,形成信息孤島,難以在更高的層次上進(jìn)行信息的分析處理等操作,因此各高校都開始進(jìn)行信息化校園建設(shè),而信息化校園建設(shè)的關(guān)鍵是建立公共數(shù)據(jù)中心,其核心技術(shù)是數(shù)據(jù)庫同步技術(shù)。如何高效、安全地保持?jǐn)?shù)據(jù)庫之間數(shù)據(jù)同步,是信息化校園建設(shè)中需要考慮的重要問題之一。針對這種現(xiàn)像,本文對各種同步技術(shù)與策略進(jìn)行分析研究。
數(shù)據(jù)庫要實(shí)現(xiàn)同步,首先需實(shí)現(xiàn)數(shù)據(jù)庫某幾個表或者整個庫的復(fù)制,其中最重要的是復(fù)制過程中采用的變化捕獲方法。不同數(shù)據(jù)庫產(chǎn)品支持不同的變化捕獲方法,如快照法、觸發(fā)器法、日志法、API法、影子表法、控制表法。其中,觸發(fā)器法和日志法是最基本的變化捕獲的方法,目前流行的商用數(shù)據(jù)庫都提供觸發(fā)器機(jī)制或日志分析工具。
快照是數(shù)據(jù)庫中存儲對象在某一時刻的即時映像。通過為同步對象定義一個快照方法,可以將它的當(dāng)前映像作為更新副本。基于快照法不需依賴特別的機(jī)制,不占用額外的系統(tǒng)資源,管理和操作也非常容易,而且在同步初始化和崩潰恢復(fù)時是必須的。但由于它無法區(qū)分同步對象中哪些具體項(xiàng)發(fā)生了改變,因此效率很低。Oracle和SQL Server明確提供了基于快照的方法。事實(shí)上,所有的同步方案都隱含地要用到快照法。
在源數(shù)據(jù)庫為同步對象創(chuàng)建相應(yīng)的觸發(fā)器,當(dāng)對同步對象進(jìn)行修改、插入或刪除等DML命令時,觸發(fā)器被喚醒,將變化傳播到目標(biāo)數(shù)據(jù)庫?;谟|發(fā)器法克服了基于快照法的主要缺點(diǎn),提高了效率。但是觸發(fā)器法占用的系統(tǒng)資源比較多,對較復(fù)雜的同步任務(wù)需要非常復(fù)雜的配置和實(shí)施,管理極不方便。Oracle的對稱復(fù)制綜合應(yīng)用了基于快照和基于觸發(fā)器兩種方法。
數(shù)據(jù)庫日志作為維護(hù)數(shù)據(jù)完整性和數(shù)據(jù)庫恢復(fù)的重要信息,其中包含了全部成功提交的操作記錄信息?;谌罩痉ň褪峭ㄟ^分析數(shù)據(jù)庫日志的信息來捕獲同步對象的變化序列。傳輸?shù)纳舷录壷g僅在進(jìn)行同步時,僅對相對于上次同步傳輸后修改的數(shù)據(jù)進(jìn)行傳輸。傳輸上下兩級之間日志發(fā)生變化的記錄從而提高傳輸速度,減少了傳輸信息量以及帶來的一系列問題。大多數(shù)數(shù)據(jù)庫都有日志,利用日志不僅方便,也不會占用太多額外的系統(tǒng)資源。但是基于日志法也存在一些缺點(diǎn):首先,一些數(shù)據(jù)庫系統(tǒng)不公開其日志的格式,除非廠家提供相應(yīng)的日志分析工具或接口,否則要開發(fā)一個基于日志的變化捕獲程序非常困難;其次,盡管都是利用數(shù)據(jù)庫日志獲取變化,但不同數(shù)據(jù)庫系統(tǒng)在具體細(xì)節(jié)上還是存在很大差異,這會給異構(gòu)數(shù)據(jù)庫帶來新的問題;最后,很多情況下DBA對數(shù)據(jù)庫日志的管理已經(jīng)很繁重、很復(fù)雜了,而基于日志法無疑會加重這種負(fù)擔(dān)。DB2、SyBase、SQL Server等主要商用數(shù)據(jù)庫都采用了該方法。
隨著數(shù)據(jù)庫同步需求的出現(xiàn)和增長,人們提出了各種同步解決方案,像常用的基于JMS和基于Web Service的數(shù)據(jù)庫同步方案和技術(shù)主要由數(shù)據(jù)庫端觸發(fā)器和客戶端應(yīng)用程序共同完成。該類型的同步技術(shù)具有以下優(yōu)點(diǎn):在業(yè)務(wù)過程中獲得同步數(shù)據(jù),實(shí)時性高,對同步服務(wù)器的性能要求高。
采用JMS實(shí)現(xiàn)應(yīng)用系統(tǒng)數(shù)據(jù)庫和公共數(shù)據(jù)庫之間的數(shù)據(jù)同步,在這種運(yùn)行模式下,應(yīng)用系統(tǒng)數(shù)據(jù)庫和公共數(shù)據(jù)庫都可以在自己需要數(shù)據(jù)時或資源空閑時將變化量提交或從相應(yīng)的主題取得其他數(shù)據(jù)的變化量進(jìn)行更新。應(yīng)用系統(tǒng)將自己的變化量提交到服務(wù)器后,就完成了自己的任務(wù)??蛻舳丝梢赃M(jìn)行其他的操作,不需要等待服務(wù)器端的消息處理結(jié)果,即使是網(wǎng)絡(luò)故障或者服務(wù)器崩潰也不會造成數(shù)據(jù)的丟失或不一致性,消息會保存在消息隊(duì)列或主題中直到被最終接收。比早期采用的套接字和RMI方式更加可靠和高效。
當(dāng)應(yīng)用系統(tǒng)數(shù)據(jù)庫需要向公共數(shù)據(jù)庫請求更新時,在客戶端將更新信息發(fā)送到JMS服務(wù)器,服務(wù)器端的消息驅(qū)動Bean(消息驅(qū)動Bean是能夠接收J(rèn)MS消息的特殊的EJB組件)會監(jiān)聽并接收這條信息,它調(diào)用實(shí)體Bean或會話Bean來完成具體的數(shù)據(jù)庫更新操作。實(shí)際上消息驅(qū)動Bean是一個在服務(wù)器上實(shí)現(xiàn)某些業(yè)務(wù)邏輯的JMS消息使用者,當(dāng)客戶端發(fā)送一個JMS消息到達(dá)時由容器來調(diào)用它,客戶端由JMS通過發(fā)送消息給JMS目的地(隊(duì)列或主題)來訪問消息驅(qū)動Bean,如圖1所示。
圖1 基于JMS的數(shù)據(jù)同步的模型
在發(fā)送消息之前,按照需要同步的數(shù)據(jù)表來定義應(yīng)用系統(tǒng)數(shù)據(jù)庫與公共數(shù)據(jù)庫之間傳送消息的格式,可以采用XML消息格式。當(dāng)有消息到達(dá)公共系統(tǒng)時,服務(wù)器端的消息驅(qū)動Bean會監(jiān)聽到消息,它對接收的消息進(jìn)行解析,取出相應(yīng)的數(shù)據(jù)庫字段,并調(diào)用相應(yīng)的EJB組件來完成業(yè)務(wù)的邏輯處理,更新公共數(shù)據(jù)庫。
采用JMS方案的數(shù)據(jù)同步技術(shù)能大大縮短應(yīng)用系統(tǒng)與公共系統(tǒng)之間的響應(yīng)時間,保證數(shù)據(jù)準(zhǔn)確、高效地傳輸,更易于在各種平臺之間移植。
現(xiàn)有主要平臺供應(yīng)商都支持Web Service的標(biāo)準(zhǔn)協(xié)議,可以使用任何語言編寫Web服務(wù)。Web Service完全屏蔽了不同軟件平臺的差異,不用考慮應(yīng)用和具體Web Service所在的環(huán)境,并且使用綁定到HTTP的SOAP消息能不受阻攔地穿越現(xiàn)有的防火墻軟件。借助于WSDL和UDDI,同步功能能夠以服務(wù)的形式被描述、注冊并被不同的應(yīng)用發(fā)現(xiàn)和使用。
方案主要由應(yīng)用系統(tǒng)數(shù)據(jù)庫、數(shù)據(jù)同步客戶端程序、Web服務(wù)器、Web Service程序和公共數(shù)據(jù)庫五部分組成。
數(shù)據(jù)同步程序負(fù)責(zé)從應(yīng)用系統(tǒng)的數(shù)據(jù)庫中提取同步數(shù)據(jù)以及負(fù)責(zé)與Web服務(wù)器中的Web Service程序進(jìn)行通信,調(diào)用其發(fā)布的服務(wù)。當(dāng)進(jìn)行數(shù)據(jù)同步時,根據(jù)服務(wù)器端的Web Service程序的WSDL服務(wù)描述文檔的調(diào)用信息,把客戶端要調(diào)用的數(shù)據(jù)同步函數(shù)名和輸入?yún)?shù)等信息加入到一個SOAP請求消息中,當(dāng)向外發(fā)送時,該SOAP請求消息又被嵌入到一個Http post請求中,通過HTTP發(fā)往Web服務(wù)器,等待服務(wù)器端的處理和回應(yīng),如圖2所示。
圖2 基于Web Service的數(shù)據(jù)同步的模型
基于Web Service的數(shù)據(jù)庫數(shù)據(jù)同步系統(tǒng)方案能夠比較好地解決數(shù)據(jù)庫同步問題,但是由于局限于某些特定的技術(shù),對各種技術(shù)實(shí)現(xiàn)及其策略缺乏宏觀的比較、評價和優(yōu)化,影響了實(shí)際使用效果。
下面以公共數(shù)據(jù)庫從應(yīng)用系統(tǒng)數(shù)據(jù)庫中同步數(shù)據(jù)為例來說明浙江萬里學(xué)院的數(shù)據(jù)庫同步方案,為了實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確性同步,首先需要在應(yīng)用系統(tǒng)庫中建立一張中間表,該中間表是在數(shù)據(jù)同步過程中同步程序的操作表,公共數(shù)據(jù)庫需對中間表有一定的操作權(quán)限。
公共庫也會在其數(shù)據(jù)庫中建立相應(yīng)的中間表,其表結(jié)構(gòu)與應(yīng)用系統(tǒng)數(shù)據(jù)庫提供的中間表表結(jié)構(gòu)相同,并周期性地將應(yīng)用系統(tǒng)數(shù)據(jù)庫中間表的數(shù)據(jù)同步到該中間表中。通過數(shù)據(jù)清洗將數(shù)據(jù)及時地更新到公共數(shù)據(jù)庫中的目標(biāo)表中,進(jìn)而實(shí)現(xiàn)了應(yīng)用系統(tǒng)中的數(shù)據(jù)可持續(xù)地與公共庫保持同步,如圖3所示。
圖3 浙江萬里學(xué)院的數(shù)據(jù)同步的模型
該中間表的表結(jié)構(gòu)除了具有應(yīng)用庫數(shù)據(jù)表中需同步的字段(字段名、類型和長度必須相同)外,還須具有標(biāo)識字段。該字段是用來存儲每條記錄的增加、刪除與修改等操作方式信息。為了能準(zhǔn)確獲取應(yīng)用庫中變動的數(shù)據(jù)(需要同步的數(shù)據(jù)),可利用數(shù)據(jù)庫系統(tǒng)提供的觸發(fā)器機(jī)制,為需要同步的數(shù)據(jù)表建立INSERT、UPDATE和DELETE三類觸發(fā)器。每當(dāng)用戶增加、修改或刪除數(shù)據(jù)表中的數(shù)據(jù)時,將自動觸發(fā)對應(yīng)的觸發(fā)器,在觸發(fā)器中編寫代碼把變動的數(shù)據(jù)保存到中間表中,并把操作方式記錄到相應(yīng)的標(biāo)識字段中,以供公共庫讀取或操作。
根據(jù)如下的字段內(nèi)容來設(shè)計應(yīng)用系統(tǒng)的同步策略,任何一張?zhí)峁?shù)據(jù)變動信息的中間表都包含以下兩個字段,具體如表1所示。
中間表查詢應(yīng)用庫數(shù)據(jù)表變動情況,按照FLAG(變動狀態(tài))、TIME(變動時間)為數(shù)據(jù)變動標(biāo)準(zhǔn),進(jìn)行數(shù)據(jù)增量同步。
更新和同步策略如表2所示。
當(dāng)應(yīng)用數(shù)據(jù)庫提供的數(shù)據(jù)信息有變化時,根據(jù)表結(jié)構(gòu)把更新數(shù)據(jù)和對數(shù)據(jù)的操作都保存在相對應(yīng)中間表中,以供應(yīng)用系統(tǒng)的使用,中間表內(nèi)只需保持業(yè)務(wù)數(shù)據(jù)的最新狀態(tài),公共庫可根據(jù)表結(jié)構(gòu)及其數(shù)據(jù)自行決定采用何種策略來保持同步。
表1 舉例字段列表
表2 更新和同步策略表
針對目前各種數(shù)據(jù)庫同步技術(shù)和數(shù)據(jù)庫同步方案,浙江萬里學(xué)院信息化校園建設(shè)采用的數(shù)據(jù)庫同步方案,有效地解決了數(shù)據(jù)庫同步中存在的問題。文中對其中關(guān)鍵部分進(jìn)行研究和設(shè)計,下一步研究重點(diǎn)是數(shù)據(jù)庫同步具體設(shè)計的完善。
[1]姜浩,王強(qiáng).基于Web Service的數(shù)據(jù)庫同步技術(shù)的研究與應(yīng)用[J].計算機(jī)工程與應(yīng)用,2007,43(專刊):162.
[2]覃章榮,張軍洲,諸葛雋.基于Web Service的異構(gòu)數(shù)據(jù)庫同步系統(tǒng)設(shè)計與實(shí)現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2009,19(12):222.
[3]姚剛,鄧江沙.JMS在數(shù)據(jù)同步問題中的應(yīng)用[J].長沙電力學(xué)院學(xué)報,2006,21(2):70-71.