淺談數(shù)據(jù)庫同步
譯文【51CTO.com快譯】顧名思義,數(shù)據(jù)庫同步(Database synchronization)是指在兩個(gè)或多個(gè)數(shù)據(jù)庫之間建立數(shù)據(jù)的一致性,并且能夠自動相互復(fù)制數(shù)據(jù)記錄的更改。隨著時(shí)間的推移和信息量的增多,此類數(shù)據(jù)的協(xié)調(diào)工作應(yīng)當(dāng)被持續(xù)執(zhí)行。
從實(shí)現(xiàn)機(jī)制上說,最簡單的操作方式莫過于將數(shù)據(jù)從源數(shù)據(jù)庫(主數(shù)據(jù)庫)推送到目標(biāo)數(shù)據(jù)庫(從數(shù)據(jù)庫)。當(dāng)然,值得注意的是:同步必須基于主鍵(Primary Key)的約束。同時(shí)數(shù)據(jù)庫的結(jié)構(gòu)應(yīng)當(dāng)包含有主鍵或唯一(主)索引,而絕不是復(fù)合型(composite)的。
通常,我們會在兩到多個(gè)數(shù)據(jù)庫之間持續(xù)如下類型的同步:
- 插入同步(Insert Synchronization)
- 更新同步(Update Synchronization)
- 刪除同步(Drop Synchronization)
- 混合同步(Mixed Synchronization)
數(shù)據(jù)庫插入同步
如果目標(biāo)表中并不具有與源表相同主鍵值的適當(dāng)記錄,那么源表需要將新的記錄自動傳輸?shù)侥繕?biāo)處。也就是說:在數(shù)據(jù)庫完成同步過程后,那些缺少的記錄將被插入到目標(biāo)表的對應(yīng)位置。
下圖展示了數(shù)據(jù)庫插入同步的具體過程:
數(shù)據(jù)庫更新同步
當(dāng)源數(shù)據(jù)庫發(fā)生更改時(shí),我們必須確保在目標(biāo)數(shù)據(jù)庫中執(zhí)行適當(dāng)?shù)母摹o@然,在同步之前,我們需要先比較兩個(gè)數(shù)據(jù)庫的記錄值,然后在目標(biāo)表處替換需要更改的記錄,并在兩個(gè)表之間建立合適的標(biāo)識,以標(biāo)記更新數(shù)據(jù)庫的操作已完成。
下圖展示了數(shù)據(jù)庫更新同步的具體過程:
數(shù)據(jù)庫刪除同步
如果某些數(shù)據(jù)記錄已經(jīng)從源數(shù)據(jù)庫中被刪除,那么其對應(yīng)的記錄也需要及時(shí)從目標(biāo)數(shù)據(jù)庫中被移除。也就是說,通過檢查“刪除同步選項(xiàng)(Drop-sync option)”,那些“滯留”在目標(biāo)數(shù)據(jù)庫中的多余記錄會被及時(shí)刪除掉,以保障源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫的存儲一致性。
下圖展示了數(shù)據(jù)庫刪除同步的具體過程:
數(shù)據(jù)庫混合同步
其實(shí)在實(shí)際應(yīng)用中,上述三種同步操作從來不是孤立地存在著。為了保持兩個(gè)數(shù)據(jù)庫的相關(guān)性,我們必須在同一套操作中,對目標(biāo)數(shù)據(jù)庫的對應(yīng)行/列“打出”添加、更新、以及刪除的“組合拳”。
下圖展示了數(shù)據(jù)庫混合同步的具體過程:
在《跨數(shù)據(jù)庫轉(zhuǎn)換和同步軟件》(請參見-- https://dbconvert.com/)一文中,作者詳細(xì)介紹了如何在SQL Server、MySQL、Oracle、以及PostgreSQL等時(shí)下流行的本地?cái)?shù)據(jù)庫之間,遷移與同步各類數(shù)據(jù)與記錄的操作。當(dāng)然,此類方法也適用于AWS RDS/Aurora、Microsoft Azure SQL、以及Google Cloud SQL等云端數(shù)據(jù)庫平臺。
原標(biāo)題:What Is Database Synchronization?,作者: Dmitry Narizhnykh
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】