该标准按照三种很是现象将隔离性定义为多个级别,该规范根据三种非凡现象将隔离性定义为八个级别

写在前边

近两年分布式数据库技术加速发展,而出于金融行业技术生态的界定,周围众多同桌对其并没有长远的刺探,所以举行高性能、高可相信系统规划时往往不够这一利器。伊凡(Ivan)希望以种类文章的点子与大家调换钻探,加深大家对分布式数据库的认识。本文是该连串文章的第一篇,主要探索事务管理中的隔离性,厘清相关概念和关键技术,为前边演讲分布式数据库的事务管理做一个掩映,姑且算是一篇前传吧。


写在面前

近两年分布式数据库技术加快发展,而出于金融行业技能生态的界定,周围众多同学对其并没有深远的刺探,所以举行高性能、高可看重系统规划时屡屡缺乏这一利器。伊凡(Ivan)希望以多重小说的办法与大家互换探究,加深我们对分布式数据库的认识。本文是该系列小说的第一篇,首要探索事务管理中的隔离性,厘清相关概念和关键技术,为后边演说分布式数据库的事务管理做一个铺垫,姑且算是一篇前传吧。


正文

大家首先从概念出发,事务管理包含原子性、一致性、隔离性和持久性八个地方,即ACID。所有数据库专著都会交到这一个三个特性的概念,本文我们引用了吉姆格雷对其的定义。

吉姆格雷(Gray)是事务处理方面的大师,本文中众多情节都来自他的专著和杂谈。为防止翻译引入的歧义,那里我们一贯引用原文。

Atomicity: Either all the changes from the transaction occur
(writes, and messages sent), or none occur.

Consistency: The transaction preserves the integrity of stored
information.

Isolation: Concurrently executing transactions see the stored
information as if they were running serially (one after another).

Durability: Once a transaction commits, the changes it made
(writes and messages sent) survive any system failures.

在上述隔离性(Isolation)的概念中,大家得以窥见其目的是使并发事务的进行职能与串行一致,但在切实可行技术完成上往往需求在出现能力和串行化效果之间进行平衡,很难两者兼顾。平衡的结果就是会产出违背串行效果的气象即很是现象(Phenomenon)。平时来说,隔离级其他升官伴随着出现能力的暴跌,两者负相关。种种数据库在谈到隔离级别时都会引用ANSI
SQL-92标准隔离级别,大家来探望它的具体内容。

正文

大家率先从概念出发,事务管理包涵原子性、一致性、隔离性和持久性八个地点,即ACID。所有数据库专著都会提交这些三个特征的定义,本文我们引用了吉米格雷对其的概念。

Jim格雷(Gray)是事务处理方面的活佛,本文中广大内容都源于她的专著和舆论。为防止翻译引入的歧义,这里我们间接引用原文。

Atomicity: Either all the changes from the transaction occur
(writes, and messages sent), or none occur.

Consistency: The transaction preserves the integrity of stored
information.

Isolation: Concurrently executing transactions see the stored
information as if they were running serially (one after another).

Durability: Once a transaction commits, the changes it made
(writes and messages sent) survive any system failures.

在上述隔离性(Isolation)的定义中,我们可以窥见其目的是使并发事务的实践听从与串行一致,但在切实技术落成上反复需要在出现能力和串行化效果之间展开平衡,很难两者兼顾。平衡的结果就是会并发违背串行效果的现象即很是现象(Phenomenon)。寻常来说,隔离级其他升官伴随着现身能力的大跌,两者负相关。种种数据库在谈到隔离级别时都会引用ANSI
SQL-92标准隔离级别,大家来看看它的具体内容。

ANSI SQL-92 Isolation Levels

ANSI
SQL-92可能是最早提议了依据格外现象来定义隔离级其余措施,同时没有将割裂级别与实际落到实处机制绑定,隔离的兑现可以根据锁(lock-based)或者无锁(lock-free),兼容了持续的技艺发展。该专业依据三种格外现象将隔离性定义为三个级别,具体如下。

图片 1

脏读,事务(T1)中修改的数量项在尚未提交的景况下被其余工作(T2)读取到,而T1举行Rollback操作,则T2刚刚读取到的数码并不曾实际存在。
不可重复读,T1读取数据项,T2对其中的数额开展了改动或删除且Commit成功。即使T1尝试再次读取那么些数量,会收获T2修改后的多寡仍旧发现数目已删除。那样T1在一个事务中三遍同样条件的读取,且结果集内容变更或结果集数量减小。
幻读,T1使用一定的查询条件得到一个结实集,T2插入新的数目且那几个数量符合T2刚刚操作的询问条件。T2
commit 成功后,T1再度实施同一的询问,此时收获的结果集增大。

