17.9.3 数据处理语句

由于没有任何用于特定数据集的主服务器(源),因此组中的每个服务器都可以随时执行事务,即使状态发生变化的事务(RW 事务)也是如此。

任何服务器都可以在没有任何先验协调的情况下执行事务。但是,在提交时,它会与组中的其他服务器进行协调,以决定该事务的命运。这种协调有两个目的:(i)检查 Transaction 是否应该提交; (ii)并传播更改,以便其他服务器也可以应用该事务。

通过原子 Broadcast 发送事务时,组中的所有服务器都将接收该事务,否则将不会。如果他们收到了,那么相对于之前发送的其他事务,他们都将以相同的 Sequences 接收到它。冲突检测是通过检查和比较事务的写入集来进行的。因此,它们在行级别被检测到。解决冲突遵循第一个提交者获胜规则。如果 t1 和 t2 在不同的站点上同时执行,因为 t2 在 t1 之前被排序,并且都更改了同一行,则 t2 赢得了冲突,t1 中止了。换句话说,t1 试图更改已经由 t2 呈现为陈旧的数据。

Note

如果两个事务之间的冲突经常发生,那么最好在同一台服务器上启动它们。然后,他们有机会在本地锁 Management 器上进行同步,而不必稍后在复制协议中中止。