劉雅莉
(商洛學院 經濟管理學院,陜西商洛 726000)
隨著網絡技術的發展,各行各業對信息管理的需求日趨復雜,信息系統的性能、數據的安全性、數據的復用率成為系統使用者關注的問題。分布式數據庫作為邏輯上的統一整體,滿足信息既獨立、又協同的處理需求,在不同節點數據庫之間的數據傳輸、不同數據源異構數據的信息共享方面表現優異,而分布式數據庫的同步機制直接影響系統性能,是系統開發過程中必須解決的問題,因此,建立一套性能優異的數據同步機制既能節省信息化系統建設成本,又能發揮出數據的最大價值。
分布式數據庫通常由一組數據構成,數據分布于多個服務器,每個服務器均可執行局部應用,也可以利用部署的分布式集群網絡實現全局應用。從邏輯表面看,數據比較分散,但實際上是一個整體。分布式數據庫具有數據獨立、站點自治、分布透明、冗余透明、系統分層、并行處理等特性,為多層級結構模式,在諸多領域的應用中有優異表現。
目前,主流數據同步機制主要包括數據庫復制技術、ETL 機制、SQLServer、Sybase 等。數據庫復制技術利用自身同步機制進行定期巡檢,發現不一致則進行復制并發送給其他站,融合能力較高且利于節點就近獲取數據。ETL 機制可實現異構數據的采集、清洗、轉換以及數據加載。SQLServer 和Sybase 都基于“Publisher-Subscriber”模式,區別在于SQLServer 主要支持快照、事務以及合并復制。Sybase 主要支持分布式主段、主復制等模式[1-2]。
文件傳輸模式的數據同步由于固定間隔傳輸導致實時性欠佳,而數據庫內嵌的復制同步機制如果頻繁更新,則無法確保網絡穩定性且存在數據一致性缺陷,因此多層分布式數據庫同步機制的設計目標首先要保證數據準確,其次要保證同步效率。綜合比較之下,該研究選擇了觸發器以及XML 技術,采用觸發器技術記錄數據庫表更新情況并寫入中間表;基于XML 彌補了觸發器單表綁定的缺陷,實現了多表數據讀取。
ETL(Extraction Transformation Loading)技術包括數據的抽取、轉換、清洗以及裝載。數據處理不是直接單一的存儲和查詢過程,而是多個ETL 過程。
1)數據抽取:主要是確定哪些數據與后續執行決策有關,收集這部分數據的字段信息,確定抽取間隔、傳送格式,并傳送到目標服務器。
2)數據轉換:主要是將多源數據進行格式化,確保數據的一致性,便于應用系統進行操作。具體包括兩個方面:一方面是將操作型數據轉換為查詢分析型數據,另一方面是在導入之前統一數據標識。
3)數據清洗:無效數據會影響后續的分析效果,因此需要校驗源數據質量,針對容易出現的數據丟失、出錯、冗余以及不一致的情況進行補充、修正或剔除,數據清洗過程也是數據的標準化過程,是提高源數據質量的有效方式。
4)數據裝載:主要是將數據載入到目標數據庫,包括全部裝載、更新、刷新等幾種方式。全部裝載是對整個數據庫進行裝載,更新是對有變化的數據進行記錄,刷新是在指定周期進行重新裝載。
網絡中所有機器全部完成一次上傳與下載所需時長是分布式數據庫數據同步性能關鍵的判斷標準。設網絡內計算機記為S1,S2,S3,…,Sn,兩臺機器間傳輸帶寬記為Wij,單位時間內同步數據量作為同步效率記為Kij,則兩臺計算機實現一次數據同步所需時間為tij=。通過帶寬矩陣和效率矩陣獲取所需的時間矩陣,得出耗時最長為tmax=max(t12,t13,t14…,t1m,t21,t22,…,t2m,…,tn1,tn2,…,tnm)。若各條帶寬均相同記作,其中,B為總帶寬,n為計算機總數,n(n-1)/2 為連接總數。那么可以得出t==Kijn(n-1)/2B。若計算機數量固定,同步效率低于帶寬,則時間與效率、數量函數成正比,同時與Kij、B有關;同步效率高于帶寬可能導致數據擁堵,從而導致同步效率下降。因此,影響分布式數據庫數據同步性能的影響因子包括:同步效率Kij、計算機總數n、網絡總帶寬B[3-4]。
海量數據時代涉及大量事務的分析與處理,機器自動化抽取、加載數據勢在必行,相對于傳統數據庫,數據倉庫更適用于對大量事務的分析與處理,因此,采用數據倉庫中的ETL 工具來實現數據導入,為避免全量加載而影響性能,只需抽取增量更新數據。根據操作類型、是否更新等進行數據分類,然后將有記錄時間的數據實行增量導入,沒有記錄時間的轉為分析數據庫日志。數據導入流程如圖1 所示。

