摘 要: 針對多源異構環境下數據的特點,提出一種數據同步復制新方案。該方案解決了多源異構環境下數據庫的訪問,數據的獲取與復制,動態數據源的處理以及同步過程中數據沖突與同步的實時性等問題。最后將所提出的方案應用于某省高速公路車輛監控系統中,達到了實際應用要求,表明了該方案的正確性與有效性。
關鍵詞: 多源異構;數據同步復制;動態數據源;數據沖突
0 引言
隨著計算機技術的不斷發展,各種不同數據結構類型的數據庫深入到不同的應用領域,尤其是那些地域上分散而管理上又相對集中的跨地域集團公司或者企業單位[1]。雖然使用數據同步技術可以提高數據信息的集中管理,提高整個分布式數據庫系統的響應速度和可靠性[2],但是由于數據的異構性和多樣性,數據同步復制仍存在許多問題。本文針對數據同步復制中出現的問題,提出了一種多源異構數據同步復制的方法,該方法可以解決不同類型數據庫之間的訪問、數據的實時獲取與復制、同步過程中數據沖突以及實際應用中數據源動態產生的處理、系統中斷數據丟失等問題。
1 多源異構數據同步復制技術
1.1 傳統的數據同步復制技術
傳統的分布式數據同步復制就是由數據庫自身同構復制技術實現的,當源表發生變化時,由數據庫引擎引發同步事件,把源表中變化的數據同步更新到目標數據庫中,但是這種復制技術只能在同構數據庫之間使用[2]。
目前各數據庫開發商在各自的數據庫同構復制的基礎上提出了異構數據庫的復制方案,例如Microsoft SQL Server提出了出版者/預訂者同步方案[3-6],Oracle中采用多主復制和物化視圖的方案來實現數據同步的功能[4-6],DB使用CCD表來實現異構數據庫之間的復制。雖然各廠商研發出輔助工具更好地完善了數據同步復制的功能,但是復制方案仍依賴于自己的數據庫管理系統(Database Management System,DBMS)核心技術,不能保證完全與DBMS無關。
1.2 多源異構數據的同步復制
通常情況下,多源異構數據所在的分布式網絡結構如圖1所示。圖中下級數據庫存在多個且分布在不同的物理位置上,它們的表結構甚至采用的系統也不一樣。
與傳統數據同步相比,多源異構數據的同步復制存在如下幾個難點:(1)多個下級服務器的數據庫會因為使用各種不同的數據模型來表示和存儲數據,導致數據格式的混亂,訪問接口獨立。(2)需同步復制的下級數據源是動態的,比如下級數據庫中某些表是按日或月動態生成的。(3)某些情況下,不能對下級數據庫的表結構進行任何改變。當表是動態生成時,無法修改表結構因此不能利用數據庫本身的復制功能。(4)同步過程中能對重復的數據進行過濾并進行沖突處理。
2 多源異構數據同步復制方案
從多源異構環境下的數據同步特點可以看出,數據同步復制要解決的問題包括:(1)異構數據庫的訪問;(2)數據的獲取與復制;(3)動態數據源的處理;(4)數據沖突與同步實時性。
2.1 異構數據庫的訪問
當前主流的數據庫類型有SQL Server、Oracle、Mysql、DB2D等。針對不同類型的數據庫,本文采用ADO技術訪問數據庫,其連接數據庫的形式為:“Provider=SQLOLEDB.1/SQLNCLI10.1;Data Source=%s;Presist Security Info=False;User ID=%s;Password=%s;Initial Catalog=%s”,其中:Provider針對數據源不同,可選擇SQLOLEDB.1和SQLNCLI10.1兩種驅動方式。
2.2 數據的獲取與復制
數據的獲取與復制指從下級源數據庫中讀取數據,然后將所讀取的數據復制到上級數據庫中并標記同步完成的過程。根據下級數據源中表結構有可修改與不可修改兩種情況,分別設計方案:
(1)表結構可修改時,在下級數據庫的表中增加新字段int sendok,并設置字段的默認值為0。每同步成功一條數據,將sendok字段的值設置為1,若沒有同步成功,仍設置為0,其流程圖如圖2所示。
(2)表結構不允許修改時,在上級數據庫中新建輔助表來記錄下級數據庫的同步操作過程。設置同步跟蹤記錄的表名為Track,表中字段定義如表1所示。
在同步過程中,下級數據庫中的數據是不斷更新的,需要設置定時同步復制機制來完成同步。首先需要獲取當前的系統時間和最近一次上傳的結束時間,若當前系統時間小于上次上傳的結束時間,則放棄本次更新,等待下次更新。若當前系統時間大于上次結束時間,則進行該時間段內新數據的同步操作。同步后,判斷此次操作是否成功,成功置1,否則置0,并在追蹤表中記錄操作,流程圖如圖3所示。
2.3 動態數據源的處理
在下級數據庫中,由于不同數據庫中表的創建方式不同,有些下級是按日或按月來動態生成新表,會增加上級對下級數據源的查找難度,此時需根據表形成的規律來查找。例如有些數據源中表是以固定字符加年月日作為表名,需獲取表的名稱,再根據表形成的規律自動拼裝來獲取日期信息。同步復制前,系統需要檢測是否有新表,若存在新表則進行數據同步的操作,不存在則退出。
2.4 數據沖突與同步實時性
與傳統數據同步復制不同,多源異構下的數據沖突主要是由于網絡異常造成的重復同步,以及為了保證數據一致性而不斷檢查與復制下級數據源等造成的。因此在設計上級數據庫中表的屬性時,設定表的主鍵,對每條數據同步時先檢查相同主鍵的記錄是否存在,如果存在則返回。
同步的實時性取決于數據上傳的時間間隔,時間間隔越短,實時性越好,但計算機與網絡負荷越大;反之,實時性差,計算機與網絡負荷就小。為了解決這個矛盾,可采用動態緩存機制提高同步的實時性,即將已同步數據的主鍵及關鍵字段信息,動態地保存在內存緩存中,從而有效地減少了計算機與網絡的負擔。
3 多源異構下數據同步復制技術的應用
為了驗證所提出方案的正確性和有效性,結合某省高速公路車輛監控系統的數據同步任務進行實際應用研究。
在高速公路網絡系統中,收費站出入口以及眾多斷面節點基本實現了全線無盲點監控,各個地點的子系統均記錄了所經車輛的車牌、時間、車型等流水信息。為了實現對車輛在整個交通網絡中運行情況的監控,首要的任務就是將這些分散于各子系統的車輛流水數據實時同步復制到一個中心數據庫中。
3.1 軟件的設計
通過分析,高速公路系統數據源可歸納為三類:收費站、主線卡口和服務區,其特點如下:(1)存在的數據庫管理系統有SQL Server 2000、SQL Server 2008、Oracle 9i;(2)數據存放的方式多樣,包括單一表、按月生成表、按日生成表等;(3)有些表結構可修改,有些表結構不能修改,比如按月生成表的情況,因此無法獲得生成表的源代碼。
為了實現對以上情況的靈活處理,軟件以XML格式的方式配置數據源的情況,同時利用多線程技術實現對多個數據源的同時處理,整個軟件的總體結構如圖4所示。
3.2 系統實現
高速公路車輛數據采集系統提供對全線各子系統中的車輛流水數據的實時收集功能,即實現對各個分散數據源的異構數據的同步復制。該軟件系統以Visual C++語言進行開發,利用本文提出的多源異構下數據同步復制方案,并結合多線程技術提升軟件的運行效率。整個系統的運行界面如圖5所示。
從圖5可以看出,該系統可同時將多個下級數據源的數據同步復制到一個上級數據庫服務器中,實現對車輛流水數據的集中整合。該系統經實際測試,已實現了23 h不間斷運行,數據同步復制未發現多出一條記錄或者少一條記錄,數據正確率100%,在系統可靠性與數據完整性方面均達到了數據同步復制的要求。
4 結論
本文針對多源異構數據同步的實時性、可靠性、通用性的需求進行了研究,提出了一種數據同步復制方案,解決了異構環境下數據庫之間數據共享的問題,并結合高速公路監控系統的實際項目進行了測試,驗證了該方案具有可實用性并取得了預期的效果。
參考文獻
[1] 胡金龍,許衛,房福龍.異構數據庫同步復制技術研究與實現[J].長江科學院院報,2011,6(28):71-75.
[2] 王婉菲,張志浩.分布式數據庫系統的復制機制及應用[J].計算機工程與科學,2003,25(1):88-91.
[3] 楊鵬.異構數據庫同步中間件技術的研究與實現[D].長沙:國防科學技術大學,2007.
[4] 趙中華.基于XML的異地異構數據庫的數據同步技術的研究[D].濟南:山東輕工業學院,2009.
[5] 譚德才.基于郵件系統的遠程異構數據庫同步的設計與實現[D].廣州:華南理工大學,2010.
[6] 姜亦學.分布式數據庫系統同步技術研究[D].長春:長春理工大學,2008.