A Critique of Snapshot Isolation

正常所说的snapshot isolation只对冲突写进行约束,由于会有write skew一些问题,到不了serialization级别。

本文提出了一个新的概念write snapshot isolation的概念,区别普通的snapshot isolation,之前的snapshot isolation这里称之为read snapshot isolation

符合以下两点的事务在write snapshot isolation隔离级别下是冲突的,必须回滚一个事务:

  1. RW-spatial overlap txnj修改r,txni读取r。
  2. RW-temporal overlap Ts (txn i) < Tc (txn j) < Tc (txn i).

也就是说,两个时间上并行的非只读事务,如果先提交的事务修改了后提交事务中读取的数据,那么两个事务必须回滚一个。回滚哪个事务?应该回滚后提交的事务,因为后提交的事务可能执行时间很长。

write snapshot isolation能够达到serialization隔离级别的效果

观点:

  1. 所有写事务需要将读的数据全部缓存起来,进行比对,消耗必然非常大。
  2. 事务回滚率必然很多,与其造成大量回滚,可能效率不如直接串行化。

本文标题:A Critique of Snapshot Isolation

文章作者:Louis

发布时间:2017年10月19日 - 14:10

最后更新:2017年10月20日 - 13:10

原始链接:/2017/10/19/write-snaptshot/

许可协议: Louis-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。