肖剛



摘要:數據庫同步是實現不同系統之間數據共享的有效方法?,F有異構數據庫同步模型能有效解決記錄的同步新增,但由于同步記錄查詢基于數據表名和關鍵字值,若不考慮同步數據庫節點變化,將導致數據庫不適用于某些遺留系統。針對該問題,提出同步控制和主從記錄映射方法,在同步控制層記錄主從記錄映射關系。在采用雙向中間件方法的同步技術基礎上,設計基于標準數據格式的數據轉換,降低數據轉換模塊開發維護成本,并根據模型應用WCF框架實現系統。實踐應用表明,該模型可實現異構數庫之間同步更新。
關鍵詞:異構數據庫;數據庫同步;主從記錄映射;標準數據格式
DOI:10.11907/ejdk.182416開放科學(資源服務)標識碼(OSID):
中圖分類號:TP392文獻標識碼:A 文章編號:1672-7800(2019)010-0182-04
0引言
信息化建設具有階段性和分布性的特點,由于缺乏統一的總體建設規劃及技術水平有限等原因,企業內部各應用系統相互獨立、結構各異,采用不同的數據庫環境,缺乏統一的數據模型,系統之間數據共享困難。異構數據庫同步是實現應用系統數據共享的一種常見方法,尤其是對于遺留或無法獲取源碼的系統,在明確數據存儲結構的基礎上,即可在不修改原有系統代碼和數據庫結構的情況下實現數據共享。
為解決異構數據庫同步問題,目前主要方法有以下3種:
(1)使用數據庫廠商提供的同步功能。該方法簡單易用、可靠性高,但不同數據庫系統之間的同步無法完全實現。
(2)基于數據復制合并技術的同步方案。通過在主從數據庫之間的雙向數據交換,定期將修改的數據進行合并,該方法能有效實現主從數據的雙向交換,但需要修改主數據庫的表結構,增加數據表記錄的操作時間戳數據字段,以解決數據沖突。
(3)基于日志技術的同步方案,把對數據更新操作的更新信息保存下來,然后傳輸、轉換、重放實現數據同步,但該方案數據安全存在問題。
這些模型能有效實現新增操作記錄同步,對于記錄更新操作(修改、刪除)、同步記錄的查詢是通過匹配在同步節點數據表記錄的主關鍵字ID,并且根據當前同步配置確定同步發送的節點信息實現的,但該方法不適用于主關鍵字段復雜、節點發送動態變化的情況。
本文設計同步控制和主從記錄映射機制,通過保存主記錄的同步發送節點信息和主從記錄同步映射關系,解決同步更新中的問題。數據同步技術采用雙向中間件方法,在每兩個異構數據庫間建立一個中間件,該方法傳輸效率高,但開發成本高、難于維護、擴展性差。通過設計標準數據格式,異構數據庫基于標準數據格式進行數據轉換,可降低開發維護成本、提高擴展性。
1異構數據庫同步
異構數據庫指相關多個數據庫系統的集合,異構性包括操作系統異構、數據庫管理系統異構、數據庫表結構異構。
數據庫同步指不同數據庫之間進行數據交換,使一個數據庫中數據記錄改變以同樣方式出現在另一個數據庫中。按信息同步方向可分為單向和雙向同步。單向同步也叫主從同步,其中一個數據庫是主數據庫,另一個數據庫是從數據庫,只有主數據庫的改變可以被復制到從數據庫;雙向同步指數據庫沒有主從之分,任何一個數據庫的變化均會復制到另一個數據庫中。按傳輸模式可分為同步和異步傳輸模式,同步數據同步(實時數據同步)指實時更新數據的同步模式,異步數據同步(批量數據同步)是一種延遲數據更新的模式,數據庫間會臨時出現數據不一致,但最終會保持數據一致。
2同步模型
本文討論的異構數據庫同步限定為單向同步傳輸數據同步,同步數據單元限定為單個數據表記錄,主數據庫與從數據庫是一對多的關系,即一個主數據庫可將一個數據記錄同步到多個從數據庫。約定數據庫節點指網絡節點中的數據庫存儲,包括節點IP地址和數據庫名,主、從記錄分別指同步數據在主、從數據庫中對應的數據表記錄。
2.1現有模型同步更新存在的問題
主數據庫記錄發生更新操作時,同步更新操作需要確定:①哪些同步數據庫節點要進行更新?②同步數據庫節點中哪個記錄要進行更新?現有同步模型在這兩個問題的處理上存在問題。
2.1.1同步數據庫節點動態變化
現有模型沒有考慮同步數據庫節點變化,同步數據庫節點相對固定,但仍有可能發生變化,如果在數據更新前同步數據庫節點發生變化,則同步更新失敗。具體原因為:①增加了同步數據庫節點,由于新增數據庫節點沒有對應記錄,更新操作將導致數據庫操作異常;②刪除同步數據庫節點,數據更新操作將不能同步到被刪除的數據庫節點中,節點中對應記錄將保持不變。
2.1.2主從記錄映射
現有同步模型中,主從記錄的映射關系通過主關鍵字ID的一致性進行判斷,其前提條件是主從數據表的主關鍵字是單屬性,數據特性相同,并且在同步新增記錄時,設置從記錄的主關鍵字ID等于主記錄的主關鍵字ID,該方法不適合下列情況:①主關鍵字是自增加字段,字段值由數據庫自動生成;②主關鍵字包含多個字段,單個字段不能唯一標識記錄;③主關鍵字有自定義的構造方法,主從數據庫構造方法不同。
2.2基于標準數據格式的數據轉換
由于不同數據庫節點的數據存儲模型不同,在數據命名、數據類型、數據結構方面存在差異,數據同步需要對不同數據模型進行轉換。在雙向中間件方法的兩個異構數據庫之間直接進行數據轉換,數據同步實時更新,數據轉換效率高,但n個異構數據庫節點的雙向同步需要n*(n-1)個數據轉換模塊,增加、修改一個數據表存儲模型不僅涉及本地數據轉換模塊,還涉及所有同步節點的數據轉換模塊,導致數據庫開發維護成本高、擴展性差。
基于標準數據格式轉換的數據流如圖1所示。數據發送前,主節點將主記錄轉換為標準數據格式,從節點在更新數據前,將接收的標準數據轉換為從記錄的數據格式。這樣n個數據節點的雙向同步只需要2*n個轉換模塊,增加、修改一個數據庫存儲模型,只需開發維護新數據模型與標準數據模型的數據轉換處理模塊,其它同步節點的數據轉換模塊保持不變。標準數據格式要包含同步數據表分組中所有數據表字段,并考慮一定的擴展性,以保證數據轉換不會造成數據丟失,各同步數據表分組的標準數據格式互不相同。
2.3模型描述
同步模型分為3層:同步控制層、轉換層、傳輸層。
(1)同步控制層。管理數據同步任務啟動和數據同步更新,主節點啟動數據同步任務,保存記錄同步發送信息;從節點更新本地數據庫,保存主從記錄映射信息。
(2)數據轉換層。主節點將主記錄轉換為標準數據格式,從節點將標準格式數據轉換為從記錄的本地格式。
(3)傳輸層。將傳輸數據由主節點通過網絡發送到所有同步從節點。
主、從同步節點各層功能邏輯對應,互相協作完成主從數據庫同步。將主從同步節點互換,并增加相應的處理模塊,即可實現兩個異構數據庫的雙向同步。
2.4同步基本流程
假設主數據庫同步數據表是tm,從數據庫同步數據表是ts,如果對數據表tm進行操作(對數據表變化捕獲參考相關文獻),則數據同步基本流程如下所示。
2.4.1主節點基本流程
(1)主節點獲取表tm操作的相關信息(包括記錄關鍵字ID、操作類型)如果是新增記錄,則讀取tm的同步數據庫節點配置信息,每個同步數據節點構造一條同步發送數據并保存到同步發送表中。
(2)如果是新增或修改操作,查詢表tm,獲取記錄的實體數據并轉換為對應的標準數據格式。
(3)將實體標準數據(如果是刪除操作,標準數據為null)、同步控制數據,包括主節點IP、數據庫名、數據表名、記錄關鍵字ID、操作類型,組合成傳輸數據,查詢同步發送表獲取記錄的同步節點信息,依次調用相應數據傳輸服務代理方法,將傳輸數據發送到從節點。
2.4.2從節點基本流程
(1)接收主節點發送的傳輸數據。
(2)解析同步傳輸數據,如果操作類型是新增或修改,將標準數據轉換為對應的從記錄數據格式。
(3)如果是新增記錄,增加記錄到表ts,獲取新增同步記錄的主關鍵字ID,并將主從記錄映射關系保存到主從記錄映射表中;如果是更新記錄,查詢主從記錄映射表,獲取同步記錄在ts的對應記錄,對該記錄執行相同更新操作。
3設計與實現
設計與實現主要包括3個關鍵方面:①同步發送表設計;②主從記錄映射表設計;③數據傳輸服務。
3.1同步發送數據表
同步發送數據表保存特定表記錄的同步數據庫節點信息,為同步更新操作提供同步信息,數據表結構定義如表1所示。其中,SlaveNode記錄同步從節點IP地址,SlaveDbName記錄同步從數據庫表名,這樣同一記錄可同步到多個節點的多個數據庫中。MasterKeyId是主記錄關鍵字ID,如果主數據表主關鍵字是單屬性,MasterKeyId直接保存主記錄關鍵字ID,如果主數據表主關鍵字是多屬性,則MasterKeyld是多屬性組合,組合規則由系統自行確定,只要保證MasterKeyld的唯一性,如主數據表關鍵字屬性包括“keyl”和“key2”,自定義組合規則是在關鍵字之間加上“#”作為分隔符,則Masterkeyld為"keyl#key2”。
3.2主從記錄映射數據表
主從記錄映射數據表保存同步記錄在主數據庫節點與從數據庫節點間的對應關系,為同步更新操作提供主記錄在同步從數據庫節點中的對應記錄,數據表結構見表2。其中,MasterNode字段記錄主節點IP地址,MasterDb-Name記錄主數據庫名,則從數據庫節點可以從多個節點、節點的多個數據庫中同步更新數據。SlaveKeyId字段記錄同步記錄在從數據表中對應記錄的關鍵字值,如果從數據表主關鍵字是多屬性,處理方式與同步發送數據表相同,只需保證可從SlaveKeyId值還原出原始的多個關鍵字值。
3.3數據傳輸服務
數據傳輸可以采用不同的實現技術,如JMS、SOA、web中間件等,本文采用WCF實現數據傳輸服務。WCF(Windows Communication Foundation)是由微軟開發的一系列支持數據通信的應用程序框架,WCF以契約(Contraet)定義雙方溝通的協議。
3.3.1數據契約
數據契約(Data Contract)定義雙方信息交換的格式和內容,數據傳輸服務的數據契約包含記錄實體和同步控制數據契約。記錄實體數據契約定義記錄實體數據格式,契約成員變量與實體標準數據格式的成員變量——對應,不同實體數據契約的定義和命名不同。同步控制數據契約定義同步任務控制信息,所有同步任務的同步控制數據契約定義與命名相同,同步控制數據契約定義如下:
3.3.2服務契約
服務契約(Service Contract)定義服務向外公開的功能,服務由從節點實現,主節點調用服務代理(WCF ServiceProxy)執行。數據傳輸服務契約功能是將數據從主節點傳輸到從節點,主節點根據同步節點IP和同步數據庫名構造相應服務終結點數據。系統要為每個從同步數據庫節點定義一個服務契約接口,為數據庫每個同步數據表定義一個數據傳輸方法。
4結語
本文提出的異構數據庫同步更新方案,通過記錄同步發送和主從記錄映射數據,解決了現有同步模型中數據無法同步更新的問題,并用實例證明該同步更新方案可行。在數據存儲中,一個實體數據可能分散在不同的數據表中,每次單獨同步一個數據表會破壞實體數據的一致性,該方案可實現異構數據庫單表間同步,但還不適用于多表同步。因此下一步研究對象為多對多、一對多、多對一數據表同步。