天天看點

SQL Server Replication(複制) 的類别及差別

其實談Replication的種類,指的是Publication的種類,如果是從建立向導去看的話,裡面隻列出來了四個,但實際上,還可以往下細分。

1. Snapshot Replication。

這種複制是單向的,會覆寫訂閱者自行插入或更改的值,釋出者表結構變化後訂閱者表結構也會發生變化。(說白點就是以前表中有什麼,就直接做個快照,完全覆寫掉訂閱上的值)

例如,serverA(tab1)是釋出者,serverB是分發者,serverC(tab1)是訂閱者。

Step1:serverA tab1包含'001'這個值,快照Agent初次運作之後,serverC tab1中也包含'001'這個值。

Step2:後來serverC tab1又添加了一個值'002',但是serverA tab1中的值并不會發生變化。

Step3:當快照Agent又運作了一次後,會将serverC tab1 中 '002'這個值覆寫掉,是以serverC tab1 中依然還隻有'001'一個值。

2. Transaction Replication。

這種事物複制是單向的,且不會覆寫訂閱者自行插入或更改的資料,釋出者表結構變化後訂閱者表就不再會接收到釋出者釋出的内容。(說白點,就 是釋出者隻會将自己的事務日志發給訂閱者,這也就意味着訂閱者的資料你可勁折騰吧,事務日志中沒有涉及到的更改,絕對也不會展現到中訂閱者)

serverA tab1包含'001'這個值,快照Agent初次運作之後,serverC tab1中也包含'001'這個值。

Step3:向serverA tab1添加了一個值'003'。

Step4:當transaction Agent運作了一次後,會将serverC tab1 中的'003'插入到 serverC tab1中, 但是'002'這個值不會被覆寫掉,是以serverC tab1 中最終有三個值'001','002','003'。

3. Transaction Replication可以配置為Peer-to-Peer Replication。

這種形式的複制,每個節點都既是訂閱者又是釋出者。是以一旦某個節點有新的更新時,會展現到其他的節點上。這是網絡負載均衡的實作方式(NBL)。請注意,這種形式實作了雙向的更新,但是依然是有延遲的,那就是事務日志的延遲。

例如,serverA(tab1),serverB(tab1),severC(tab1)是三個節點。

Step1:serverA tab1插入'001'這個值。

Step2:serverB tab1自動被插入'001'這個值。

Step3:serverC tab1自動被插入'001'這個值。

注:延遲的時間很短,隻是處理事務日志的時間。

4. Transaction Replication with update。

這種事物複制是雙向的,訂閱者的更新也會反映到釋出者中,釋出者表結構變化或者訂閱者表結構發生變化後,依然可以将資料更改展現到對方,隻是表結構變化不會展現出來。這種形式實作了雙向的更新,但是依然是有延遲的,那就是事務日志的延遲。

Step2:後來serverC tab1又添加了一個值'002',此時serverA tab1中的值也會發生變化,即增加了一個值'002'。

Step3:向serverA tab1添加一個值'003'。

Step4:當transaction Agent運作了一次後,會将serverC tab1 中的'003'插入到 serverC tab1中, 但是'002'這個值不會被覆寫掉,是以serverC tab1 中最終有三個值'001','002','003',serverA tab1中也是有三個值'001','002','003'。

注:包含兩個更新類型,Immediate updating(立即更新)和Queued updating(排隊更新)

5. Merge Replication。

這種複制也是雙向的,但原理不是事務日志,而是觸發器(trigger)

Step2:後來serverC tab1又添加了一個值'002',但是serverA tab1中的值也會發生變化,即增加了一個值'002'。

Step4:當transaction Agent運作了一次後,會将serverC tab1 中的'003'插入到 serverC tab1中, 但是'002'這個值不會被覆寫掉,是以serverC tab1 中最終有三個值'001','002','003',serverA tab1 中最終也有三個值'001','002','003'。

綜上:目前我沒有看出後面三者除了原理上的其它差別,結果都是一樣的。