圖1 數據導入流程
在使用ETL 工具時,關鍵是如何判斷數據的變化,文中采用觸發器和時間戳相結合的方式,在待維護的數據表上建立插入、修改、刪除三類觸發器,當源表數據發生更新時,對應的觸發器將數據寫入維護表,并增加時間戳及標記操作類型[5-6]。觸發器實現代碼如下:

對于由斷電或其他網絡因素導致傳輸中斷的情況,恢復后從中斷位置繼續傳輸即可。在斷點續傳的過程中,主要包括請求、回復兩個動作,在請求消息包中設置Range 關鍵字,記錄開始傳輸的位置,實現代碼如下:


回復消息的數據采用如下格式:

XML(Extensible Markup Language)是一種可擴展的標記語言,利用自我定義的方式對存儲的數據進行描述,描述信息不但包括各類數據內容,還包括數據相互間的關聯關系。XML 技術具有可擴展性、結構性以及平臺獨立性,可以描述各種結構化以及非結構化的數據,可以有效解決兩個系統之間、不同應用之間、不同數據源之間的數據同步問題。XML可以將多個程序的數據寫入同一個XML 文件并進行傳輸,接收文件的服務器通過解析XML 文件獲取信息,進而實現本地的編輯操作。鑒于XML 的優良特性,應用在數據同步機制中,不僅滿足了轉換需要,而且可以起到簡化異構數據的效果,降低了同步模型的復雜程度。
分布式數據庫的數據同步過程包括采集、轉換、傳輸以及導入四個階段,利用數據倉庫提取增量數據并存入緩存區;利用ETL 實現數據流轉,增強數據一致性;經過XML 轉換后傳至其他節點,接收后進行反向轉換,增強數據的規范性[7-8]。根據總體工作機制,構建異構數據同步模型如圖2 所示。應用系統之間共享數據可通過不同服務器間接口,按照協議格式進行封裝,通過XML 文檔格式進行數據的加密、解密以及數據傳輸,利用轉換模塊實現XML 文檔與數據庫的正反映射,不同中心之間利用同步模塊進行上傳與下載,實現數據共享。

圖2 異構數據同步模型
XML文檔包括包含描述信息的Schema文檔以及包含表結構及關聯關系的映射文檔。首先,將關系模式映射為文檔,確認全局變量。其次,在XML 中利用數據庫名構建根元素,利用表名構建表元素。最后,建立類型與表字段結構一一對應。其中xs:schema包括標識、命名等信息,xs:element 代表數據庫表字段,xs:sequece 代表順序,xs:unique 代表是否唯一,xs:keyref 代表約束,PrimaryKet 代表元素主鍵[9-10]。
XML 文檔向數據庫表正向轉換:首先,校驗文檔格式是否符合標準。其次,利用讀取函數生成創建語句。再次,從文檔中讀取相關屬性和約束,生成insert、update 或delete 語句。最后,在數據庫中執行語句并返回結果[11-12]。具體轉換流程如圖3 所示。

圖3 正向轉換流程
從數據庫到XML 文檔的反向轉換只針對有效數據,將數據庫中提取出來的數據寫入文檔,轉換流程如圖4 所示。利用GerFileName 函數獲取文件名,打開文件后,根據XML 文檔映射算法寫入Schema 格式的信息內容,然后完成轉換[13-14]。

圖4 反向轉換流程
為了驗證所設計的數據同步機制的實際應用效果,獲取國內某市醫院數據庫作為實驗數據,在Matlab 上搭建實驗平臺,創建同步信息表sync_test,包含30 個字段,記錄數據同步時間及數據完整性,結果如表1 所示。

表1 同步機制實證效果
隨著數據量級的增長,同步模型時延始終控制在5 μs 以內且無數據丟失,同步效果較好且性能優異[15-16]。
為了實現分布式數據庫多層數據同步,利用觸發器、時間戳相結合的方法增量抽取待同步數據,經過實證分析,基于XML 構建的同步模型時延較小、性能良好。但同步機制尚未實現完全自動化,所采用的技術相對比較單一,在數據庫訪問效率方面的研究還有待提升。