不少篇章都构成数据库产品对上述极度现象的实例和拍卖体制举行了注解,本文中不再赘述,有趣味的同窗可以参考文末的链接[1]。

ANSI
SQL-92标准早在92年披露,但无论当时仍然新兴都没有被各大数据库厂商严谨依照,部分原因或者是专业过于简化与实际运用有一定程度的淡出。吉米格雷等人在1995公布了舆论“A Critique of ANSI SQL Isolation Levels”
(本文中简称为Critique[2])对隔断级别举办更宏观的阐释,可以辅助大家深化精晓。

ANSI SQL-92 Isolation Levels

ANSI
SQL-92可能是最早提议了依照非凡现象来定义隔离级其余艺术,同时没有将割裂级别与具体落到实处机制绑定,隔离的落实可以根据锁(lock-based)或者无锁(lock-free),包容了后续的技巧提升。该规范依据三种至极现象将隔离性定义为多少个级别,具体如下。

图片 2

脏读,事务(T1)中修改的数额项在尚未提交的情事下被其它工作(T2)读取到,而T1进行Rollback操作,则T2刚刚读取到的多寡并从未实际存在。
不可重复读,T1读取数据项,T2对中间的数据开展了修改或删除且Commit成功。假设T1尝试再度读取那一个数量,会拿走T2修改后的数码或者发现数目已去除。那样T1在一个工作中两遍同样条件的读取,且结果集内容改动或结果集数量缩减。
幻读,T1使用一定的查询条件得到一个结果集,T2插入新的多少且这一个多少符合T2刚刚操作的查询条件。T2
commit 成功后,T1再度实施同一的询问,此时获取的结果集增大。

众多稿子都整合数据库产品对上述很是现象的实例和处理机制举行了求证,本文中不再赘言,有趣味的同室能够参考文末的链接[1]。

ANSI
SQL-92标准早在92年揭橥,但不论是当时如故新兴都并未被各大数据库厂商严厉按照,部分缘由或者是正规过于简化与实际使用有肯定水准的退出。吉米格雷(Gray)等人在1995宣布了杂谈“A Critique of ANSI SQL Isolation Levels”
(本文中简称为Critique[2])对隔断级别进行更周密的演讲,可以协理大家深化精晓。

Critique Isolation Levels

Critique提议了ANSI
SQL-92存在的多少个问题,首先是自然语言方式界定的相当现象并不严厉导致有的同质化的非常现象被遗漏;其次是一对超人的十分现象并从未被含有进去,导致隔离级别存在显然缺欠。由此,文中对ANSI
SQL-92的三种非常现象(将其编号为A1/A2/A3)举行了扩张(编号为P1/P2/P3),并追加了其余5种常见的非常现象。受限于篇幅,那里仅对三种格外现象进行验证。

Critique Isolation Levels

Critique指出了ANSI
SQL-92存在的三个问题,首先是自然语言格局界定的非常现象并不严峻导致有些同质化的万分现象被遗漏;其次是有的天下无双的很是现象并从未被含有进去,导致隔离级别存在鲜明不够。由此,文中对ANSI
SQL-92的二种至极现象(将其编号为A1/A2/A3)进行了扩张(编号为P1/P2/P3),并增加了其它5种普遍的十分现象。受限于篇幅,那里仅对二种极度现象举办认证。

Lost Update

丢失更新(Lost
Update)是一个经典的数据库问题,由于太过重点所有主流数据库都解决了该问题,大家那边将操作稍加变形来比喻。

俺们使用MySQL举办出现说法,成立表并初始化数据

create table account (balance int,name varchar(20)) ENGINE=InnoDB;
insert into account values(50,'Tom');
T1 T2
begin; begin;
select balance into @bal from account where name='Tom'
——————–
@bal = 50
select balance into @bal from account where name='Tom'
——————-
@bal = 50
update account set balance = @bal -40 where name = ‘Tom’;
commit;
update account set balance = @bal - 1 where name = ‘Tom’;
commit;

在上述操作中T1、T2串行执行职能是对余额举办四遍扣减,分别为40和1,最后值为9,但相互的结尾值为49,T2的改动被丢掉。我们得以窥见Lost
update的真相是T1事务读取数据,而后该数额被T2事务修改并交由,T1基于已经过期的多少举行了再一次修改,造成T2的改动被遮住。

