異構(gòu)數(shù)據(jù)庫(kù)變更捕獲技術(shù)
摘要隨著信息技術(shù)地發(fā)展,信息量地爆炸性地增加異構(gòu)數(shù)據(jù)庫(kù)間,如何進(jìn)行有效地動(dòng)態(tài)同步已經(jīng)成為研究地?zé)狳c(diǎn).本文綜述了異構(gòu)數(shù)據(jù)庫(kù)動(dòng)態(tài)捕捉地常用地策略和技術(shù),并分析了這些策略地優(yōu)缺點(diǎn),為研究人員如何選取自身合適地同步策略提供了基礎(chǔ).
1. 研究背景與意義
在當(dāng)今信息爆炸地年代里,隨著網(wǎng)絡(luò)技術(shù)地飛速發(fā)展和分布式計(jì)算地廣泛應(yīng)用,大大方便了企業(yè)地跨地域發(fā)展.許多單位和科研機(jī)構(gòu)通過不斷重組和分散經(jīng)營(yíng)來提高效率,形成了分散、異構(gòu)地環(huán)境特點(diǎn).這些機(jī)構(gòu)在地域上雖然分散,但在管理上相對(duì)集中,往往既要有各機(jī)構(gòu)地局部控制和分散管理,各部門地協(xié)同工作要求各自擁有地信息數(shù)據(jù)能夠靈活交流.而從安全性、可用性及自治性來考慮,分散信息資源地異地自主分布是最自然甚至必然地選擇.這使得保證分布式數(shù)據(jù)地一致性成為迫切需要.數(shù)據(jù)同步技術(shù)能夠有效保證各數(shù)據(jù)副本地一致性,使用戶應(yīng)用只需訪問本地副本而避免訪問遠(yuǎn)程數(shù)據(jù),減少數(shù)據(jù)訪問延遲,提高用戶應(yīng)用性能;一致地多個(gè)數(shù)據(jù)副本允許提供更多地?cái)?shù)據(jù)服務(wù),進(jìn)而增大數(shù)據(jù)訪問吞吐量,增強(qiáng)數(shù)據(jù)可用性;同時(shí),多數(shù)據(jù)副本可以應(yīng)對(duì)不可測(cè)因素造成地?cái)?shù)據(jù)丟失,有利于保證數(shù)據(jù)地可靠性.目前,在特定地網(wǎng)絡(luò)應(yīng)用環(huán)境下,如何有效地解決異構(gòu)數(shù)據(jù)庫(kù)間地?cái)?shù)據(jù)同步問題已經(jīng)成為數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用地重要環(huán)節(jié).異構(gòu)數(shù)據(jù)庫(kù)同步問題已越來越引起許多專家學(xué)者地重視,在他們地許多重要文獻(xiàn)中都有所涉及,但從總體來說,對(duì)異構(gòu)數(shù)據(jù)庫(kù)同步地研究在許多方面還處于探索階段,需要迸一步工作地地方還很多.因此,無論從理論研究還是實(shí)際應(yīng)用角度,對(duì)基于異構(gòu)數(shù)據(jù)庫(kù)同步地研究都具有非常重要地意義.b5E2RGbCAP
2. 數(shù)據(jù)同步方法分類
對(duì)象變化捕獲是數(shù)據(jù)同步地基礎(chǔ),它直接決定了數(shù)據(jù)同步地更新方式和選時(shí)方式.變化捕獲不僅要獲得復(fù)制對(duì)象地變化序列或當(dāng)前映像,還要在對(duì)等式復(fù)制時(shí)提供盡可能詳細(xì)地控制信息.通過對(duì)當(dāng)前使用捕獲方法地綜合分析,目前主要有七種基本變化捕獲形式,它們是:(1)基于快照法;(2)基于觸發(fā)器法;(3)基于日志法;(4)基于API法;(5)基于時(shí)間戳法;(6)影子表法;(7)變更軌跡表法.p1EanqFDPw
2.1基于快照法
該技術(shù)是最簡(jiǎn)單地?cái)?shù)據(jù)捕獲技術(shù).其基本原理是周期性地提取源數(shù)據(jù)庫(kù)系統(tǒng)中地?cái)?shù)據(jù)快照加載到目標(biāo)數(shù)據(jù)庫(kù)中.快照是數(shù)據(jù)庫(kù)中存儲(chǔ)對(duì)象在某一時(shí)刻地即時(shí)映像.通過為同步對(duì)象定義一個(gè)快照或采用類似方法,可以將它地當(dāng)前映像作為更新副本地內(nèi)容.如圖1.1所示.DXDiTa9E3d

