劉雅莉
(商洛學院 經(jīng)濟管理學院,陜西商洛 726000)
隨著網(wǎng)絡技術(shù)的發(fā)展,各行各業(yè)對信息管理的需求日趨復雜,信息系統(tǒng)的性能、數(shù)據(jù)的安全性、數(shù)據(jù)的復用率成為系統(tǒng)使用者關注的問題。分布式數(shù)據(jù)庫作為邏輯上的統(tǒng)一整體,滿足信息既獨立、又協(xié)同的處理需求,在不同節(jié)點數(shù)據(jù)庫之間的數(shù)據(jù)傳輸、不同數(shù)據(jù)源異構(gòu)數(shù)據(jù)的信息共享方面表現(xiàn)優(yōu)異,而分布式數(shù)據(jù)庫的同步機制直接影響系統(tǒng)性能,是系統(tǒng)開發(fā)過程中必須解決的問題,因此,建立一套性能優(yōu)異的數(shù)據(jù)同步機制既能節(jié)省信息化系統(tǒng)建設成本,又能發(fā)揮出數(shù)據(jù)的最大價值。
分布式數(shù)據(jù)庫通常由一組數(shù)據(jù)構(gòu)成,數(shù)據(jù)分布于多個服務器,每個服務器均可執(zhí)行局部應用,也可以利用部署的分布式集群網(wǎng)絡實現(xiàn)全局應用。從邏輯表面看,數(shù)據(jù)比較分散,但實際上是一個整體。分布式數(shù)據(jù)庫具有數(shù)據(jù)獨立、站點自治、分布透明、冗余透明、系統(tǒng)分層、并行處理等特性,為多層級結(jié)構(gòu)模式,在諸多領域的應用中有優(yōu)異表現(xiàn)。
目前,主流數(shù)據(jù)同步機制主要包括數(shù)據(jù)庫復制技術(shù)、ETL 機制、SQLServer、Sybase 等。數(shù)據(jù)庫復制技術(shù)利用自身同步機制進行定期巡檢,發(fā)現(xiàn)不一致則進行復制并發(fā)送給其他站,融合能力較高且利于節(jié)點就近獲取數(shù)據(jù)。ETL 機制可實現(xiàn)異構(gòu)數(shù)據(jù)的采集、清洗、轉(zhuǎn)換以及數(shù)據(jù)加載。SQLServer 和Sybase 都基于“Publisher-Subscriber”模式,區(qū)別在于SQLServer 主要支持快照、事務以及合并復制。Sybase 主要支持分布式主段、主復制等模式[1-2]。
文件傳輸模式的數(shù)據(jù)同步由于固定間隔傳輸導致實時性欠佳,而數(shù)據(jù)庫內(nèi)嵌的復制同步機制如果頻繁更新,則無法確保網(wǎng)絡穩(wěn)定性且存在數(shù)據(jù)一致性缺陷,因此多層分布式數(shù)據(jù)庫同步機制的設計目標首先要保證數(shù)據(jù)準確,其次要保證同步效率。綜合比較之下,該研究選擇了觸發(fā)器以及XML 技術(shù),采用觸發(fā)器技術(shù)記錄數(shù)據(jù)庫表更新情況并寫入中間表;基于XML 彌補了觸發(fā)器單表綁定的缺陷,實現(xiàn)了多表數(shù)據(jù)讀取。
ETL(Extraction Transformation Loading)技術(shù)包括數(shù)據(jù)的抽取、轉(zhuǎn)換、清洗以及裝載。數(shù)據(jù)處理不是直接單一的存儲和查詢過程,而是多個ETL 過程。
1)數(shù)據(jù)抽?。褐饕谴_定哪些數(shù)據(jù)與后續(xù)執(zhí)行決策有關,收集這部分數(shù)據(jù)的字段信息,確定抽取間隔、傳送格式,并傳送到目標服務器。
2)數(shù)據(jù)轉(zhuǎn)換:主要是將多源數(shù)據(jù)進行格式化,確保數(shù)據(jù)的一致性,便于應用系統(tǒng)進行操作。具體包括兩個方面:一方面是將操作型數(shù)據(jù)轉(zhuǎn)換為查詢分析型數(shù)據(jù),另一方面是在導入之前統(tǒng)一數(shù)據(jù)標識。
3)數(shù)據(jù)清洗:無效數(shù)據(jù)會影響后續(xù)的分析效果,因此需要校驗源數(shù)據(jù)質(zhì)量,針對容易出現(xiàn)的數(shù)據(jù)丟失、出錯、冗余以及不一致的情況進行補充、修正或剔除,數(shù)據(jù)清洗過程也是數(shù)據(jù)的標準化過程,是提高源數(shù)據(jù)質(zhì)量的有效方式。
4)數(shù)據(jù)裝載:主要是將數(shù)據(jù)載入到目標數(shù)據(jù)庫,包括全部裝載、更新、刷新等幾種方式。全部裝載是對整個數(shù)據(jù)庫進行裝載,更新是對有變化的數(shù)據(jù)進行記錄,刷新是在指定周期進行重新裝載。
網(wǎng)絡中所有機器全部完成一次上傳與下載所需時長是分布式數(shù)據(jù)庫數(shù)據(jù)同步性能關鍵的判斷標準。設網(wǎng)絡內(nèi)計算機記為S1,S2,S3,…,Sn,兩臺機器間傳輸帶寬記為Wij,單位時間內(nèi)同步數(shù)據(jù)量作為同步效率記為Kij,則兩臺計算機實現(xiàn)一次數(shù)據(jù)同步所需時間為tij=。通過帶寬矩陣和效率矩陣獲取所需的時間矩陣,得出耗時最長為tmax=max(t12,t13,t14…,t1m,t21,t22,…,t2m,…,tn1,tn2,…,tnm)。若各條帶寬均相同記作,其中,B為總帶寬,n為計算機總數(shù),n(n-1)/2 為連接總數(shù)。那么可以得出t==Kijn(n-1)/2B。若計算機數(shù)量固定,同步效率低于帶寬,則時間與效率、數(shù)量函數(shù)成正比,同時與Kij、B有關;同步效率高于帶寬可能導致數(shù)據(jù)擁堵,從而導致同步效率下降。因此,影響分布式數(shù)據(jù)庫數(shù)據(jù)同步性能的影響因子包括:同步效率Kij、計算機總數(shù)n、網(wǎng)絡總帶寬B[3-4]。
海量數(shù)據(jù)時代涉及大量事務的分析與處理,機器自動化抽取、加載數(shù)據(jù)勢在必行,相對于傳統(tǒng)數(shù)據(jù)庫,數(shù)據(jù)倉庫更適用于對大量事務的分析與處理,因此,采用數(shù)據(jù)倉庫中的ETL 工具來實現(xiàn)數(shù)據(jù)導入,為避免全量加載而影響性能,只需抽取增量更新數(shù)據(jù)。根據(jù)操作類型、是否更新等進行數(shù)據(jù)分類,然后將有記錄時間的數(shù)據(jù)實行增量導入,沒有記錄時間的轉(zhuǎn)為分析數(shù)據(jù)庫日志。數(shù)據(jù)導入流程如圖1 所示。
圖1 數(shù)據(jù)導入流程
在使用ETL 工具時,關鍵是如何判斷數(shù)據(jù)的變化,文中采用觸發(fā)器和時間戳相結(jié)合的方式,在待維護的數(shù)據(jù)表上建立插入、修改、刪除三類觸發(fā)器,當源表數(shù)據(jù)發(fā)生更新時,對應的觸發(fā)器將數(shù)據(jù)寫入維護表,并增加時間戳及標記操作類型[5-6]。觸發(fā)器實現(xiàn)代碼如下:
對于由斷電或其他網(wǎng)絡因素導致傳輸中斷的情況,恢復后從中斷位置繼續(xù)傳輸即可。在斷點續(xù)傳的過程中,主要包括請求、回復兩個動作,在請求消息包中設置Range 關鍵字,記錄開始傳輸?shù)奈恢?,實現(xiàn)代碼如下:
回復消息的數(shù)據(jù)采用如下格式:
XML(Extensible Markup Language)是一種可擴展的標記語言,利用自我定義的方式對存儲的數(shù)據(jù)進行描述,描述信息不但包括各類數(shù)據(jù)內(nèi)容,還包括數(shù)據(jù)相互間的關聯(lián)關系。XML 技術(shù)具有可擴展性、結(jié)構(gòu)性以及平臺獨立性,可以描述各種結(jié)構(gòu)化以及非結(jié)構(gòu)化的數(shù)據(jù),可以有效解決兩個系統(tǒng)之間、不同應用之間、不同數(shù)據(jù)源之間的數(shù)據(jù)同步問題。XML可以將多個程序的數(shù)據(jù)寫入同一個XML 文件并進行傳輸,接收文件的服務器通過解析XML 文件獲取信息,進而實現(xiàn)本地的編輯操作。鑒于XML 的優(yōu)良特性,應用在數(shù)據(jù)同步機制中,不僅滿足了轉(zhuǎn)換需要,而且可以起到簡化異構(gòu)數(shù)據(jù)的效果,降低了同步模型的復雜程度。
分布式數(shù)據(jù)庫的數(shù)據(jù)同步過程包括采集、轉(zhuǎn)換、傳輸以及導入四個階段,利用數(shù)據(jù)倉庫提取增量數(shù)據(jù)并存入緩存區(qū);利用ETL 實現(xiàn)數(shù)據(jù)流轉(zhuǎn),增強數(shù)據(jù)一致性;經(jīng)過XML 轉(zhuǎn)換后傳至其他節(jié)點,接收后進行反向轉(zhuǎn)換,增強數(shù)據(jù)的規(guī)范性[7-8]。根據(jù)總體工作機制,構(gòu)建異構(gòu)數(shù)據(jù)同步模型如圖2 所示。應用系統(tǒng)之間共享數(shù)據(jù)可通過不同服務器間接口,按照協(xié)議格式進行封裝,通過XML 文檔格式進行數(shù)據(jù)的加密、解密以及數(shù)據(jù)傳輸,利用轉(zhuǎn)換模塊實現(xiàn)XML 文檔與數(shù)據(jù)庫的正反映射,不同中心之間利用同步模塊進行上傳與下載,實現(xiàn)數(shù)據(jù)共享。
圖2 異構(gòu)數(shù)據(jù)同步模型
XML文檔包括包含描述信息的Schema文檔以及包含表結(jié)構(gòu)及關聯(lián)關系的映射文檔。首先,將關系模式映射為文檔,確認全局變量。其次,在XML 中利用數(shù)據(jù)庫名構(gòu)建根元素,利用表名構(gòu)建表元素。最后,建立類型與表字段結(jié)構(gòu)一一對應。其中xs:schema包括標識、命名等信息,xs:element 代表數(shù)據(jù)庫表字段,xs:sequece 代表順序,xs:unique 代表是否唯一,xs:keyref 代表約束,PrimaryKet 代表元素主鍵[9-10]。
XML 文檔向數(shù)據(jù)庫表正向轉(zhuǎn)換:首先,校驗文檔格式是否符合標準。其次,利用讀取函數(shù)生成創(chuàng)建語句。再次,從文檔中讀取相關屬性和約束,生成insert、update 或delete 語句。最后,在數(shù)據(jù)庫中執(zhí)行語句并返回結(jié)果[11-12]。具體轉(zhuǎn)換流程如圖3 所示。
圖3 正向轉(zhuǎn)換流程
從數(shù)據(jù)庫到XML 文檔的反向轉(zhuǎn)換只針對有效數(shù)據(jù),將數(shù)據(jù)庫中提取出來的數(shù)據(jù)寫入文檔,轉(zhuǎn)換流程如圖4 所示。利用GerFileName 函數(shù)獲取文件名,打開文件后,根據(jù)XML 文檔映射算法寫入Schema 格式的信息內(nèi)容,然后完成轉(zhuǎn)換[13-14]。
圖4 反向轉(zhuǎn)換流程
為了驗證所設計的數(shù)據(jù)同步機制的實際應用效果,獲取國內(nèi)某市醫(yī)院數(shù)據(jù)庫作為實驗數(shù)據(jù),在Matlab 上搭建實驗平臺,創(chuàng)建同步信息表sync_test,包含30 個字段,記錄數(shù)據(jù)同步時間及數(shù)據(jù)完整性,結(jié)果如表1 所示。
表1 同步機制實證效果
隨著數(shù)據(jù)量級的增長,同步模型時延始終控制在5 μs 以內(nèi)且無數(shù)據(jù)丟失,同步效果較好且性能優(yōu)異[15-16]。
為了實現(xiàn)分布式數(shù)據(jù)庫多層數(shù)據(jù)同步,利用觸發(fā)器、時間戳相結(jié)合的方法增量抽取待同步數(shù)據(jù),經(jīng)過實證分析,基于XML 構(gòu)建的同步模型時延較小、性能良好。但同步機制尚未實現(xiàn)完全自動化,所采用的技術(shù)相對比較單一,在數(shù)據(jù)庫訪問效率方面的研究還有待提升。