其实谈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)是发布者,serverB是分发者,serverC(tab1)是订阅者。
serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
Step1:serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
Step2:后来serverC tab1又添加了一个值'002',但是serverA tab1中的值并不会发生变化。
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。
这种事物复制是双向的,订阅者的更新也会反映到发布者中,发布者表结构变化或者订阅者表结构发生变化后,依然可以将数据更改体现到对方,只是表结构变化不会体现出来。这种形式实现了双向的更新,但是依然是有延迟的,那就是事务日志的延迟。
例如,serverA(tab1)是发布者,serverB是分发者,serverC(tab1)是订阅者。
serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
Step1:serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
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)
例如,serverA(tab1)是发布者,serverB是分发者,serverC(tab1)是订阅者。
serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
Step1:serverA tab1包含'001'这个值,快照Agent初次运行之后,serverC tab1中也包含'001'这个值。
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'。
综上:目前我没有看出后面三者除了原理上的其它区别,结果都是一样的。