數據庫同步軟件DBSync的設計與實現
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
DBSync是一款數據庫同步軟件,支持各種數據庫之間的同步,支持增量同步。本文分享該軟件的產品淵源、設計思想、技術要點、功能特征、使用方法,最后分析其優缺點,供IT技術人員參考,也歡迎大家提供寶貴意見,促進我們持續進步。 閱讀本文,用時大約15分鐘。 附件下載:dbsync.zip 1、產品淵源早在2003年,我們在企業信息化的過程中,就經常遇到系統對接問題。很多客戶的一些老舊軟件,不方便廢棄,又想將其中的數據匯集到我們的信息管理平臺,借助平臺實現集中查詢、外網查詢、手機查詢等。有些則是反方向的,借助平臺實現外網錄入、手機錄入,再將數據從平臺同步到現有系統。 搜遍各大網絡,未找到適合的。有些數據庫雖然有同步工具,但只支持同型數據庫之間的同步,不支持異型同步。而華創平臺是通用型的,客戶對它的用途五花八門,需要對接的系統也就多種多樣,數據庫的也就多種多樣,因此需要能夠異型同步。另外,很多同步工具的配置過程過于復雜,普通用戶難以掌握。 為此,我們專門開發了一款同步軟件,作為平臺的配套工具,提供給客戶使用,且力求簡單易用。經過多年的實踐發現,越來越多的客戶,即使不使用平臺也有同步需要,于是,我們于2018年開始對它進行改造,將它獨立出來,經過不斷完善,形成現在的DBSync,于2019年正式對外推出,并提供永久免費版。 2、設計思想數據庫之間的同步,一般是利用事務日志來實現的,它的工作原理是:讀取源數據庫的事務日志,找到最近執行過的事務,將這些事務傳遞至目標數據庫,在目標庫也執行一遍,使得源庫、目標庫都執行了同樣的事務、產生同樣的變化,從而使雙方始終保持一致。 不同的數據庫系統,其事務日志的格式就不相同的,因此,按照這個思路設計的軟件,一般只適用于特定數據庫。 DBSync跳出這個思路,不再依靠事務日志,而是直接訪問事務執行的結果,也就是數據本身。通過掃描比較雙方數據,找到相互間的差異,再將差異部分同步過去,從而使雙方始終保持一致。 按照這個設計思想,DBSync就有廣泛的適用性,支持各種數據庫。因為,無論哪種數據庫,無論內部怎么工作,其結果無非就是數據。我們只需要關注數據差異,找到差異并同步過去,就可以了。 3、技術要點一款軟件的設計開發,會涉及很多技術細節,這里僅列出與同步有關的技術要點。 ●通過連接字符串連接數據庫,允許用戶自己填寫連接字符串。這樣,DBSync就能連接各種數據庫,因為幾乎所有數據庫都可以使用OLEDB或ODBC進行連接。 ●在用戶操作界面上,為常見數據庫提供連接字符串范例。用戶可以在范例的基礎上,修改其中的IP地址、用戶名、密碼等個性值,得到自己的連接字符串,從而減輕用戶撰寫難度。 ●同步的基本單位是任務,一個任務負責一對數據表之間的同步。如果多個數據表、多個數據庫之間需要同步,分別為它們設置任務,形成多個任務,即可。 ●同步任務采取線程的方式運行,由于線程是可并發執行的,因此DBSync可同時執行多個同步任務。 ●任務可設置select查詢語句,用于限定參與同步的數據范圍;可設置update語句,用于同步后的額外處理。 ●主程序負責3個方面:一是與用戶的交互,包括:任務的增、刪、改,任務的手工啟動與停止;二是監視任務的執行情況,實時顯示同步進度信息;三是負責任務的定時自動啟動,實現無人值守同步。 ●兼顧性能與可靠性,更新目標數據庫時,采用事務進行提交,每逢10000條更新提交一次,不足10000條的,一次性提交。 4、功能特征根據以上設計思想及技術方案,DBSync具有以下功能特征: ●非侵入式,獨立運行 無需改動現有數據庫,無需注入腳本或觸發器,不增加數據庫負荷,只需連接上即可同步,獨立運行,簡單易用。 ●支持各種數據庫 既支持常規數據庫,如Access、SQL Server、MySQL、Oracle、DB2等,又支持Excel、txt、csv等文件,任何可用OLEDB或ODBC連接的數據,均可參與同步。 ●支持異構數據庫同步 既支持同型數據庫之間的同步,如Access到Access,MySQL到MySQL,又支持異型數據庫同步,如Access到SQL Server、SQL Server到MySQL、MySQL到Oracle等。 ●支持跨平臺、跨地域同步 既支持同構平臺之間的同步,如Windows到Windows,Linux到Linux,又支持跨平臺同步,如Windows到Linux,Linux到Unix等,支持異地同步。 ●支持增量同步 既支持簡單的全部復制式同步(insert),又支持增量同步。軟件能快速掃描數據庫,找出相互間的差異數據(即增量),只對增量進行同步。 ●支持雙向同步 參與同步的數據表,可根據需要分成多個區塊,各區塊分別指定同步方向,實現整體上的雙向同步,能滿足分布式系統的同步要求。 ●支持二進制字段 有些字段的數據類型為binary、byte[]、image、object等,它們是用于存放圖片、文件等二進制數據的,這類字段也可進行同步。 ●支持同步后處理 可設置同步后需要執行的SQL語句,實現同步后的額外處理,如數據轉換、公式計算等。 ●可以先比較再同步 實施同步前,可以先比較,找出相互間的差異,列出具體的差異數據,以便核對變更情況,確定無誤后再同步。 ●無人值守同步 具有定期自動同步功能,只需預先設置好時間間隔,就可長期自動同步;支持系統重啟后自動恢復同步,防止因系統重啟而停止,實現無人值守同步。 ●秒級實時同步 重復同步的時間間隔最短可設置為1秒,源數據庫發生變更后,1秒后就同步過去,幾乎等同于實時同步。 ●異常提醒通知 具有提醒通知功能,每當任務執行出現異常,可Email通知當事人,方便您及時排錯。 5、使用方法本軟件綠色運行,不需要安裝。先下載本軟件:dbsync.zip,下載后,解壓至本地目錄,Click其中的DBSync.exe即可運行。 5.1主界面介紹 軟件啟動后進入主界面,顯示同步任務列表,如下圖所示: 說明: ●新增任務:Click右上角的“新增”按鈕,可新增一個任務。 ●刪除任務:Click右上角的“刪除”按鈕,可刪除一個任務。 ●數據比較:Click任務列表中的“○”按鈕,可比較雙方數據。 ●開始同步:Click任務列表中的“►”按鈕,開始同步。 ●中止同步:Click任務列表中的“■”按鈕,中止正在進行的同步。 ●執行狀態:實時顯示同步進度,包括:已掃描的記錄數、已增、刪、改的記錄數。 ●開始時間、結束時間、下次開始時間:顯示每個任務的執行時間。 ●日志:Click任務列表中的“查看”按鈕,可查看該任務的操作日志、同步日志。 ●設置:Click任務列表中的“設置”按鈕,可修改任務設置。 5.2任務設置界面 要比較與同步數據,必須先設置一個任務,在任務里指定參與同步的數據庫、數據表,字段對應關系,以及同步方式、同步頻度等。Click主界面上的“新增”按鈕,即可進入新增任務的Step1界面。 Step1:連接源數據庫、目標數據庫 說明:本界面的用途是設置源數據庫及目標數據庫的連接字符串,以便連接數據庫,其中打星號(*)的是必填欄位。數據庫所在的平臺以及數據庫本身,無論是同型還是異型,也無論是本地還是異地,只要網絡是通的,只要DBSync能連接上,就能同步。 填寫完成后,請Click標簽2,進入Step2。 Step2:選擇源數據表、目標數據表 說明:本界面的用途是選擇源數據表及目標數據表。 選擇完成后,請Click標簽3,進入Step3。 Step3:設置字段對應關系 說明:本界面的用途是設置字段對應關系。如果您需要做增量同步,這里必須選擇主鍵字段,主鍵字段是記錄的唯一標識,用于判別同步雙方是否存在對應記錄。 選擇完成后,請Click標簽4,進入Step4。 Step4:設置同步方式及頻度 說明:本界面的用途是設置同步方式、同步頻度,以及其它高級選項。 (1)同步方式: ●全部新增(insert)至目標表:是指將源數據表中的數據全部insert到目標數據表。 ●僅同步增量數據:是指以主鍵字段為記錄標識,只同步差異數據(即增量),而相同的數據不同步。增量分三種: 一是新增,是指源數據表存在而目標表不存在的記錄,視作源數據表新增的,因此該記錄應新增(insert)到目標表; 二是刪除,是指源數據表不存在而目標數據表存在的記錄,視作源數據表已刪除,因此目標表也應隨之刪除(delete); 三是修改,是指源數據表與目標數據表均存在的記錄,但雙方數據有差異,視作源庫已做修改,因此需用源數據表的數據修改(update)目標表。 需要注意的是,主鍵字段值應該非空且全局唯一,同步時如遇到空或者重復的主鍵值,將直接跳過,不作處理。 (2)執行頻度: ●手動點擊“開始”執行:是指每次同步都由用戶Click任務列表中的“►”來執行。 ●手動,然后自動重復執行:是指由用戶Click“►”開始同步,完成后,程序會按照預定的時間間隔自動重復執行。只要程序不關閉,同步就會一直持續下去,從而實現長期自動同步。 (3)同步范圍: 可填寫select * from...where... 形式的 SQL 語句,限定參與同步的數據范圍。 (4)同步后處理: 可填寫 update SQL 語句,每次同步后,程序會執行該SQL 語句,可實現同步后的額外處理,如數據轉換、公式計算等。 各步驟完成后,Click頁面底部的“保存”按鈕,任務列表就會新增一個任務。 5.3數據比較界面 設置好同步任務后,Click任務列表中的“○”按鈕,進入掃描與比較界面,如下圖所示: 說明:本界面的用途是比較雙方數據,找出差異數據(即增量),并逐條列出增量數據。Click右上角“開始”按鈕即開始比較。對于修改增量,標識為紅色的字段值代表已發生修改,移動鼠標過去能顯示修改前的原值。 5.4操作日志界面 Click任務列表中“日志”列的“查看”按鈕,進入操作日志界面,如下圖所示: 說明:本界面的用途是顯示任務的操作日志、同步日志,用于追索其歷史。Click右上角“刪除”按鈕,可刪除該任務的日志。 6、優缺點分析基于數據比較的設計思想,使得DBSync能夠支持各種數據庫之間的同步,支持異構同步,且簡單易用,這些優點前文已有說明,不再贅述。 另一個優點是非常穩定可靠。因為同步任務是定期重復執行的,每次都會進行數據比較,所以即使偶爾發生網絡故障、數據庫宕機等,問題都不大,故障排除后,它能照常繼續工作,不會有什么遺漏。不像事務日志模式,日志一旦損壞或丟失,就很麻煩。 常言道,有得必有失,這種設計有2個弊端: 一是,只能同步數據,不能同步庫結構、存儲過程、觸發器等。所幸的是,如果需要修改庫結構,往往也需要修改程序,這2者是相互配套的,是需要一起做的,所以,大部分情況下人工操作更合適。 二是,由于需要掃描比較數據,如果數據量很大,同步速度會較慢,但這個可以通過增量范圍限定、分類處理進行提速。具體提速方法,請看用戶手冊第5.4章節。實際測試結果表明:記錄數為百萬級的數據同步,能在數秒內完成掃描;千萬級的,約1分鐘完成;億級的,約數分鐘完成。 結論:對于實時性要求高的場合,如毫秒級的同步,DBSync無法勝任。其它大部分數據同步場合,如系統對接、數據熱備份、讀寫分離等,DBSync是適用的。 該文章在 2023/9/15 16:31:53 編輯過 |
關鍵字查詢
相關文章
正在查詢... |