该标准依照二种至极现象将隔离性定义为八个级别,该规范依照二种格外现象将隔离性定义为多少个级别

写在面前

近两年分布式数据库技术加快前进,而鉴于金融行业技能生态的界定,周围众多校友对其并从未尖锐的询问,所以举行高质量、高可信系统规划时反复紧缺这一利器。伊凡希望以多重小说的法门与大家交换探究,加深大家对分布式数据库的认识。本文是该体系小说的率先篇,首要探索事务管理中的隔离性,厘清相关概念和关键技术,为后边解说分布式数据库的事务管理做一个搭配,姑且算是一篇前传吧。


写在日前

近两年分布式数据库技术加速发展,而出于金融行业技能生态的界定,周围众多同核查其并不曾深入的垂询,所以举行高品质、高可相信系统规划时一再缺少这一利器。伊凡希望以体系作品的点子与我们互换商量,加深大家对分布式数据库的认识。本文是该系列作品的首先篇,主要探索事务管理中的隔离性,厘清相关概念和关键技术,为前面演说分布式数据库的事务管理做一个铺垫,姑且算是一篇前传吧。


正文

咱俩先是从概念出发,事务管理蕴含原子性、一致性、隔离性和持久性五个地点,即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。所有数据库专著都会付给那一个五个特征的定义,本文大家引用了吉米格雷对其的概念。

吉米格雷是事务处理方面的活佛,本文中诸多内容都源于她的专著和随想。为幸免翻译引入的歧义,那里大家直接引用原文。

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年颁发,但不论是当时仍然新兴都尚未被各大数据库厂商严苛根据,部分缘由想必是专业过于简化与实际使用有必然水准的退出。吉姆格雷等人在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;

始于数据汤姆与凯文的账户合计为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;

千帆竞发数据汤姆与Kevin的账户合计为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
提姆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
Timestamp(记为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由MichaelJames 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

相关文章