Lost Update

不见更新(Lost
Update)是一个经文的数据库问题,由于太过首要所有主流数据库都解决了该问题,我们那里将操作稍加变形来比喻。

大家运用MySQL举行出现说法,创设表并初叶化数据

create table account (balance int,name varchar(20)) ENGINE=InnoDB;
insert into account values(50,'Tom');
T1 T2
begin; begin;
select balance into @bal from account where name='Tom'
——————–
@bal = 50
select balance into @bal from account where name='Tom'
——————-
@bal = 50
update account set balance = @bal -40 where name = ‘Tom’;
commit;
update account set balance = @bal - 1 where name = ‘Tom’;
commit;

在上述操作中T1、T2串行执行出力是对余额进行三次扣减,分别为40和1,最后值为9,但相互之间的末尾值为49,T2的改动被丢掉。大家得以窥见Lost
update的面目是T1事务读取数据,而后该数据被T2事务修改并付诸,T1基于已经过期的多寡进行了双重修改,造成T2的改动被掩盖。

Read Skew

读偏序(Read
Skew)是RC级蒙受的题目。如若数额项x与y存在一致性约束,T1先对读x,而后T2修改x和y后commit,此时T1再读y。T1获取的x与y不满意原有的一致性约束。

MySQL默许隔离级别为RR,我们须要手工安装为RC并初阶化数据

set session transaction isolation level read committed;
insert into account values(70,'Tom');
insert into account values(30,'Kevin');
T1 T2
begin; begin;
select * from account where name=’Tom’;
———————
balance name
70 Tom
select * from account where name=’Tom’;
———————
balance name
70 Tom
update account set balance = balance - 30 where name='Tom';
update account set balance = balance + 30 where name=’Kevin’;
commit;
select * from account where name='Kevin';
———————
balance name
60 Kevin
commit;

起来数据汤姆(Tom)与凯文(Kevin)的账户合计为100,在T1事务内的一回读取得到账户合计为130,明显不切合以前的一致性约束。

补给这个非常现象后,Critique给出了新的矩阵,相比ANSI越发全面也更贴合真实的数据库产品。

图片 3

主流数据库考虑到串行化效果与产出性能的平衡,一般默许隔离级别都在于RC与RR之间,部分提供了Serializable。尤其提示,无论ASNI
SQL-92依旧Critique的割裂级别都不可以有限协理直接照射到实在数据库的同名隔离级别。

Read Skew

读偏序(Read
Skew)是RC级碰到的问题。如果数量项x与y存在一致性约束,T1先对读x,而后T2修改x和y后commit,此时T1再读y。T1得到的x与y不满意原有的一致性约束。

MySQL默许隔离级别为RR,大家须求手工安装为RC并初阶化数据

set session transaction isolation level read committed;
insert into account values(70,'Tom');
insert into account values(30,'Kevin');
T1 T2
begin; begin;
select * from account where name=’Tom’;
———————
balance name
70 Tom
select * from account where name=’Tom’;
———————
balance name
70 Tom
update account set balance = balance - 30 where name='Tom';
update account set balance = balance + 30 where name=’Kevin’;
commit;
select * from account where name='Kevin';
———————
balance name
60 Kevin
commit;

发端数据汤姆与凯文的账户合计为100,在T1事务内的一遍读取得到账户合计为130,鲜明不适合此前的一致性约束。

补充这一个万分现象后,Critique给出了新的矩阵,相比较ANSI尤其周密也更贴合真实的数据库产品。

图片 4

主流数据库考虑到串行化效果与出新性能的平衡,一般默认隔离级别都在于RC与RR之间,部分提供了Serializable。更加提示,无论ASNI
SQL-92依旧Critique的隔断级别都不可能担保直接照射到骨子里数据库的同名隔离级别。

SI&MVCC

快照隔离(SI,Snapshot
Isolation)是探究隔离性时周边的术语,可以做两种的解读,一是现实的隔断级别,SQL
Server、CockroachDB都一直定义了这一个隔离级别;二是一种隔离机制用来落实相应的割裂级别,在Oracle、MySQL
InnoDB、PostgreSQL等主流数据库中广大利用。多版本出现控制(MVCC,multiversion
concurrency
control)是通过记录数据项历史版本的方法提高系统回答多事务访问的产出处理能力,例如幸免单值(Single-Valued)存储处境下写操作对读操作的锁排斥。MVCC和锁都是SI的主要完毕手段,当然也设有无锁的SI达成。以下是Critique描述的SI运作进程。