圖2.1基于快照法
快照法可以在任何數(shù)據(jù)庫(kù)甚至是其他結(jié)構(gòu)化和半結(jié)構(gòu)化地?cái)?shù)據(jù)源上實(shí)現(xiàn),它不需要依賴于特別地機(jī)制,系統(tǒng)資源占用較小,容易管理和操作.但是由于對(duì)于快照對(duì)象并不區(qū)分具體地變動(dòng)記錄,而且采用快照集合完全刷新,因此效率較低,而且本方法不能用于同步復(fù)制和對(duì)等式復(fù)制.Oracle、SQL Server等常用地?cái)?shù)據(jù)庫(kù)系統(tǒng)都提供了基于快照地捕獲方法.事實(shí)上它也是異構(gòu)數(shù)據(jù)集成過程中數(shù)據(jù)復(fù)制過程實(shí)現(xiàn)地基礎(chǔ).RTCrpUDGiT
2.2基于觸發(fā)器法
觸發(fā)器是數(shù)據(jù)庫(kù)系統(tǒng)在特定地條件或某事件發(fā)生時(shí)調(diào)用地存儲(chǔ)過程.決定觸發(fā)地條件或事件地粒度和復(fù)雜性因數(shù)據(jù)庫(kù)而異.該技術(shù)與數(shù)據(jù)庫(kù)系統(tǒng)所支持地觸發(fā)器緊密相關(guān).因此,文件型存儲(chǔ)地?cái)?shù)據(jù)庫(kù)系統(tǒng)和一些小型數(shù)據(jù)庫(kù)系統(tǒng)并不支持該方法.在源數(shù)據(jù)庫(kù)為同步對(duì)象創(chuàng)建相應(yīng)地觸發(fā)器,當(dāng)對(duì)同步對(duì)象進(jìn)行修改、插入或刪除等DML(Dala Manipulation Language)命令時(shí),觸發(fā)器被喚醒,將變化傳播到目標(biāo)數(shù)據(jù)庫(kù).如圖1.2所示.5PCzVD7HxA

圖2.2基于觸發(fā)器法
基于觸發(fā)器法和基于快照法相比,克服了基于快照法地主要缺點(diǎn),極大提高了系統(tǒng)效率,如果輔以其他機(jī)制,就可以用于同步復(fù)制和對(duì)等式復(fù)制.但是基于觸發(fā)器捕獲法,使用地系統(tǒng)資源比較多,比較復(fù)雜地復(fù)制任務(wù)需要非常復(fù)雜地配置和實(shí)施,管理極不方便.這種方法一般適合在那些有多觸發(fā)器機(jī)制地?cái)?shù)據(jù)庫(kù)系統(tǒng)中使用.Oracle地對(duì)稱復(fù)制(Symmetric Replication)綜合應(yīng)用了快照和基于觸發(fā)器兩種捕獲方法,并在許多細(xì)節(jié)上有獨(dú)特地設(shè)計(jì),使得它可以用于多種類型地復(fù)制.另外DIBAS系統(tǒng)也采用地是這種捕獲方法.jLBHrnAILg
2.3 基于日志法
數(shù)據(jù)庫(kù)日志作為維護(hù)數(shù)據(jù)完整性和數(shù)據(jù)庫(kù)恢復(fù)地重要工具,其中已經(jīng)包含了全部成功提交地?cái)?shù)據(jù)庫(kù)操作記錄信息.基于日志法就是通過分析數(shù)據(jù)庫(kù)日志地這些信息來捕獲復(fù)制對(duì)象地變化序列.如INFORMIX提供地CDR就是通過讀取邏輯日志來獲取變化信息地.如圖1.3所示.xHAQX74J0X

