摘 要:現(xiàn)今的數(shù)據(jù)庫和同步和復(fù)制管理手段,經(jīng)過多年的行業(yè)催生和應(yīng)用衍變,已經(jīng)變得五花八門,各個數(shù)據(jù)庫內(nèi)部形成了自己的同步管理系統(tǒng),數(shù)據(jù)之間也有大量的數(shù)據(jù)同步范本,本文主要針對于嵌入式數(shù)據(jù)同步,異地多服務(wù)器同步和受限管理的數(shù)據(jù)服務(wù)器端等不對等差異性數(shù)據(jù)同步進行簡要闡述和研究。
關(guān)鍵詞:數(shù)據(jù)同步;嵌入式數(shù)據(jù);異地數(shù)據(jù)庫復(fù)制
中圖分類號:TN305 文獻標識碼:A 文章編號:1674-7712 (2013) 22-0000-01
一、概述
同步復(fù)制是指在一個或多個節(jié)點上進行數(shù)據(jù)備份,包括中心數(shù)據(jù)庫服務(wù)器數(shù)據(jù)復(fù)制及移動終端中保存數(shù)據(jù)庫的復(fù)制。通過同步技術(shù)來實現(xiàn)消除中心數(shù)據(jù)庫和其他連接設(shè)備上的由于更新或?qū)崟r性產(chǎn)生的數(shù)據(jù)不一致性。其目的是保存數(shù)據(jù)各個節(jié)點上的完整和一致性。
二、嵌入式數(shù)據(jù)庫與服務(wù)器端同步
SQLite,作為一個成熟完善并且功能齊全的輕量級關(guān)系型數(shù)據(jù)庫,被大量的使用在嵌入式設(shè)備中,作為移動設(shè)備的數(shù)據(jù)庫,通常在數(shù)據(jù)同步時有兩種情況:
(一)實時數(shù)據(jù)更新,這種數(shù)據(jù)一般體現(xiàn)在實時性要求高的應(yīng)用中,如監(jiān)控或者游戲等。
(二)用戶可以離線操作,在重新上線后將離線操作的數(shù)據(jù)進行統(tǒng)一提交上傳。
一般情況下,實際上所謂的實時更新是在很短的時間內(nèi)提交數(shù)據(jù)并且變更相關(guān)項目,以SQLite和SQL Server進行數(shù)據(jù)同步為例:這兩個數(shù)不同類型的數(shù)據(jù)庫,如果反生強行進行數(shù)據(jù)遷移,雙方無法直接訪問對方的數(shù)據(jù)表,可以使用通訊協(xié)議的方式進行轉(zhuǎn)換提交。在同步客戶端,主要考慮更新監(jiān)測模塊、傳輸模塊、功能管理模塊。
1.更新監(jiān)測模塊
變更監(jiān)視模塊把移動數(shù)據(jù)庫所做的變更操作(I NSERT,UPDATE,DELETE)記錄下來,并作為元數(shù)據(jù)保存起來,作為同步的依據(jù)。保存的信息要足夠讓同步模塊能夠做到準確的同步。在SQLite中,有個SOLire3 update hook()接口函數(shù),它在每次發(fā)生I NSERT、UPDATE、DELETE操作的時候都會被執(zhí)行,代碼如下:SQLite3 uPdat e h00k(db,uodate—hook,(VOid豐)db)。但在管理同步數(shù)據(jù)時,也有很多關(guān)于同步的元數(shù)據(jù)需要存放和管理,更新數(shù)據(jù)時元數(shù)據(jù)也會發(fā)生更新,觸發(fā)接口函數(shù),形成死循環(huán),解決方案是以“SYn一”開頭的表名都做本同步系統(tǒng)使用的表,如果是同步元數(shù)據(jù)表,就不用記錄。通過SQLite3的回調(diào)函數(shù),數(shù)據(jù)更改的信息得以記錄在元數(shù)據(jù)表中,作為之后與同步服務(wù)器更新的依據(jù)。
2.傳輸模塊
可以采用TCP、UDP傳輸層協(xié)議和HTTP等應(yīng)用層協(xié)議,也可以自己定義協(xié)議,協(xié)議要有足夠的能力可以與同步服務(wù)器通信來實現(xiàn)同步數(shù)據(jù)的上傳下載。網(wǎng)絡(luò)通信模塊同時也要提供安全傳輸?shù)墓δ埽軌蚣用芙饷軘?shù)據(jù)。通過分析已有的資料分析,選擇HTTP協(xié)議。考慮到網(wǎng)絡(luò)的斷接性,需要克服同步粒度大的問題,采用每次同步的行不超過一個N值的方法,則數(shù)據(jù)傳輸?shù)目偞螖?shù)L=M/N(M為數(shù)據(jù)更新的條數(shù),N為每次傳輸N行),N的值可以根據(jù)實際情況調(diào)整,要考慮的因素包括網(wǎng)絡(luò)的穩(wěn)定性、帶寬的價格、網(wǎng)絡(luò)的速度、移動終端的性能、同步服務(wù)器的性能等。網(wǎng)絡(luò)通信在客戶端可以調(diào)用HTTP客戶端類庫Curl來實現(xiàn)。
3.功能管理模塊
每個同步都是一次同步會話。會話的流程和步驟,錯誤的處理,都需要有充分的考慮和定義。系統(tǒng)中考慮會話的邏輯關(guān)系為:(1)用戶程序通過修改(包括INSERT、UPDATE和DELETE)客戶端數(shù)據(jù)庫中的數(shù)據(jù)項;(2)客戶端同步模塊獲取修改的元數(shù)據(jù);(3)客戶端同步模塊將修改的元數(shù)據(jù)存入數(shù)據(jù)庫中;(4)同步模塊根據(jù)數(shù)據(jù)庫中的元數(shù)據(jù)獲取要同步的數(shù)據(jù);(5)客戶端同步模塊通過網(wǎng)絡(luò)將數(shù)據(jù)上傳至服務(wù)器同步服務(wù)模塊。
(三)服務(wù)器模塊的同步分析
同步服務(wù)器要連接終端和中心數(shù)據(jù)庫,在兩者問除了交換信息外還要處理多客戶端連接的并發(fā),同步?jīng)_突的處理等任務(wù)。如果系統(tǒng)負載比較大,可能還有多服務(wù)器均衡負載的需求。同步服務(wù)器包含三個部分:終端連接響應(yīng)模塊、數(shù)據(jù)庫連接模塊和系統(tǒng)同步會話邏輯處理模塊。同步服務(wù)器要處理來自多個終端的連接,并確保每個終端都不必知曉別的終端的同步而獨立的執(zhí)行,也就是說,每個終端的同步信息不能混淆,更不能相互影響。這是個比較底層的功能,使用現(xiàn)有的軟件上的技術(shù),往往就具web容器。數(shù)據(jù)庫連接模塊系統(tǒng)設(shè)計的一個目標就是能夠與多種數(shù)據(jù)同步的沖突處理節(jié)點上的數(shù)據(jù)源與目的數(shù)據(jù)同步時,可能發(fā)生數(shù)據(jù)沖突。同步?jīng)_突是分布式數(shù)據(jù)系統(tǒng)非常常見的現(xiàn)象,在移動數(shù)據(jù)庫同步系統(tǒng)中,用戶可以通過制定以主數(shù)據(jù)庫數(shù)據(jù)為主,或者以移動設(shè)備上的嵌入式數(shù)據(jù)庫數(shù)據(jù)為主,來解決主數(shù)據(jù)庫與嵌入式數(shù)據(jù)庫兩者之間的數(shù)據(jù)同步過程中的沖突。如果用戶制定以主數(shù)據(jù)庫為主,則當發(fā)生同步數(shù)據(jù)沖突時,系統(tǒng)將根據(jù)主數(shù)據(jù)庫數(shù)據(jù)來更新移動設(shè)備上數(shù)據(jù)庫中的數(shù)據(jù),而主數(shù)據(jù)庫中的數(shù)據(jù)不做改動:反之,如果用戶指定以嵌入式數(shù)據(jù)庫數(shù)據(jù)為主,則系統(tǒng)將根據(jù)嵌入式數(shù)據(jù)庫中的數(shù)據(jù)來更新主數(shù)據(jù)庫中的數(shù)據(jù),而嵌入式數(shù)據(jù)庫中的數(shù)據(jù)不做改動。當用戶需要進一步對同步?jīng)_突進行更為靈活的解決方案時,可以通過實現(xiàn)沖突處理策略,用編程或者聲明的方式來實現(xiàn)。
三、異地服務(wù)器數(shù)據(jù)同步
Microsoft SQLServer2005自身集成了異地之間服務(wù)器數(shù)據(jù)庫復(fù)制同步功能,即發(fā)布/訂閱模式。
復(fù)制服務(wù)有三個角色,分別是發(fā)布服務(wù)器,分發(fā)服務(wù)器和訂閱服務(wù)器。他們分別做不同的工作。就像我們?nèi)粘YI書和報紙的概念是一樣的。
發(fā)布服務(wù)器:也稱為出版服務(wù)器,主要負責(zé)數(shù)據(jù)的發(fā)布和出版工作。這個角色就好比我們的出版社或者報社。
分發(fā)服務(wù)器:主要負責(zé)將發(fā)布服務(wù)器的內(nèi)容分發(fā)給訂閱者。他是連接發(fā)布服務(wù)器和訂閱服務(wù)器的橋梁。這個角色就好比我們的郵遞員,將書和報紙送到我們的手里。
訂閱服務(wù)器:主要負責(zé)接收發(fā)布的內(nèi)容。這個角色就好比我們自己訂閱書和報紙,是一個訂閱者的角色。
(一)數(shù)據(jù)訂閱模式
數(shù)據(jù)訂閱的模式有推式訂閱和拉式訂閱兩種。推式訂閱主要是分發(fā)服務(wù)器將數(shù)據(jù)推給訂閱服務(wù)器。拉式訂閱是訂閱服務(wù)器主動向分發(fā)服務(wù)器取數(shù)據(jù)。
這就好比我們自己訂閱雜志和報紙一樣,如果人家送貨上門,這就是推式訂閱,消耗的是分發(fā)服務(wù)器的資源,也就是消耗送貨人員的資源。如果是拉式訂閱,我們就需要自己到書店去購買,這樣消耗的就是我們自己的資料。消耗的是訂閱服務(wù)器的資源。
(二)數(shù)據(jù)發(fā)布類型
數(shù)據(jù)發(fā)布類型可發(fā)為三種
1.快照復(fù)制
當符合以下一個或多個條件時,使用快照復(fù)制本身是最合適的:(1)很少更改數(shù)據(jù)。(2)在一段時間內(nèi)允許具有相對發(fā)布服務(wù)器已過時的數(shù)據(jù)副本。(3)復(fù)制少量數(shù)據(jù)。(4)在短期內(nèi)出現(xiàn)大量更改。
2.事務(wù)復(fù)制
事務(wù)性復(fù)制通常用于服務(wù)器到服務(wù)器環(huán)境中,在以下各種情況下適合采用事務(wù)性復(fù)制:
(1)希望發(fā)生增量更改時將其傳播到訂閱服務(wù)器。
(2)從發(fā)布服務(wù)器上發(fā)生更改,至更改到達訂閱服務(wù)器,應(yīng)用程序需要這兩者之間的滯后時間較短。
(3)應(yīng)用程序需要訪問中間數(shù)據(jù)狀態(tài)。例如:如果某一行更改了五次,事務(wù)性復(fù)制將允許應(yīng)用程序響應(yīng)每次更改(例如:激發(fā)觸發(fā)器),而不只是響應(yīng)該行最終的數(shù)據(jù)更改。
(4)發(fā)布服務(wù)器有大量的插入、更新和刪除活動。
3.合并復(fù)制
合并復(fù)制通常用于服務(wù)器到客戶端的環(huán)境中。合并復(fù)制適用于下列各種情況:
(1)多個訂閱服務(wù)器可能會在不同時間更新同一數(shù)據(jù),并將其更改傳播到發(fā)布服務(wù)器和其他訂閱服務(wù)器。
(2)訂閱服務(wù)器需要接收數(shù)據(jù),脫機更改數(shù)據(jù),并在以后與發(fā)布服務(wù)器和其他訂閱服務(wù)器同步更改。每個訂閱服務(wù)器都需要不同的數(shù)據(jù)分區(qū)。可能會發(fā)生沖突,并且在沖突發(fā)生時,您需要具有檢測和解決沖突的能力。
應(yīng)用程序需要最終的數(shù)據(jù)更改結(jié)果,而不是訪問中間數(shù)據(jù)狀態(tài)。例如,如果在訂閱服務(wù)器與發(fā)布服務(wù)器進行同步之前,訂閱服務(wù)器上的行更改了五次,則該行在發(fā)布服務(wù)器上僅更改一次來反映最終數(shù)據(jù)更改。
該方式更適用于實時數(shù)據(jù)的同步更新,但是發(fā)布訂閱模式本身有一些系統(tǒng)和權(quán)限的限制,無法在不更改服務(wù)器系統(tǒng)或數(shù)據(jù)庫版本的情況下隨時使用,對于這種情況,我們使用存儲過程+定時作業(yè)的方式進行數(shù)據(jù)同步管理。
四、結(jié)束語
由于數(shù)據(jù)庫的應(yīng)用領(lǐng)域越發(fā)的廣泛和計算機技術(shù)的快速發(fā)展,數(shù)據(jù)庫的類型和應(yīng)用方式也層出不窮,本文研究的討論的數(shù)據(jù)庫技術(shù)在通訊機房及一些監(jiān)控領(lǐng)域進行了應(yīng)用和測試,數(shù)據(jù)結(jié)果表明有一定的可行性和通用性,對嵌入式數(shù)據(jù)庫應(yīng)用有一定的指導(dǎo)作用。
參考文獻:
[1]楊志和,胡虛懷.移動環(huán)境下的數(shù)據(jù)同步模型研究[J].計算機工程與應(yīng)用,2007(13):52-57.
[2]Byun S,Moon S.Resilient data management for replicatedmobile database system[J].DataKnowledge Engineering.1999,29:43-55.
[作者簡介]魯云鵬(1980-),男,山東海陽人,吉林省白城市公路路政管理局,科員,初級,學(xué)士學(xué)位,研究方向:數(shù)據(jù)庫同步技術(shù)。