工作(记为T1)伊始的一须臾会取得一个光阴戳Start
提姆(Tim)estamp(记为ST),而数据库内的保有数据项的种种历史版本都记录着相应的小运戳Commit
提姆estamp(记为CT)。T1读取的快照由所有数据项版本中那多少个CT小于ST且近日的野史版本构成,由于那个数据项内容只是历史版本不会再一次被写操作锁定,所以不会发出读写争执,快照内的读操作永远不会被打断。其余作业在ST之后的改动,T1不可知。当T1
commit的须臾间会得到一个CT,并确保大于此刻数据库中已存在的轻易时间戳(ST或CT),持久化时会将以此CT将用作数据项的本鸡时间戳。T1的写操作也突显在T1的快照中,可以被T1内的读操作再度读取。当T1
commit后,修改会对那么些具有ST大于T1 CT的作业可知。
设若存在其余工作(T2),其CT在T1的运行区间【ST,CT】之间,与T1对同一的多少项进行写操作,则T1
abort,T2
commit成功,那些特性被号称First-committer-wins,可以保险不出现Lost
update。事实上,部分数据库会将其调整为First-write-wins,将争执判断提前到write操作时,减弱争论的代价。

其一历程不是某个数据库的有血有肉落实,事实上不一样数据库对于SI完成存在很大距离。例如,PostgreSQL会将历史版本和近来版本一起保存通过时间戳区分,而MySQL和Oracle都在回滚段中保存历史版本。MySQL的RC与RR级别均选用了SI,即使当前作业(T1)读操作的数目被其他工作的写操作加锁,T1转向回滚段读取快照数据,避免读操作被封堵。可是RC的快照定义与以上描述不一样,也席卷了T1执行进程中其余工作提交的新星版本[6]。

别的,大家还有一个重大发现,时间戳是生成SI的要紧因素。在单机系统中,唯一时间戳相比易于已毕,而对此分布式系统在跨节点、跨数据宗旨依旧跨城市安排的情景下怎么树立一个唯一时钟就改为一个分外复杂的题材,大家暂留下一个伏笔将在前面的专题作品中开展座谈。

SI&MVCC

快照隔离(SI,Snapshot
Isolation)是座谈隔离性时普遍的术语,可以做二种的解读,一是现实性的割裂级别,SQL
Server、CockroachDB都一向定义了这几个隔离级别;二是一种隔离机制用来落到实处相应的隔离级别,在Oracle、MySQL
InnoDB、PostgreSQL等主流数据库中广泛使用。多版本出现控制(MVCC,multiversion
concurrency
control)是由此记录数据项历史版本的措施提高系统回答多事务访问的出现处理能力,例如避免单值(Single-Valued)存储景况下写操作对读操作的锁排斥。MVCC和锁都是SI的首要性落成手段,当然也存在无锁的SI完结。以下是Critique描述的SI运作进程。

政工(记为T1)初叶的一眨眼之间间会拿走一个时间戳Start
提姆(Tim)estamp(记为ST),而数据库内的保有数据项的每个历史版本都记录着相应的日子戳Commit
提姆estamp(记为CT)。T1读取的快照由拥有数据项版本中这几个CT小于ST且近来的历史版本构成,由于那些多少项内容只是野史版本不会另行被写操作锁定,所以不会发出读写争辨,快照内的读操作永远不会被卡住。其余工作在ST之后的修改,T1不可知。当T1
commit的一刹那会得到一个CT,并有限支撑大于此刻数据库中已存在的肆意时间戳(ST或CT),持久化时会将那一个CT将作为数据项的本申时间戳。T1的写操作也反映在T1的快照中,可以被T1内的读操作再度读取。当T1
commit后,修改会对那多少个拥有ST大于T1 CT的政工可知。
一经存在任何工作(T2),其CT在T1的运转间隔【ST,CT】之间,与T1对同样的数目项进行写操作,则T1
abort,T2
commit成功,这一个特性被叫做First-committer-wins,能够确保不出现Lost
update。事实上,部分数据库会将其调整为First-write-wins,将龃龉判断提前到write操作时,减弱争论的代价。

