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