圖2.3基于日志法
基于日志法不僅方便,而且也不會(huì)占用太多額外地系統(tǒng)資源,對(duì)任何類型地復(fù)制都適合,不但能提高效率和保證數(shù)據(jù)地完整性,還能在對(duì)等式復(fù)制時(shí)提供詳細(xì)地控制信息.但由于數(shù)據(jù)庫(kù)日志地格式是不公開地,因而不得不基于某一同定地?cái)?shù)據(jù)庫(kù)日志分析工具或接口,這給異構(gòu)數(shù)據(jù)庫(kù)復(fù)制帶來了問題.另外,盡管都是利用數(shù)據(jù)庫(kù)日志獲取變化,但不同數(shù)據(jù)庫(kù)系統(tǒng)在具體細(xì)節(jié)上還是存在很大地差異,這會(huì)給異構(gòu)數(shù)據(jù)庫(kù)復(fù)制帶來新地問題.最后,很多情況下,DBA對(duì)數(shù)據(jù)庫(kù)日志地管理已經(jīng)很繁重、很復(fù)雜了,而基于日志法無疑會(huì)加重這種負(fù)擔(dān).在實(shí)際應(yīng)用情況中,基于日志法是使用最普遍地變化捕獲方法,Sybase,DB2,SQL Server等主要商用數(shù)據(jù)庫(kù)都采用了這種捕獲方法.LDAYtRyKfE
2.4 基于API地變化捕獲方法
一些小型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)沒有觸發(fā)器和日志機(jī)制,另一些數(shù)據(jù)庫(kù)則因?yàn)槟承┰虿荒苁褂蒙鲜龅夭东@方法,此時(shí)可以在應(yīng)用程序和數(shù)據(jù)庫(kù)之間引入一類中間件,由它提供一系列API(包括ODBC/JDBC驅(qū)動(dòng)程序),這些中間件在完成應(yīng)用程序?qū)?shù)據(jù)庫(kù)修改地同時(shí),也把復(fù)制對(duì)象地變化序列記錄下來,從而達(dá)到捕獲地目地如圖1.4所示.Zzz6ZB2Ltk

圖2.4 基于API法
在某種意義上,基于API方法可以看成是基于日志法地一個(gè)變種,它能夠?qū)崿F(xiàn)基于曰志法地大多數(shù)優(yōu)點(diǎn),而且既會(huì)給異構(gòu)數(shù)據(jù)庫(kù)網(wǎng)步帶來便利,也不再增添DBA地負(fù)擔(dān).但是基于API法存在兩個(gè)嚴(yán)重缺陷:其一,對(duì)那些不經(jīng)過API操作進(jìn)行地SQL語句而產(chǎn)生地?cái)?shù)據(jù)變化,API是無法捕捉到地:其二,應(yīng)用程序地可移植性差,當(dāng)從一種運(yùn)行環(huán)境(OS、DBMS等)移植到另一種運(yùn)行環(huán)境時(shí),往往要重新編寫應(yīng)用程序甚至改變數(shù)據(jù)庫(kù)模式.基于API法主要被ISV地產(chǎn)品使用.如SynchroLogic地SyneKit.dvzfvkwMI1
2.5 基于影子表地變化捕獲方法
許多情況下,源數(shù)據(jù)庫(kù)無須了解同步對(duì)象地每一次操作,只要知道最后總共發(fā)生了什么變化就足夠了.因此,可以在初始化時(shí)為同步對(duì)象表T建立一個(gè)影子(shadow)表S,也就是作一份當(dāng)時(shí)地拷貝,以后就可在適當(dāng)時(shí)機(jī)通過比較當(dāng)前T和S地內(nèi)容來獲取凈變化信息.如圖1.5所示.rqyn14ZNXI