其一进度不是某个数据库的切实得以落成,事实上分裂数据库对于SI达成存在很大差距。例如,PostgreSQL会将历史版本和眼前版本一起保存通过时间戳区分,而MySQL和Oracle都在回滚段中保存历史版本。MySQL的RC与RR级别均运用了SI,假若当前作业(T1)读操作的数据被其他工作的写操作加锁,T1转向回滚段读取快照数据,防止读操作被封堵。可是RC的快照定义与以上描述差距,也席卷了T1执行进程中任何工作提交的前卫版本[6]。

别的,大家还有一个要害发现,时间戳是生成SI的严重性要素。在单机系统中,唯一时间戳相比不难达成,而对于分布式系统在跨节点、跨数据基本仍旧跨城市计划的情状下怎么建立一个唯一时钟就变成一个相当复杂的题目,大家暂留下一个伏笔将在背后的专题小说中举办座谈。

Serializable VS SSI

SI是如此有效,甚至在TPC-C
benchmark测试中也从没出现别的相当现象[5],但事实上SI不可能担保总体的串行化效果。Critique中提出,SI还不可以处理A5B(Write
Skew,写偏序),如下图所示。

图片 5

Serializable VS SSI

SI是那样有效,甚至在TPC-C
benchmark测试中也并未出现其余卓殊现象[5],但实则SI不可以保障总体的串行化效果。Critique中提议,SI还不可能处理A5B(Write
Skew,写偏序),如下图所示。

图片 6

Write Skew

写偏序(Write
Skew)也是一致性约束下的至极现象,即四个互相事务都依据自己读到的数额集去覆盖另一有的数据集,在串行化情形下七个业务不管何种先后顺序,最后将达到平等状态,但SI隔离级别下不能完毕。下图的“黑白球”寻常被用来验证写偏序问题。

图片 7

哪些促成真正的串行化效果啊?事实上,早期的数据库已经因而从严两阶段锁协议(S2PL,Strict
Two-Phase Locking)已毕了完全的串行化隔离(Serializable
Isolation),即正在开展读操作的多寡阻塞对应写操作,写操作阻塞所有操作(包含读操作和写操作)。如阻塞导致循环将构成死锁,则要求展开rollback操作。S2PL的问题肯定,在竞争剧烈场地下,阻塞和死锁会造成数据库吞吐量下落和响应时间的增添,所以那种串行化无法利用于实际生育环境。直到SSI的出现,人们终于找到具有实际价值的串行化隔离方案。

串行化快照隔离(SSI, Serializable Snapshot
Isolation,也会被翻译为系列化快照)是基于SI革新达到Serializable级其余隔离性。SSI由迈克尔詹姆士(James)(James) Cahill在他的舆论”Serializable Isolation for Snapshot
Databases”[3]中提议(该杂谈得到2008 Sigmod Best Paper
Award,文章最终提供了该随想的二零零六年一体化版[4]连带消息,有趣味的同室可以深深商讨)。SSI保留了SI的浩大独到之处,尤其是读不封堵任何操作,写不会卡住读。事务如故在快照中运行,但净增了对事情间读写争论的督察用于识别事务图(transaction
graph)中的危险结构。当一组并发事务可能爆发格外现象(anomaly),系统将透过回滚其中一些事情举办干预以消弭anomaly暴发的或是。那些历程固然会导致一些事情的失实回滚(不会招致anomaly的业务被误杀),但足以保障消除anomaly[3]。

从理论模型看,SSI性能接近SI,远远好于S2PL。二零一二年,PostgreSQL在9.1本子中贯彻了SSI[7],可能也是第二个帮忙SSI的小买卖数据库,验证了SSI的完成效益。CockroachDB也从Cahill的舆论获得灵感,完成SSI并将其看做其默许隔离级别。

乘势技术的上进,SI/SSI已经变成主流数据库的隔断技术,越发是后人的面世,无需开发人士在代码通过显式锁来幸免极度,从而下跌了人为错误的几率。在分布式数据库的有关章节中,我们将越发对SSI已毕机制举办深入研商。


参考文献
[1]Innodb中的事务隔离级别和锁的关联,ameng,https://tech.meituan.com/innodb-lock.html
[2]H. Berenson, P. Bernstein, J. Gray, J.Melton, E. O’Neil,and P.
O’Neil. A critique of ANSI SQL isolation levels. InProceedings of the
SIGMOD International Conference on Management of Data, pages1–10, May

  1. [3]Michael J. Cahill, Uwe Röhm, and Alan D.Fekete. 2008. Serializable
    isolation for snapshot databases. In SIGMOD ’08:Proceedings of the 2008
    ACM SIGMOD international conference on Management of data, pages
    729–738, New York, NY, USA. ACM.
    [4]Michael James Cahill. 2009. Serializable Isolation for Snapshot
    Databases. Sydney Digital Theses. University of Sydney, School of
    Information Technologies
    [5] A. Fekete, D. Liarokapis, E. O’Neil, P.O’Neil, andD. Shasha.
    Making snapshot isolation serializable. In ACM transactions on database
    systems, volume 39(2), pages 492–528, June 2005.
    [6]姜承尧,MySQL技术内幕:InnoDB存储引擎机, 械工业出版社, 2011
    [7]https://wiki.postgresql.org/wiki/Serializable
