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