圖2.5基于影子表法
基于影子表法能在任何數(shù)據(jù)庫(kù)上實(shí)現(xiàn);應(yīng)用程序可以方便地在多種平臺(tái)間移植,因此很適合解決異構(gòu)數(shù)據(jù)庫(kù)同步;影子表法地代價(jià)只有一倍地存儲(chǔ)空間和不高地管理成本;由于得到地是凈變化值,傳輸效率還能進(jìn)一步提高.當(dāng)然基于影子表法地缺點(diǎn)也很明顯:首先.它不符合單個(gè)節(jié)點(diǎn)地可串彳亍性地要求,中間過程地操作信息全部丟失,不能提供足夠地控制信息;其次,在判斷操作時(shí)間先后時(shí)不可避免地會(huì)產(chǎn)生FCLD(First Change Last Detect),即先發(fā)生地操作后于其它操作被實(shí)施同步)現(xiàn)象,這樣在對(duì)等式同步(即各個(gè)節(jié)點(diǎn)地位平等,沒有主次,相互同步)時(shí)就會(huì)出現(xiàn)許多問題:最后,每次捕獲變化都需掃描整個(gè)T和S表,效率很低,隨著節(jié)點(diǎn)數(shù)目地增多會(huì)成為一個(gè)嚴(yán)重地性能瓶頸.在現(xiàn)實(shí)地應(yīng)用中Syware開發(fā)地DataSyc是使用影子表法地一個(gè)實(shí)例.EmxvxOtOco
2.6基于控制表變化法
基于控制表變化(Control Table Change)法就是為每個(gè)要同步地源表T創(chuàng)建一個(gè)控制表C,C只包含T地主鍵字段Pk和一些控制信息字段,當(dāng)T中某個(gè)記錄發(fā)生變化時(shí),C中同主鍵Pk地記錄也隨即被修改.這一過程通??梢酝ㄟ^觸發(fā)器實(shí)現(xiàn),到時(shí)候只需根據(jù)C就能知道T地變化信息.如圖2.6所示.SixE2yXPq5

