快照隔离

快照隔离(snapshot isolation,SI)是数据库事务处理中的一个隔离级别,保证事务的读操作将看到一个一致的数据库的版本快照(实际上读取比该事务早的最后一次提交值)。该事务的写操作成功提交,仅当基于该快照的任何并发修改与该事务的修改没有冲突(即写-写冲突)。

很多重要的数据库管理系统已经采用了快照隔离,如InterBase, Firebird, Oracle, MySQL, PostgreSQL, , MongoDB 与 Microsoft SQL Server(从2005)。原因是快照隔离比可串行性隔离级别的性能更好,且能避免绝大多数并发异常。快照隔离一般用多版本并发控制(MVCC)实现。快照隔离避免了ISO SQL-92所列举的并发异常现象,但不是SQL-92定义的无并发异常的可串行化。

定义
事务在启动时得到一个数据库的版本号。事务结束时,成功提交仅当它修改的快照的数据项此时没有被外界改变,即没有,否则事务流产(abort)。

写偏斜(write skew)异常,是指两个事务(T1与T2)并发读取一个数据集(例如包含 V1 与 V2),然后各自修改数据集中不相交的数据项(例如 T1 修改 V1, T2 修改 V2),最后并发提交事务。如果事务是串行执行,这种异常不会发生。而快照隔离允许这种异常发生。例如,设想 V1 与 V2是 Phil的个人银行账户。银行允许V1或V2是空头账户,只要两个账户总和非负(即 V1 + V2 ≥ 0). 两个户头的初值各是 $100. Phil启动两个事务,T1从V1取出$200,T2从V2取出$200。

解决写偏移异常的两种策略:
*实现写写冲突:增加要给专门的冲突表,两个事务都修改它。
*提升:一个事务修改它的只读数据行(替换其值为一个相等的值)从而导致一个写-写冲突,或者使用等价的提升:SELECT FOR UPDATE语句。

在上述例子中,可以重建一个表,记录每个储户与其总金额。但这种方法违背了数据库范式。另一种方式把一个事务的读数据提升为写数据,如T2做V1 = V1。但这种操作不总是可能的。

历史
快照隔离源自多版本并发控制数据库。,并带有写偏移异常。

ANSI SQL-92标准基于数据库锁机制,对MVCC系统缺乏认识。已经被PostgreSQL 9.1采用
这被称作"Serializable Snapshot Isolation", SSI.

2011, Jimenez-Peris等人申报专利可以解决每秒上千万次事务提交的快照隔离,成为超大规模并发数据库引擎LeanXcale的基础 . 2010成为CumuloNimbo European Project的部分 .
参考文献
进一步阅读

  • Bettina Kemme , Gustavo Alonso, [http://doi.acm.org/10.1145/363951.363955 A new approach to developing and implementing eager database replication protocols], ACM Transactions on Database Systems (TODS), v.25 n.3, p.333-379, Sept. 2000.
  • Gerhard Weikum, Gottfried Vossen, Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery, Morgan Kaufmann, 2002,
  • Yi Lin, Bettina Kemme, Marta Patiño-Martínez, Ricardo Jiménez-Peris. [https://doi.org/10.1145/1066157.1066205 Middleware based data replication providing snapshot isolation]. Proceedings of the 2005 ACM SIGMOD international Conf., 2005.
  • Marta Patiño-Martinez, Ricardo Jiménez-Peris, Bettina Kemme, Gustavo Alonso. [https://doi.org/10.1145/1113574.1113576 MIDDLE-R: Consistent database replication at the middleware level]. ACM Transactions on Computer Systems (TOCS). Volume 23 Issue 4. Pages 375-423.
  • Khuzaima Daudjee, Kenneth Salem, Lazy Database Replication with Snapshot Isolation, VLDB 2006: pages 715-726

评论 (0)

  • 还没有评论,来抢沙发吧。