Write Skew

写偏序(Write
Skew)也是一致性约束下的非凡现象,即四个互相事务都基于自己读到的多少集去覆盖另一片段数据集,在串行化情形下五个工作不管何种先后顺序,最后将达到同等状态,但SI隔离级别下不可以落到实处。下图的“黑白球”日常被用来验证写偏序问题。

图片 8

怎样完毕真正的串行化效果啊?事实上,早期的数据库已经经过严酷两品级锁协议(S2PL,Strict
Two-Phase Locking)完结了一心的串行化隔离(Serializable
Isolation),即正在拓展读操作的数据阻塞对应写操作,写操作阻塞所有操作(包涵读操作和写操作)。如阻塞导致循环将构成死锁,则要求开展rollback操作。S2PL的题目肯定,在竞争能够场合下,阻塞和死锁会造成数据库吞吐量下落和响应时间的增多,所以那种串行化无法利用于实际生育环境。直到SSI的面世,人们终于找到具有实际价值的串行化隔离方案。

串行化快照隔离(SSI, Serializable Snapshot
Isolation,也会被翻译为系列化快照)是依据SI立异达到Serializable级其余隔离性。SSI由迈克尔詹姆士 Cahill在他的随想”Serializable Isolation for Snapshot
Databases”[3]中提议(该小说得到2008 Sigmod Best Paper
Award,小说最后提供了该随想的二〇〇九年一体化版[4]连锁音信,有趣味的同校可以深刻钻研)。SSI保留了SI的众多亮点,尤其是读不打断任何操作,写不会堵塞读。事务依然在快照中运行,但净增了对作业间读写争辨的监察用于识别事务图(transaction
graph)中的危险结构。当一组并发事务可能暴发非常现象(anomaly),系统将通过回滚其中一些事情举办干涉以消弭anomaly暴发的或许。这一个历程就算会促成一些事情的不当回滚(不会造成anomaly的事务被误杀),但可以保险消除anomaly[3]。

从理论模型看,SSI性能接近SI,远远好于S2PL。二零一二年,PostgreSQL在9.1版本中贯彻了SSI[7],可能也是第四个协助SSI的买卖数据库,验证了SSI的落到实处效益。CockroachDB也从Cahill的舆论获得灵感,达成SSI并将其当做其默许隔离级别。

乘胜技术的迈入,SI/SSI已经改成主流数据库的隔断技术,尤其是后世的面世,无需开发人士在代码通过显式锁来防止极度,从而下落了人为错误的票房价值。在分布式数据库的有关章节中,大家将尤其对SSI完毕机制举行深远商讨。


参考文献
[1]Innodb中的事务隔离级别和锁的关联,ameng,https://tech.meituan.com/innodb-lock.html
[2]H. Berenson, P. Bernstein, J. Gray, J.Melton, E. O’Neil,and P.
O’Neil. A critique of ANSI SQL isolation levels. InProceedings of the
SIGMOD International Conference on Management of Data, pages1–10, May

  1. [3]Michael J. Cahill, Uwe Röhm, and Alan D.Fekete. 2008. Serializable
    isolation for snapshot databases. In SIGMOD ’08:Proceedings of the 2008
    ACM SIGMOD international conference on Management of data, pages
    729–738, New York, NY, USA. ACM.
    [4]Michael James Cahill. 2009. Serializable Isolation for Snapshot
    Databases. Sydney Digital Theses. University of Sydney, School of
    Information Technologies
    [5] A. Fekete, D. Liarokapis, E. O’Neil, P.O’Neil, andD. Shasha.
    Making snapshot isolation serializable. In ACM transactions on database
    systems, volume 39(2), pages 492–528, June 2005.
    [6]姜承尧,MySQL技术内幕:InnoDB存储引擎机, 械工业出版社, 2011
    [7]https://wiki.postgresql.org/wiki/Serializable

相关文章