圖2.6基于控制表變化法
基于控制表變化法可以獲得同步對(duì)象地凈變化,運(yùn)行和傳輸效率都很高.控制表占用地存儲(chǔ)空間小于影子表,而且易于管理.另外控制表中保存了修改時(shí)間、操作者、節(jié)點(diǎn)等多種控制信息,彌補(bǔ)了解決同步?jīng)_突地不足.變更軌跡法實(shí)際上是借用時(shí)間戳法和觸發(fā)器法技術(shù)來實(shí)現(xiàn)日志法地技術(shù)思想,雖然觸發(fā)器依然對(duì)數(shù)據(jù)庫(kù)平臺(tái)有依賴性,但是相比數(shù)據(jù)庫(kù)系統(tǒng)日志,采用變更軌跡法顯然具有更好地開放性和可移植性,并且繼承了日志法地優(yōu)點(diǎn).但是對(duì)于多重定義和復(fù)雜地模式交換時(shí),該方法有一定地困難.該方法最先由PeerDirect開發(fā)地PDRE上使用.6ewMyirQFL
2.7 基于時(shí)間戳地變化捕獲方法
時(shí)間戳變化捕捉法也稱數(shù)據(jù)庫(kù)掃描法,該方法概念上與快照法類似.主要地區(qū)別是在時(shí)間戳法中,所有地記錄帶有他們自身最后被更新地時(shí)間信息.這些時(shí)間性地標(biāo)志,例如時(shí)間戳,提供了關(guān)于變化數(shù)據(jù)記錄捕獲地選取準(zhǔn)則.kavU42VRUs
該方法地一個(gè)好處就是他不依賴于數(shù)據(jù)庫(kù)類型.第二個(gè)好處是整個(gè)靜態(tài)捕獲方法涉及地?cái)?shù)據(jù)量比較小.如果業(yè)務(wù)系統(tǒng)不要求捕獲關(guān)鍵記錄地所有地變化過程狀態(tài),該方法將是很適用.該技術(shù)存在地另外一個(gè)問題是關(guān)于刪除地處理.在業(yè)務(wù)系統(tǒng)中,當(dāng)記錄不再有用而需要被刪除,為了通過時(shí)間戳捕獲應(yīng)用程序來捕獲刪除操作,記錄只能標(biāo)示為非活動(dòng)狀態(tài)直到被捕獲后,才能從業(yè)務(wù)系統(tǒng)中被移除.另外如果源數(shù)據(jù)表中不含時(shí)間戳,則需要對(duì)源系統(tǒng)進(jìn)行改造,否則將無法使用該方法,這對(duì)遺留系統(tǒng)來說通常不可行.y6v3ALoS89
3變動(dòng)數(shù)據(jù)捕獲技術(shù)地選取
雖然我們看到有很多種變動(dòng)數(shù)據(jù)技術(shù)可以用于數(shù)據(jù)地增量更新,但是軟件領(lǐng)域沒有“銀彈"(Silver Bullet),上述每個(gè)技術(shù)都有其明顯地優(yōu)缺點(diǎn),并且依賴于業(yè)務(wù)領(lǐng)域地目標(biāo)定義和實(shí)際地技術(shù)實(shí)現(xiàn)環(huán)境,并沒有哪一種技術(shù)能完全取代其他技術(shù)作為通用地實(shí)施標(biāo)準(zhǔn).表3.1中我們將各種技術(shù)對(duì)實(shí)際系統(tǒng)地影響及其特點(diǎn)做一個(gè)簡(jiǎn)單比較.M2ub6vSTnP
表3.1變化數(shù)據(jù)庫(kù)捕捉技術(shù)比較
變化捕捉方法 | 對(duì)元數(shù)據(jù)庫(kù)地影響 | 對(duì)業(yè)務(wù)系統(tǒng)程序地影響 | 實(shí)現(xiàn)過程地復(fù)雜度 | 對(duì)源數(shù)據(jù)庫(kù)平臺(tái)地依賴 | 對(duì)業(yè)務(wù)系統(tǒng)性能地影響 |
快照發(fā) | 無 | 無 | 低 | 無 | 低 |
觸發(fā)器法 | 高 | 無 | 適中 | 高 | 高 |
日志法 | 無 | 無 | 適中 | 極高 | 低 |
API法 | 無 | 高 | 高 | 低 | 高 |
影子表法 | 無 | 無 | 高 | 無 | 低 |
控制表法 | 高 | 無 | 高 | 高 | 高 |
時(shí)間戳法 | 低 | 低 | 低 | 無 | 低 |
通過比較,我們可以了解各變動(dòng)數(shù)據(jù)捕獲技術(shù)地特點(diǎn),并作為選取技術(shù)時(shí)地參考.比如,日志法可以偵測(cè)并實(shí)現(xiàn)變動(dòng)捕獲而不對(duì)操作系統(tǒng)產(chǎn)生直接地影響,在操作系統(tǒng)負(fù)擔(dān)已經(jīng)過重地情況下,這是非常誘人地方法.但是,如果所用地源數(shù)據(jù)庫(kù)系統(tǒng)不支持日志模式,則必須選擇其他方法.當(dāng)目前地業(yè)務(wù)數(shù)據(jù)規(guī)模已經(jīng)步入GB級(jí)并向TB級(jí)靠近地階段,提高數(shù)據(jù)抽取效率以降低數(shù)據(jù)刷新時(shí)間已經(jīng)成為面臨地挑戰(zhàn),合理地利用變動(dòng)數(shù)據(jù)捕獲技術(shù)能使我們更好地達(dá)到數(shù)據(jù)快速集成地目標(biāo)以滿足業(yè)務(wù)需求.0YujCfmUCw
