郭哲鋒
[摘 要]如何高效、安全地保持?jǐn)?shù)據(jù)庫(kù)之間數(shù)據(jù)同步是當(dāng)前數(shù)據(jù)庫(kù)技術(shù)研究熱點(diǎn)問(wèn)題。本文對(duì)于分布式數(shù)據(jù)庫(kù)系統(tǒng)同步傳輸技術(shù),通過(guò)數(shù)據(jù)庫(kù)同步機(jī)制研究解決了多級(jí)數(shù)據(jù)庫(kù)信息交換過(guò)程中上下級(jí)數(shù)據(jù)庫(kù)數(shù)據(jù)不一致問(wèn)題。
[關(guān)鍵詞]分布式數(shù)據(jù)庫(kù) 同步傳輸 MobiLink 觸發(fā)器
隨著企業(yè)的不斷發(fā)展和壯大,企業(yè)的各子部門(mén)地處于不同區(qū)域的情況越來(lái)越多,為了使企業(yè)異地使用相同的數(shù)據(jù),大多數(shù)企業(yè)都采用了數(shù)據(jù)庫(kù)提供的同步技術(shù)來(lái)解決這一問(wèn)題,但該方法操作難度較大,而數(shù)據(jù)庫(kù)提供的同步技術(shù)也會(huì)因網(wǎng)絡(luò)、電力等原因造成時(shí)間同步無(wú)法進(jìn)行,引起數(shù)據(jù)的丟失等[1]。本文就如何高效、安全地保持分布式數(shù)據(jù)庫(kù)之間數(shù)據(jù)同步進(jìn)行研究,以期解決以上問(wèn)題。
一、分布式數(shù)據(jù)庫(kù)同步技術(shù)理論概述
(一)分布式數(shù)據(jù)庫(kù)概述及特點(diǎn)
分布式數(shù)據(jù)庫(kù)(Distributed Database, DDB)是計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中各場(chǎng)地(Site)或結(jié)點(diǎn)(Node)上數(shù)據(jù)庫(kù)的邏輯集合。一般稱(chēng)傳統(tǒng)方式的數(shù)據(jù)庫(kù)為集中式數(shù)據(jù)庫(kù)(Centralized Database, CDB);稱(chēng)分布式數(shù)據(jù)庫(kù)系統(tǒng)中的各場(chǎng)地?cái)?shù)據(jù)庫(kù)為局部數(shù)據(jù)庫(kù)(Local Database, LDB),是物理的數(shù)據(jù)庫(kù);稱(chēng)分布式數(shù)據(jù)庫(kù)為全局?jǐn)?shù)據(jù)庫(kù)(Global Database, GDB),是邏輯的數(shù)據(jù)庫(kù)。分布式數(shù)據(jù)庫(kù)具有分布性和邏輯協(xié)調(diào)性。分布性是指數(shù)據(jù)不是存放在單一場(chǎng)地為單個(gè)計(jì)算機(jī)配置的存儲(chǔ)設(shè)備上,而是按全局需要將數(shù)據(jù)劃分成一定結(jié)構(gòu)的數(shù)據(jù)子集,分散地存儲(chǔ)在各個(gè)場(chǎng)地上;邏輯協(xié)調(diào)性是指各場(chǎng)地上的數(shù)據(jù)子集,相互間由嚴(yán)密的約束規(guī)則加以限定而在邏輯上是一個(gè)整體。
(二)數(shù)據(jù)庫(kù)同步技術(shù)
通過(guò)交換每個(gè)成員中所有已更新的記錄和對(duì)象, 來(lái)更新一個(gè)副本集的兩個(gè)成員的過(guò)程。當(dāng)每個(gè)副本集內(nèi)的更改都相互應(yīng)用于另一個(gè)副本集時(shí), 兩個(gè)副本集成員就實(shí)現(xiàn)了同步。數(shù)據(jù)庫(kù)同步又分三種[2]:直接同步,即用于在直接連接到局域網(wǎng)的副本之間對(duì)數(shù)據(jù)進(jìn)行同步的方法, 可通過(guò)共享的網(wǎng)絡(luò);文件夾使用間接同步,即一種用于斷開(kāi)連接環(huán)境中( 如帶著便攜式計(jì)算機(jī)外出時(shí)) 的同步方法,必須用“復(fù)制管理器”來(lái)配置間接同步;Internet 同步,用于將已配置了 Internet 服務(wù)器的脫機(jī)環(huán)境中的副本同步。必須使用“復(fù)制管理器”來(lái)配置 Internet 同步。
(三)緩沖池技術(shù)
一個(gè)緩沖池是與單個(gè)數(shù)據(jù)庫(kù)相關(guān)聯(lián)的,可以被多個(gè)表空間使用。當(dāng)考慮將緩沖池用于一個(gè)或多個(gè)表空間時(shí),必須保證表空間頁(yè)大小和緩沖池頁(yè)大小對(duì)于緩沖池所“服務(wù)”的所有表空間而言都是一樣的。一個(gè)表空間只能使用一個(gè)緩沖池。數(shù)據(jù)庫(kù)連接緩沖池,其實(shí)就是保存數(shù)據(jù)庫(kù)連接的一個(gè)集合。需要數(shù)據(jù)庫(kù)連接緩沖池是因?yàn)槊看螌?duì)數(shù)據(jù)庫(kù)的開(kāi)閉都是非常耗時(shí)耗資源的,如果并發(fā)請(qǐng)求過(guò)大,可能就導(dǎo)致系統(tǒng)反應(yīng)緩慢甚至造成崩潰。
(四) 觸發(fā)器實(shí)現(xiàn)算法簡(jiǎn)介
當(dāng)前數(shù)據(jù)庫(kù)應(yīng)用的一個(gè)普遍要求是數(shù)據(jù)庫(kù)管理系統(tǒng)能夠在一些數(shù)據(jù)庫(kù)相關(guān)事件發(fā)生時(shí)觸發(fā)預(yù)先定義的操作,實(shí)現(xiàn)信息管理的自動(dòng)化,因此引進(jìn)了觸發(fā)器機(jī)制。觸發(fā)器可以增強(qiáng)引用完整性,加強(qiáng)復(fù)雜業(yè)務(wù)的規(guī)則,或者監(jiān)控?cái)?shù)據(jù)庫(kù)的變動(dòng),并執(zhí)行一定的數(shù)據(jù)操作。觸發(fā)器機(jī)制實(shí)現(xiàn)主要涉及觸發(fā)事件的檢測(cè)以及觸發(fā)條件的判決等關(guān)鍵技術(shù)問(wèn)題,以及對(duì)觸發(fā)器的編譯存儲(chǔ)和調(diào)用執(zhí)行等具體操作。
觸發(fā)器事件檢測(cè)機(jī)制包括對(duì)事件的檢測(cè)和存儲(chǔ),是實(shí)現(xiàn)觸發(fā)器的關(guān)鍵。觸發(fā)器的條件判決機(jī)制是觸發(fā)器的核心,根據(jù) SQL99 標(biāo)準(zhǔn)的定義,可以將觸發(fā)器分為前觸發(fā)、約束判定和后觸發(fā)三種類(lèi)型。觸發(fā)器的更新操作是對(duì)一個(gè)觸發(fā)器進(jìn)行編譯后,替換已存在的作用在同一個(gè)表上的同名觸發(fā)器,基本操作與觸發(fā)器的創(chuàng)建是一致的;觸發(fā)器的刪除操作步驟主要是在數(shù)據(jù)字典中對(duì)指定的觸發(fā)器進(jìn)行查詢(xún)并刪除。
二、需求分析
(一)系統(tǒng)功能
分布式數(shù)據(jù)庫(kù)同步系統(tǒng)主要完成對(duì)于網(wǎng)絡(luò)中數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)同步操作及相關(guān)設(shè)置,通過(guò)編寫(xiě)程序?qū)崿F(xiàn)網(wǎng)絡(luò)中對(duì)于 Oracle,MS SQL Sever 等數(shù)據(jù)庫(kù)之間數(shù)據(jù)的同步操作。利用緩沖池技術(shù)提供數(shù)據(jù)交換的安全保障,確保數(shù)據(jù)在同步過(guò)程中保持?jǐn)?shù)據(jù)的一致性。采用標(biāo)準(zhǔn)的數(shù)據(jù)通訊方式,以及標(biāo)準(zhǔn)的同步交換協(xié)議。實(shí)現(xiàn)主數(shù)據(jù)庫(kù)對(duì)結(jié)點(diǎn)Oracle 數(shù)據(jù)庫(kù),MS SQL Sever 數(shù)據(jù)庫(kù)數(shù)據(jù)的同步。觸發(fā)同步機(jī)制,使得主數(shù)據(jù)庫(kù)與結(jié)點(diǎn)數(shù)據(jù)庫(kù)數(shù)據(jù)保持一致性。 定制對(duì)異構(gòu)數(shù)據(jù)庫(kù)自動(dòng)同步操作,可以實(shí)現(xiàn)按預(yù)定規(guī)則實(shí)現(xiàn)定時(shí)更新數(shù)據(jù)庫(kù)數(shù)據(jù)。
(二)總體設(shè)計(jì)
分布式數(shù)據(jù)庫(kù)數(shù)據(jù)同步系統(tǒng)由變化捕獲、日志還原、同步觸發(fā)、通訊和數(shù)據(jù)更新等 5 個(gè)模塊組成。變化捕獲模塊負(fù)責(zé)捕獲變化并記錄日志;日志還原模塊把變更操作還原成數(shù)據(jù)庫(kù)語(yǔ)句;同步觸發(fā)模塊根據(jù)同步策略激活通訊發(fā)送;通訊模塊負(fù)責(zé)數(shù)據(jù)的發(fā)送與接收;數(shù)據(jù)更新模塊負(fù)責(zé)把傳送過(guò)來(lái)的數(shù)據(jù)更新到目標(biāo)數(shù)據(jù)庫(kù)。
對(duì)于整個(gè)系統(tǒng)功能模塊來(lái)講,分布式數(shù)據(jù)庫(kù)同步系統(tǒng)包含五個(gè)基本功能模塊:?jiǎn)?dòng) ORA 同步,啟動(dòng) MMS 同步,自動(dòng)同步,同步 ORA,同步 SQL。(1)啟動(dòng) ORA 同步,在主機(jī)數(shù)據(jù)庫(kù)所在服務(wù)器啟動(dòng) ORA 同步服務(wù);(2)啟動(dòng) MMS 同步,在主機(jī)數(shù)據(jù)庫(kù)所在服務(wù)器啟動(dòng) SQL 同步服務(wù);(3)自動(dòng)同步,在主機(jī)數(shù)據(jù)庫(kù)所在服務(wù)器啟動(dòng)自動(dòng)同步服務(wù),使得同步工作按照預(yù)定設(shè)置的條件進(jìn)行自動(dòng)同步服務(wù);(4)同步 ORA,對(duì)于網(wǎng)絡(luò)中主機(jī)數(shù)據(jù)庫(kù)與 ORA 的結(jié)點(diǎn)數(shù)據(jù)庫(kù)進(jìn)行同步工作,同步以后使得主數(shù)據(jù)庫(kù)與 ORA 的結(jié)點(diǎn)數(shù)據(jù)庫(kù)數(shù)據(jù)保持一致;(5)同步 SQL,對(duì)于網(wǎng)絡(luò)中主機(jī)數(shù)據(jù)庫(kù)與 SQL 結(jié)點(diǎn)數(shù)據(jù)庫(kù)進(jìn)行同步工作,同步以后使得主數(shù)據(jù)庫(kù)與 SQL 的結(jié)點(diǎn)數(shù)據(jù)庫(kù)數(shù)據(jù)保持一致。
三、系統(tǒng)設(shè)計(jì)關(guān)鍵技術(shù)分析
(一)系統(tǒng)配置介紹
通用數(shù)據(jù)傳輸平臺(tái)基于選定的 MobiLink 技術(shù)作為軟件開(kāi)發(fā)的技術(shù)支持,使用Sybase ASA8.0 作為 MobiLink 的客戶(hù)端與同步服務(wù)器。通用數(shù)據(jù)傳輸平臺(tái)系統(tǒng)具有傳輸對(duì)象的配置與定義功能,采用基于傳輸緩沖池的數(shù)據(jù)同步傳輸與日志傳輸技術(shù),以撥號(hào)網(wǎng)絡(luò)作為主要應(yīng)用環(huán)境,同時(shí)支持實(shí)時(shí)網(wǎng)絡(luò)傳輸環(huán)境。通用數(shù)據(jù)傳輸平臺(tái)體現(xiàn)了通用性、高效性、安全性和穩(wěn)定性。
(二)MobiLink 技術(shù)概述
MobiLink 技術(shù)一種基于發(fā)布/訂閱方式的異步消息中間件技術(shù)[3]。主要是以MobiLink 客戶(hù)端在建立 MobiLink 用戶(hù)的基礎(chǔ)上完成單向的同步發(fā)布/同步預(yù)訂,MobiLink 同步服務(wù)器只需要處于啟動(dòng)的狀態(tài),使 MobiLink 客戶(hù)端通過(guò) MobiLink 同步服務(wù)器來(lái)進(jìn)行同步。
1.MobiLink 的同步過(guò)程技術(shù)
同步會(huì)話(huà)是 MobiLink 客戶(hù)端和同步服務(wù)器之間的雙向數(shù)據(jù)交換過(guò)程,始終由客戶(hù)端開(kāi)始進(jìn)行同步過(guò)程。在此過(guò)程中,客戶(hù)端必須建立并維護(hù)與同步服務(wù)器的連接。如果成功,此會(huì)話(huà)將使遠(yuǎn)程數(shù)據(jù)庫(kù)和統(tǒng)一數(shù)據(jù)庫(kù)保持相互一致的狀態(tài)。同步過(guò)程中包括上載和下載兩部分。 對(duì)于數(shù)據(jù)行的上載,MobiLink 客戶(hù)端準(zhǔn)備并發(fā)送一個(gè)上載流,它包含從上次同步后在 MobiLink 客戶(hù)端經(jīng)過(guò)更新、插入或刪除的所有行的列表。類(lèi)似地,對(duì)于數(shù)據(jù)行的下載,MobiLink 同步服務(wù)器準(zhǔn)備并發(fā)送一個(gè)下載流,它包含插入、更新和刪除的列表。
2.MobiLink 的同步腳本
MobiLink 同步邏輯由存儲(chǔ)在統(tǒng)一數(shù)據(jù)庫(kù)中的腳本組成,這些腳本可以是單個(gè)語(yǔ)句,也可以是存儲(chǔ)過(guò)程調(diào)用。在同步過(guò)程中,MobiLink 同步服務(wù)器將讀取這些腳本,并對(duì)統(tǒng)一數(shù)據(jù)庫(kù)執(zhí)行這些腳本。腳本為您提供了在同步過(guò)程中的不同時(shí)間點(diǎn)執(zhí)行任務(wù)的機(jī)會(huì)。您可以使用 Sybase Central,也可以使用存儲(chǔ)過(guò)程將腳本添加到統(tǒng)一數(shù)據(jù)庫(kù)中。
每個(gè)腳本對(duì)應(yīng)于同步過(guò)程中的一個(gè)特定事件。僅當(dāng)某個(gè)操作必須發(fā)生時(shí)才編寫(xiě)腳本。所有不必要的事件都無(wú)需定義。同步過(guò)程的兩個(gè)主要部分是處理上載的信息和準(zhǔn)各要下載的行。MobiLink同步服務(wù)器將在首次需要某一校本時(shí)讀取它進(jìn)行準(zhǔn)各,只讀取和準(zhǔn)備一次。只要一個(gè)事件被激活,便執(zhí)行與其關(guān)聯(lián)的腳本。大多數(shù)同步腳本都接受來(lái)自MobiLink同步服務(wù)器的參數(shù)您可以在腳本中使用這些參數(shù),通過(guò)在腳本中放置問(wèn)號(hào)即可做到這一點(diǎn)。腳本是以組的方式進(jìn)行組織的,這些組被稱(chēng)為腳本版本。通過(guò)指定特定的版本,MobiLink 客戶(hù)端可以選擇使用哪一組同步腳本來(lái)處理上載流及準(zhǔn)備下載流。
3.MobiLink 的同步方式
MobiLink 的同步方式可以分為兩種[4]:1.基于時(shí)間戳的同步。時(shí)間戳方法是可以進(jìn)行高效的同步的最實(shí)用的通用技術(shù)。此項(xiàng)技術(shù)涉及跟蹤每個(gè)用戶(hù)上次進(jìn)行同步的時(shí)間,并使用此信息控制下載到每個(gè)遠(yuǎn)程數(shù)據(jù)庫(kù)的行。MobiLink保留了一個(gè)用以說(shuō)明每個(gè) MobiLink 用戶(hù)上一次下載數(shù)據(jù)的時(shí)間的時(shí)間戳值。該值被稱(chēng)為上次下載的時(shí)間戳。上次下載的時(shí)間戳將作為一個(gè)參數(shù)被提供給許多事件,該時(shí)間戳還可以在同步腳本中使用。2.快照同步。基于時(shí)間戳的同步適合于大多數(shù)同步。不過(guò),有時(shí)候可能需要更新數(shù)據(jù)快照。表的快照同步是指完全下載表中的所有相關(guān)行,而不考慮這些行以前是否已經(jīng)下載。這是最簡(jiǎn)單的同步方法,但會(huì)引起大量的不必要的數(shù)據(jù)集交換,從而導(dǎo)致性能下降??梢允褂每煺胀较螺d表中的所有行,或者將此方法與在遠(yuǎn)程數(shù)據(jù)庫(kù)之間對(duì)行進(jìn)行分區(qū)中描述的行分區(qū)方法結(jié)合使用??煺胀阶钸m合用于同時(shí)具有以下兩種特征的表:(1)行數(shù)相對(duì)較少:當(dāng)表中行數(shù)比較少時(shí),下載所有行所產(chǎn)生的開(kāi)銷(xiāo)也會(huì)相對(duì)較小。(2)行信息經(jīng)常更改:當(dāng)表中的大多數(shù)行頻繁進(jìn)行更改時(shí),采用顯式排除上次同步后未發(fā)生更改的行的方法就沒(méi)有太大的必要。
(三)數(shù)據(jù)庫(kù)設(shè)計(jì)
分布式數(shù)據(jù)同步系統(tǒng)采用緩沖池技術(shù)來(lái)確保數(shù)據(jù)傳輸?shù)陌踩院鸵恢滦?,根?jù)系統(tǒng)分析:(1)主機(jī)數(shù)據(jù)庫(kù)主要由三部分組成:用戶(hù)信息表,本地?cái)?shù)據(jù)庫(kù)表,傳輸緩沖池表;(2)子機(jī)數(shù)據(jù)庫(kù)主要有兩部分組成:本地?cái)?shù)據(jù)庫(kù)表和傳輸緩沖池表。
(四)數(shù)據(jù)庫(kù)同步過(guò)程分析
數(shù)據(jù)庫(kù)同步系統(tǒng)同步數(shù)據(jù)總體同步過(guò)程如下:(1)用戶(hù)登陸,根據(jù)用戶(hù)信息表進(jìn)行登陸操作;(2)啟動(dòng)同步,針對(duì)不同的數(shù)據(jù)庫(kù)啟動(dòng)對(duì)應(yīng)的同步服務(wù);(3)同步數(shù)據(jù),同步操作開(kāi)始;(4)比較緩沖池?cái)?shù)據(jù),如果相同說(shuō)明雙方數(shù)據(jù)一致,同步結(jié)束;如果不同則更新緩沖池當(dāng)中的數(shù)據(jù),直到兩個(gè)緩沖池當(dāng)中的數(shù)據(jù)再次達(dá)到一致;(5)更新緩沖池?cái)?shù)據(jù);(6)更新本地?cái)?shù)據(jù)庫(kù)數(shù)據(jù);(7)同步結(jié)束。
四、結(jié)論
隨著分布式數(shù)據(jù)庫(kù)廣泛應(yīng)用于各個(gè)行業(yè),異構(gòu)數(shù)據(jù)庫(kù)海量數(shù)據(jù)傳輸成為計(jì)算機(jī)研究人員關(guān)注的焦點(diǎn),本文研究了分布式數(shù)據(jù)庫(kù)之間數(shù)據(jù)同步,采用傳輸緩沖池同步技術(shù),確保發(fā)送數(shù)據(jù)庫(kù)與接收數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性。
參考文獻(xiàn)
[1]宋俊蘇。分布式數(shù)據(jù)庫(kù)在高職院校辦公自動(dòng)化管理系統(tǒng)中的應(yīng)用[J]電腦知識(shí)與技術(shù), 2009,08
[2]邵佩英。分布式數(shù)據(jù)庫(kù)系統(tǒng)及其應(yīng)用(第二版)北京:科學(xué)出版社,2005:10~11
[3]Richard Staehli,F(xiàn)rank Eliassen,Sten Amundsen。Designing Adaptive Middleware for Reuse[A]Middleware 2004 Companion[C]Toronto: IFIP International Federation for Information Processing, 2004: pp.153~157
[4]馬新娜,牛存良,石玉晶等。異構(gòu)數(shù)據(jù)庫(kù)互動(dòng)中間件的設(shè)計(jì)與應(yīng)用。微機(jī)發(fā)展,2004(4)