摘 要: 針對(duì)多源異構(gòu)環(huán)境下數(shù)據(jù)的特點(diǎn),提出一種數(shù)據(jù)同步復(fù)制新方案。該方案解決了多源異構(gòu)環(huán)境下數(shù)據(jù)庫的訪問,數(shù)據(jù)的獲取與復(fù)制,動(dòng)態(tài)數(shù)據(jù)源的處理以及同步過程中數(shù)據(jù)沖突與同步的實(shí)時(shí)性等問題。最后將所提出的方案應(yīng)用于某省高速公路車輛監(jiān)控系統(tǒng)中,達(dá)到了實(shí)際應(yīng)用要求,表明了該方案的正確性與有效性。
關(guān)鍵詞: 多源異構(gòu);數(shù)據(jù)同步復(fù)制;動(dòng)態(tài)數(shù)據(jù)源;數(shù)據(jù)沖突
0 引言
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,各種不同數(shù)據(jù)結(jié)構(gòu)類型的數(shù)據(jù)庫深入到不同的應(yīng)用領(lǐng)域,尤其是那些地域上分散而管理上又相對(duì)集中的跨地域集團(tuán)公司或者企業(yè)單位[1]。雖然使用數(shù)據(jù)同步技術(shù)可以提高數(shù)據(jù)信息的集中管理,提高整個(gè)分布式數(shù)據(jù)庫系統(tǒng)的響應(yīng)速度和可靠性[2],但是由于數(shù)據(jù)的異構(gòu)性和多樣性,數(shù)據(jù)同步復(fù)制仍存在許多問題。本文針對(duì)數(shù)據(jù)同步復(fù)制中出現(xiàn)的問題,提出了一種多源異構(gòu)數(shù)據(jù)同步復(fù)制的方法,該方法可以解決不同類型數(shù)據(jù)庫之間的訪問、數(shù)據(jù)的實(shí)時(shí)獲取與復(fù)制、同步過程中數(shù)據(jù)沖突以及實(shí)際應(yīng)用中數(shù)據(jù)源動(dòng)態(tài)產(chǎn)生的處理、系統(tǒng)中斷數(shù)據(jù)丟失等問題。
1 多源異構(gòu)數(shù)據(jù)同步復(fù)制技術(shù)
1.1 傳統(tǒng)的數(shù)據(jù)同步復(fù)制技術(shù)
傳統(tǒng)的分布式數(shù)據(jù)同步復(fù)制就是由數(shù)據(jù)庫自身同構(gòu)復(fù)制技術(shù)實(shí)現(xiàn)的,當(dāng)源表發(fā)生變化時(shí),由數(shù)據(jù)庫引擎引發(fā)同步事件,把源表中變化的數(shù)據(jù)同步更新到目標(biāo)數(shù)據(jù)庫中,但是這種復(fù)制技術(shù)只能在同構(gòu)數(shù)據(jù)庫之間使用[2]。
目前各數(shù)據(jù)庫開發(fā)商在各自的數(shù)據(jù)庫同構(gòu)復(fù)制的基礎(chǔ)上提出了異構(gòu)數(shù)據(jù)庫的復(fù)制方案,例如Microsoft SQL Server提出了出版者/預(yù)訂者同步方案[3-6],Oracle中采用多主復(fù)制和物化視圖的方案來實(shí)現(xiàn)數(shù)據(jù)同步的功能[4-6],DB使用CCD表來實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫之間的復(fù)制。雖然各廠商研發(fā)出輔助工具更好地完善了數(shù)據(jù)同步復(fù)制的功能,但是復(fù)制方案仍依賴于自己的數(shù)據(jù)庫管理系統(tǒng)(Database Management System,DBMS)核心技術(shù),不能保證完全與DBMS無關(guān)。
1.2 多源異構(gòu)數(shù)據(jù)的同步復(fù)制
通常情況下,多源異構(gòu)數(shù)據(jù)所在的分布式網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。圖中下級(jí)數(shù)據(jù)庫存在多個(gè)且分布在不同的物理位置上,它們的表結(jié)構(gòu)甚至采用的系統(tǒng)也不一樣。
與傳統(tǒng)數(shù)據(jù)同步相比,多源異構(gòu)數(shù)據(jù)的同步復(fù)制存在如下幾個(gè)難點(diǎn):(1)多個(gè)下級(jí)服務(wù)器的數(shù)據(jù)庫會(huì)因?yàn)槭褂酶鞣N不同的數(shù)據(jù)模型來表示和存儲(chǔ)數(shù)據(jù),導(dǎo)致數(shù)據(jù)格式的混亂,訪問接口獨(dú)立。(2)需同步復(fù)制的下級(jí)數(shù)據(jù)源是動(dòng)態(tài)的,比如下級(jí)數(shù)據(jù)庫中某些表是按日或月動(dòng)態(tài)生成的。(3)某些情況下,不能對(duì)下級(jí)數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行任何改變。當(dāng)表是動(dòng)態(tài)生成時(shí),無法修改表結(jié)構(gòu)因此不能利用數(shù)據(jù)庫本身的復(fù)制功能。(4)同步過程中能對(duì)重復(fù)的數(shù)據(jù)進(jìn)行過濾并進(jìn)行沖突處理。
2 多源異構(gòu)數(shù)據(jù)同步復(fù)制方案
從多源異構(gòu)環(huán)境下的數(shù)據(jù)同步特點(diǎn)可以看出,數(shù)據(jù)同步復(fù)制要解決的問題包括:(1)異構(gòu)數(shù)據(jù)庫的訪問;(2)數(shù)據(jù)的獲取與復(fù)制;(3)動(dòng)態(tài)數(shù)據(jù)源的處理;(4)數(shù)據(jù)沖突與同步實(shí)時(shí)性。
2.1 異構(gòu)數(shù)據(jù)庫的訪問
當(dāng)前主流的數(shù)據(jù)庫類型有SQL Server、Oracle、Mysql、DB2D等。針對(duì)不同類型的數(shù)據(jù)庫,本文采用ADO技術(shù)訪問數(shù)據(jù)庫,其連接數(shù)據(jù)庫的形式為:“Provider=SQLOLEDB.1/SQLNCLI10.1;Data Source=%s;Presist Security Info=False;User ID=%s;Password=%s;Initial Catalog=%s”,其中:Provider針對(duì)數(shù)據(jù)源不同,可選擇SQLOLEDB.1和SQLNCLI10.1兩種驅(qū)動(dòng)方式。
2.2 數(shù)據(jù)的獲取與復(fù)制
數(shù)據(jù)的獲取與復(fù)制指從下級(jí)源數(shù)據(jù)庫中讀取數(shù)據(jù),然后將所讀取的數(shù)據(jù)復(fù)制到上級(jí)數(shù)據(jù)庫中并標(biāo)記同步完成的過程。根據(jù)下級(jí)數(shù)據(jù)源中表結(jié)構(gòu)有可修改與不可修改兩種情況,分別設(shè)計(jì)方案:
(1)表結(jié)構(gòu)可修改時(shí),在下級(jí)數(shù)據(jù)庫的表中增加新字段int sendok,并設(shè)置字段的默認(rèn)值為0。每同步成功一條數(shù)據(jù),將sendok字段的值設(shè)置為1,若沒有同步成功,仍設(shè)置為0,其流程圖如圖2所示。
(2)表結(jié)構(gòu)不允許修改時(shí),在上級(jí)數(shù)據(jù)庫中新建輔助表來記錄下級(jí)數(shù)據(jù)庫的同步操作過程。設(shè)置同步跟蹤記錄的表名為Track,表中字段定義如表1所示。
在同步過程中,下級(jí)數(shù)據(jù)庫中的數(shù)據(jù)是不斷更新的,需要設(shè)置定時(shí)同步復(fù)制機(jī)制來完成同步。首先需要獲取當(dāng)前的系統(tǒng)時(shí)間和最近一次上傳的結(jié)束時(shí)間,若當(dāng)前系統(tǒng)時(shí)間小于上次上傳的結(jié)束時(shí)間,則放棄本次更新,等待下次更新。若當(dāng)前系統(tǒng)時(shí)間大于上次結(jié)束時(shí)間,則進(jìn)行該時(shí)間段內(nèi)新數(shù)據(jù)的同步操作。同步后,判斷此次操作是否成功,成功置1,否則置0,并在追蹤表中記錄操作,流程圖如圖3所示。
2.3 動(dòng)態(tài)數(shù)據(jù)源的處理
在下級(jí)數(shù)據(jù)庫中,由于不同數(shù)據(jù)庫中表的創(chuàng)建方式不同,有些下級(jí)是按日或按月來動(dòng)態(tài)生成新表,會(huì)增加上級(jí)對(duì)下級(jí)數(shù)據(jù)源的查找難度,此時(shí)需根據(jù)表形成的規(guī)律來查找。例如有些數(shù)據(jù)源中表是以固定字符加年月日作為表名,需獲取表的名稱,再根據(jù)表形成的規(guī)律自動(dòng)拼裝來獲取日期信息。同步復(fù)制前,系統(tǒng)需要檢測(cè)是否有新表,若存在新表則進(jìn)行數(shù)據(jù)同步的操作,不存在則退出。
2.4 數(shù)據(jù)沖突與同步實(shí)時(shí)性
與傳統(tǒng)數(shù)據(jù)同步復(fù)制不同,多源異構(gòu)下的數(shù)據(jù)沖突主要是由于網(wǎng)絡(luò)異常造成的重復(fù)同步,以及為了保證數(shù)據(jù)一致性而不斷檢查與復(fù)制下級(jí)數(shù)據(jù)源等造成的。因此在設(shè)計(jì)上級(jí)數(shù)據(jù)庫中表的屬性時(shí),設(shè)定表的主鍵,對(duì)每條數(shù)據(jù)同步時(shí)先檢查相同主鍵的記錄是否存在,如果存在則返回。
同步的實(shí)時(shí)性取決于數(shù)據(jù)上傳的時(shí)間間隔,時(shí)間間隔越短,實(shí)時(shí)性越好,但計(jì)算機(jī)與網(wǎng)絡(luò)負(fù)荷越大;反之,實(shí)時(shí)性差,計(jì)算機(jī)與網(wǎng)絡(luò)負(fù)荷就小。為了解決這個(gè)矛盾,可采用動(dòng)態(tài)緩存機(jī)制提高同步的實(shí)時(shí)性,即將已同步數(shù)據(jù)的主鍵及關(guān)鍵字段信息,動(dòng)態(tài)地保存在內(nèi)存緩存中,從而有效地減少了計(jì)算機(jī)與網(wǎng)絡(luò)的負(fù)擔(dān)。
3 多源異構(gòu)下數(shù)據(jù)同步復(fù)制技術(shù)的應(yīng)用
為了驗(yàn)證所提出方案的正確性和有效性,結(jié)合某省高速公路車輛監(jiān)控系統(tǒng)的數(shù)據(jù)同步任務(wù)進(jìn)行實(shí)際應(yīng)用研究。
在高速公路網(wǎng)絡(luò)系統(tǒng)中,收費(fèi)站出入口以及眾多斷面節(jié)點(diǎn)基本實(shí)現(xiàn)了全線無盲點(diǎn)監(jiān)控,各個(gè)地點(diǎn)的子系統(tǒng)均記錄了所經(jīng)車輛的車牌、時(shí)間、車型等流水信息。為了實(shí)現(xiàn)對(duì)車輛在整個(gè)交通網(wǎng)絡(luò)中運(yùn)行情況的監(jiān)控,首要的任務(wù)就是將這些分散于各子系統(tǒng)的車輛流水?dāng)?shù)據(jù)實(shí)時(shí)同步復(fù)制到一個(gè)中心數(shù)據(jù)庫中。
3.1 軟件的設(shè)計(jì)
通過分析,高速公路系統(tǒng)數(shù)據(jù)源可歸納為三類:收費(fèi)站、主線卡口和服務(wù)區(qū),其特點(diǎn)如下:(1)存在的數(shù)據(jù)庫管理系統(tǒng)有SQL Server 2000、SQL Server 2008、Oracle 9i;(2)數(shù)據(jù)存放的方式多樣,包括單一表、按月生成表、按日生成表等;(3)有些表結(jié)構(gòu)可修改,有些表結(jié)構(gòu)不能修改,比如按月生成表的情況,因此無法獲得生成表的源代碼。
為了實(shí)現(xiàn)對(duì)以上情況的靈活處理,軟件以XML格式的方式配置數(shù)據(jù)源的情況,同時(shí)利用多線程技術(shù)實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)源的同時(shí)處理,整個(gè)軟件的總體結(jié)構(gòu)如圖4所示。
3.2 系統(tǒng)實(shí)現(xiàn)
高速公路車輛數(shù)據(jù)采集系統(tǒng)提供對(duì)全線各子系統(tǒng)中的車輛流水?dāng)?shù)據(jù)的實(shí)時(shí)收集功能,即實(shí)現(xiàn)對(duì)各個(gè)分散數(shù)據(jù)源的異構(gòu)數(shù)據(jù)的同步復(fù)制。該軟件系統(tǒng)以Visual C++語言進(jìn)行開發(fā),利用本文提出的多源異構(gòu)下數(shù)據(jù)同步復(fù)制方案,并結(jié)合多線程技術(shù)提升軟件的運(yùn)行效率。整個(gè)系統(tǒng)的運(yùn)行界面如圖5所示。
從圖5可以看出,該系統(tǒng)可同時(shí)將多個(gè)下級(jí)數(shù)據(jù)源的數(shù)據(jù)同步復(fù)制到一個(gè)上級(jí)數(shù)據(jù)庫服務(wù)器中,實(shí)現(xiàn)對(duì)車輛流水?dāng)?shù)據(jù)的集中整合。該系統(tǒng)經(jīng)實(shí)際測(cè)試,已實(shí)現(xiàn)了23 h不間斷運(yùn)行,數(shù)據(jù)同步復(fù)制未發(fā)現(xiàn)多出一條記錄或者少一條記錄,數(shù)據(jù)正確率100%,在系統(tǒng)可靠性與數(shù)據(jù)完整性方面均達(dá)到了數(shù)據(jù)同步復(fù)制的要求。
4 結(jié)論
本文針對(duì)多源異構(gòu)數(shù)據(jù)同步的實(shí)時(shí)性、可靠性、通用性的需求進(jìn)行了研究,提出了一種數(shù)據(jù)同步復(fù)制方案,解決了異構(gòu)環(huán)境下數(shù)據(jù)庫之間數(shù)據(jù)共享的問題,并結(jié)合高速公路監(jiān)控系統(tǒng)的實(shí)際項(xiàng)目進(jìn)行了測(cè)試,驗(yàn)證了該方案具有可實(shí)用性并取得了預(yù)期的效果。
參考文獻(xiàn)
[1] 胡金龍,許衛(wèi),房福龍.異構(gòu)數(shù)據(jù)庫同步復(fù)制技術(shù)研究與實(shí)現(xiàn)[J].長江科學(xué)院院報(bào),2011,6(28):71-75.
[2] 王婉菲,張志浩.分布式數(shù)據(jù)庫系統(tǒng)的復(fù)制機(jī)制及應(yīng)用[J].計(jì)算機(jī)工程與科學(xué),2003,25(1):88-91.
[3] 楊鵬.異構(gòu)數(shù)據(jù)庫同步中間件技術(shù)的研究與實(shí)現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2007.
[4] 趙中華.基于XML的異地異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)同步技術(shù)的研究[D].濟(jì)南:山東輕工業(yè)學(xué)院,2009.
[5] 譚德才.基于郵件系統(tǒng)的遠(yuǎn)程異構(gòu)數(shù)據(jù)庫同步的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.
[6] 姜亦學(xué).分布式數(shù)據(jù)庫系統(tǒng)同步技術(shù)研究[D].長春:長春理工大學(xué),2008.