摘 要:在傳統(tǒng)數(shù)據(jù)庫(kù)同步技術(shù)基礎(chǔ)上,針對(duì)數(shù)據(jù)集成系統(tǒng)的異構(gòu)性,研究了一種新的基于事務(wù)日志的數(shù)據(jù)同步模型。通過(guò)對(duì)異構(gòu)DBMS的事務(wù)日志進(jìn)行分析,提出一種通用的事務(wù)日志的變化捕獲方法,結(jié)合數(shù)據(jù)庫(kù)的事務(wù)工作過(guò)程,在窗口機(jī)制的約束下將提取的增量數(shù)據(jù)按照統(tǒng)一的規(guī)范集成到共享數(shù)據(jù)庫(kù)形成全局模式,再將增量數(shù)據(jù)加載到共享端實(shí)現(xiàn)數(shù)據(jù)過(guò)濾和映射。實(shí)驗(yàn)結(jié)果表明,在正確設(shè)置具體應(yīng)用環(huán)境下的時(shí)間窗口時(shí),該模型可有效降低數(shù)據(jù)同步的時(shí)間開(kāi)銷(xiāo),保證了數(shù)據(jù)一致性。
關(guān)鍵詞:異構(gòu)性;事務(wù)日志;數(shù)據(jù)變化捕獲;數(shù)據(jù)同步
引言
為了屏蔽異構(gòu)的應(yīng)用系統(tǒng)在集成共享數(shù)據(jù)庫(kù)時(shí)造成的“信息孤島”局面,需要將異構(gòu)的數(shù)據(jù)副本(replica)集成到統(tǒng)一數(shù)據(jù)平臺(tái),按照預(yù)處理規(guī)則完成數(shù)據(jù)變化捕獲、數(shù)據(jù)分發(fā)、數(shù)據(jù)轉(zhuǎn)儲(chǔ)與加載,以及沖突數(shù)據(jù)的檢測(cè)和解決,以向用戶(hù)提供統(tǒng)一的數(shù)據(jù)全局模式[1-2],實(shí)現(xiàn)數(shù)據(jù)的同步更新。
數(shù)據(jù)的同步更新方法中:文件傳輸方法[3]的缺點(diǎn)是效率和可靠性較差。數(shù)據(jù)復(fù)制方法[4]將主節(jié)點(diǎn)的數(shù)據(jù)更新副本拷貝到從節(jié)點(diǎn)并修改從節(jié)點(diǎn)上的副本,主要應(yīng)用在具有高自治性的分布式數(shù)據(jù)庫(kù)系統(tǒng)中。數(shù)據(jù)變化捕獲[5](Change Data Capture,CDC)方法利用觸發(fā)器、時(shí)間戳機(jī)制,將數(shù)據(jù)更新記錄到CDC初始化時(shí)創(chuàng)建的表或者隊(duì)列進(jìn)行發(fā)布。CDC方法在近幾年的數(shù)據(jù)同步領(lǐng)域獲得了關(guān)注,通過(guò)它不僅能獲得待同步副本對(duì)象的變化序列或當(dāng)前映像,還能提供詳細(xì)的控制信息[6]。而CDC方式主要有下面幾種,其主要性能參數(shù)如表1所示[7-8]。
然而,上述所有CDC方法都不能完全實(shí)現(xiàn)實(shí)時(shí)、雙向和增量同步,文獻(xiàn)[9]基于數(shù)據(jù)庫(kù)日志的CDC方法可以實(shí)現(xiàn)對(duì)不同的日志類(lèi)型進(jìn)行分析,并利用應(yīng)用程序接口讀取日志文件,分析了針對(duì)不同類(lèi)型日志文件的可靠性讀取規(guī)則和方法,但是對(duì)數(shù)據(jù)變化捕獲算法缺乏深入的研究,而且缺少統(tǒng)一描述。文獻(xiàn)[10]的RTDWH是數(shù)據(jù)倉(cāng)庫(kù)中的CDC方法,雖然可以保證數(shù)據(jù)更新的成功率,但是對(duì)事務(wù)處理性能耗損較大。
因此,文章提出一種異構(gòu)環(huán)境下的基于事務(wù)日志的數(shù)據(jù)同步模型(Transaction Log-based Data Synchronous Model,TLDS),從事務(wù)角度闡述了主要模塊的工作流程和原理。此外通過(guò)對(duì)事務(wù)日志的結(jié)構(gòu)進(jìn)行深入分析,設(shè)計(jì)了基于事務(wù)日志的變化捕獲算法。最后進(jìn)行了實(shí)驗(yàn)并對(duì)結(jié)果進(jìn)行分析,保證了數(shù)據(jù)更新效果的同時(shí)對(duì)系統(tǒng)的性能影響也有所降低。
1 TLDS模型
TLDS模型要達(dá)到如下功能:各業(yè)務(wù)子系統(tǒng)維護(hù)的共享數(shù)據(jù)能實(shí)時(shí)同步到共享數(shù)據(jù)庫(kù)中;對(duì)于已經(jīng)進(jìn)入統(tǒng)一數(shù)據(jù)共享與交換平臺(tái)的數(shù)據(jù),可以提供自動(dòng)實(shí)時(shí)同步或者按需手動(dòng)同步。按照該功能需求,結(jié)合數(shù)據(jù)交互工具OGG的工作原理,設(shè)計(jì)如圖1的TLDS模型。
1.1 事務(wù)日志
事務(wù)日志記錄一系列事務(wù)對(duì)數(shù)據(jù)庫(kù)更新的日志序列,是維護(hù)數(shù)據(jù)完整性和一致性的重要依據(jù),包括所有數(shù)據(jù)操作語(yǔ)言(DML)和數(shù)據(jù)定義語(yǔ)言(DDL)的記錄。它以事務(wù)為單位持續(xù)寫(xiě)入,記錄了在每個(gè)事務(wù)期間,對(duì)數(shù)據(jù)的更改及撤消更改所需的控制信息,包括事務(wù)開(kāi)始(表示為
1.2 數(shù)據(jù)變化捕獲、傳輸、轉(zhuǎn)換與加載
(1)數(shù)據(jù)變化引起新事務(wù)產(chǎn)生,該新事務(wù)由LGWR寫(xiě)入日志后,標(biāo)識(shí)該日志記錄的LSN和該事務(wù)的TID會(huì)相繼自增。日志的提取操作從初始時(shí)刻的head file開(kāi)始,如果用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行如下的事務(wù)操作:
TX={
直至polltime1設(shè)置的時(shí)間段結(jié)束,停止事務(wù)日志對(duì)數(shù)據(jù)的繼續(xù)讀取,記錄這個(gè)事務(wù)日志的LSN號(hào)作為捕獲檢查點(diǎn)(capture checkpoint)。由于事務(wù)TX1和TX4最終只有
(2)數(shù)據(jù)序列在等到trail傳送隊(duì)列的緩存被寫(xiě)滿(mǎn)或者到達(dá)指定的時(shí)間,即達(dá)到2.3節(jié)設(shè)置的窗口邊界值的條件之后,停止數(shù)據(jù)傳送,并記錄還未寫(xiě)入trail傳送隊(duì)列的事務(wù)日志的LSN號(hào)作為傳輸檢查點(diǎn)(pump checkpoint)。已提交的TX事務(wù)操作段內(nèi)已經(jīng)提交的事務(wù)序列有TX2和TX3,如圖2所示,pump checkpoint寫(xiě)在
(3)對(duì)已傳送的事務(wù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換與加載,trail傳送隊(duì)列以元
組的形式記錄數(shù)據(jù)更新信息,將他們被發(fā)送到目的端后,對(duì)更新信息的主鍵值以及更新的前、后像值經(jīng)過(guò)本地解析還原并創(chuàng)建出對(duì)應(yīng)的SQL更新語(yǔ)句。利用數(shù)據(jù)庫(kù)的本地接口將這些SQL語(yǔ)句應(yīng)用到目標(biāo)端,實(shí)現(xiàn)目標(biāo)DB的同步執(zhí)行。更新信息成功提交到數(shù)據(jù)庫(kù)后,也要記錄下這個(gè)事務(wù)日志的LSN號(hào)作為保留檢查點(diǎn)(replicat checkpoint)保存已經(jīng)完成本地應(yīng)用的位置,保持?jǐn)?shù)據(jù)的完整性。
1.3 窗口機(jī)制
文章引入窗口機(jī)制,對(duì)事務(wù)日志定義了事務(wù)窗口、用戶(hù)需求窗口、時(shí)間周期大小窗口和緩沖區(qū)窗口等以避免數(shù)據(jù)處理不協(xié)調(diào),而以時(shí)間周期窗口和緩沖區(qū)窗口較為常見(jiàn)。事務(wù)日志的關(guān)系如下:
(1)IF Ta.beginLSN (2)IF Tb.commitLSN 在以上條件下定義窗口的交替或者遷移。窗口的交替或者遷移可以由任何事件觸發(fā),觸發(fā)后產(chǎn)生事務(wù)集T={ti|Li∈tj,i∈LSN,j∈TId},即只要滿(mǎn)足: 兩個(gè)條件就能判定Ta,Tb∈Wk,即事務(wù)a和b都是屬于該窗口內(nèi)的,并且Wk.l和Wk.r分別表示其左右邊界,其中的a,b,k均為自然數(shù)。 2 實(shí)驗(yàn)結(jié)果及分析 實(shí)驗(yàn)環(huán)境:分別使用WIN環(huán)境下的SQL server 2000和Oracle 11gR2,通過(guò)Exp/Imp保持SourceD, TargetDB相關(guān)Schema中的初始數(shù)據(jù)一致;安裝OGG,對(duì)源數(shù)據(jù)庫(kù)的歸檔模式、最小附加日志模式和強(qiáng)制日志等參數(shù)進(jìn)行設(shè)置;分別建立ggate測(cè)試用戶(hù),添加manager管理服務(wù);分別開(kāi)啟復(fù)制隊(duì)列和同步隊(duì)列并添加檢查點(diǎn)表;開(kāi)啟同步任務(wù)。實(shí)驗(yàn)結(jié)果如表2所示。 結(jié)果及分析:根據(jù)上述結(jié)果,會(huì)發(fā)現(xiàn)日志文件規(guī)模影響到數(shù)據(jù)同步時(shí)間和同步發(fā)生頻率。日志文件規(guī)模較小時(shí),同步發(fā)生頻率可以稍微偏高,日志分析工具的運(yùn)行會(huì)影響數(shù)據(jù)庫(kù)效率,這種發(fā)生頻率主要應(yīng)用在對(duì)實(shí)時(shí)性要求相對(duì)高的場(chǎng)合;但是日志文件規(guī)模設(shè)置較大時(shí),又會(huì)出現(xiàn)數(shù)據(jù)同步時(shí)間過(guò)長(zhǎng)(必須在晚上等非工作時(shí)間運(yùn)行),主要應(yīng)用到對(duì)數(shù)據(jù)實(shí)時(shí)性要求不高的場(chǎng)合。 3 前景展望 文章通過(guò)事務(wù)日志的分析,研究了一種TLDS模型,在忽略異構(gòu)數(shù)據(jù)庫(kù)的DBMS、數(shù)據(jù)模式、數(shù)據(jù)類(lèi)型的基礎(chǔ)上,實(shí)現(xiàn)已有的業(yè)務(wù)系統(tǒng)和共享數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步,使數(shù)據(jù)在本地更改的同時(shí)傳送到其他業(yè)務(wù)節(jié)點(diǎn)上,并對(duì)該節(jié)點(diǎn)上的數(shù)據(jù)副本進(jìn)行修改。下一步的工作是針對(duì)異構(gòu)數(shù)據(jù)源日志的可靠性讀取及相關(guān)的應(yīng)用問(wèn)題進(jìn)行更加深入的研究。 參考文獻(xiàn) [1]Pucciani G,Domenici A,Donno F,et al.A performance study on the synchronisation of heterogeneous Grid databases using CONStanza[J].Future Generation Computer Systems,2010,26(6):820-834. [2]Gustafsson T,Hansson J.Dynamic on-demand updating of data in real-time database systems[C].SAC '04 Proceedings of the 2004 ACM symposium on Applied computing. New York:ACM,2004. [3]張虎,董小社,伍衛(wèi)國(guó),等.一種基于日志合并優(yōu)化的數(shù)據(jù)同步機(jī)制[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(12):2183-2188. [4]Saito Y,Shapiro M.Optimistic Replication[J].ACM Computing Surve ys (CSUR),2005,37(1):42-81. [5]Dan Snoddy,James Spyker,Mir Rupik,et al.Change Data Capture: what is it and how it impacts solution architecture[C].CASCON '09 Proceedings of the 2009 Conference of the Center for Advanced Studies on Collaborative Research.Riverton,New Jersey:IBM Corporat ion,2009. [6]許力,馬瑞新.基于快照比對(duì)的增量數(shù)據(jù)捕獲研究與實(shí)現(xiàn)[C].第三屆全國(guó)信息檢索與內(nèi)容安全學(xué)術(shù)會(huì)議,蘇州,2007. [7]劉勝,楊岳湘,鄧勁生,等.基于關(guān)鍵屬性比對(duì)的增量數(shù)據(jù)抽取方法[J].計(jì)算機(jī)工程與應(yīng)用,2012,48(4):115-117. [8]張春玲,呂震宇,劉遵峰.基于虛擬日志壓縮的數(shù)據(jù)同步方案[J].計(jì)算機(jī)工程,2010,36(18):67-69. [9]鄒先霞,賈維嘉,潘久輝.基于數(shù)據(jù)庫(kù)日志的變化數(shù)據(jù)捕獲研究[J].小型微型計(jì)算機(jī)系統(tǒng),2012,33(3):532-536. [10]Shi Jin-gang, Bao Yu-bin, Leng Fang-ling, et al.Study on Log-Based Change Data Capture and Handling Mechanism in Real-Time Data Warehouse[C].Proceedings of 2008 International Conference on Computer Science and Software Engineering,Wuhan, Hubei:IEEE Conference Publications,2008.