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