并且没有将割裂级别与实际贯彻机制绑定,同时没有将切断级别与现实落到实处机制绑定

写在前边

近两年分布式数据库技术加速进化,而出于金融行业技能生态的限定,周围众多同桌对其并不曾深远的询问,所以进行高品质、高可依赖系统规划时往往不够这一利器。伊凡希望以八种小说的法子与咱们交换商量,加深大家对分布式数据库的认识。本文是该种类文章的首先篇,主要探索事务管理中的隔离性,厘清相关概念和关键技术,为前面演说分布式数据库的事务管理做一个选配,姑且算是一篇前传吧。


写在眼前

近两年分布式数据库技术加速前进,而由于金融行业技术生态的限量,周围众多同室对其并从未尖锐的打听,所以举办高品质、高可信赖系统规划时很多次不够这一利器。伊凡希望以两种小说的形式与大家调换研商,加深大家对分布式数据库的认识。本文是该连串小说的率先篇,首要探索事务管理中的隔离性,厘清相关概念和关键技术,为后边讲演分布式数据库的事务管理做一个选配,姑且算是一篇前传吧。


正文

我们率先从概念出发,事务管理包括原子性、一致性、隔离性和持久性三个方面,即ACID。所有数据库专著都会付给那一个八个特色的概念,本文大家引用了Jim格雷对其的概念。

吉姆格雷是事务处理方面的法师,本文中许多情节都源于她的专著和诗歌。为防止翻译引入的歧义,这里大家直接引用原文。

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。所有数据库专著都会付给那几个几个特点的定义,本文大家引用了吉米Gray对其的概念。

Jim格雷是事务处理方面的大师傅,本文中诸多内容都源于她的专著和杂谈。为幸免翻译引入的歧义,这里大家直接引用原文。

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),包容了后续的技艺提升。该规范根据三种极度现象将隔离性定义为多少个级别,具体如下。

www.5037.com 1

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

诸多篇章都构成数据库产品对上述十分现象的实例和拍卖体制举行了印证,本文中不再赘述,有趣味的同桌可以参照文末的链接[1]。

ANSI
SQL-92标准早在92年布告,但随便当时或者后来都不曾被各大数据库厂商严厉依照,部分缘故想必是业内过于简化与事实上使用有必然水平的退出。Jim格雷等人在1995揭示了舆论“A Critique of ANSI SQL Isolation Levels”
(本文中简称为Critique[2])对隔断级别举行更完美的阐发,可以协理大家深化了解。

ANSI SQL-92 Isolation Levels

ANSI
SQL-92可能是最早指出了按照格外现象来定义隔离级其余情势,同时没有将割裂级别与具体落到实处机制绑定,隔离的落到实处能够按照锁(lock-based)或者无锁(lock-free),包容了持续的技能发展。该专业根据两种极度现象将隔离性定义为几个级别,具体如下。

www.5037.com 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尤其全面也更贴合真实的数据库产品。

www.5037.com 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尤其圆满也更贴合真实的数据库产品。

www.5037.com 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
提姆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,写偏序),如下图所示。

www.5037.com 5

Serializable VS SSI

SI是那般有效,甚至在TPC-C
benchmark测试中也没有出现任何分外现象[5],但实际SI不可以确保完全的串行化效果。Critique中提议,SI还不可以处理A5B(Write
Skew,写偏序),如下图所示。

www.5037.com 6

Write Skew

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

www.5037.com 7

何以落到实处真正的串行化效果呢?事实上,早期的数据库已经通过严苛两品级锁协议(S2PL,Strict
Two-Phase Locking)达成了一心的串行化隔离(Serializable
Isolation),即正在进展读操作的多少阻塞对应写操作,写操作阻塞所有操作(包涵读操作和写操作)。如阻塞导致循环将整合死锁,则需求展开rollback操作。S2PL的题材鲜明,在竞争剧烈场馆下,阻塞和死锁会造成数据库吞吐量下跌和响应时间的加码,所以这种串行化无法运用于实际生产条件。直到SSI的出现,人们终于找到具有实际价值的串行化隔离方案。

串行化快照隔离(SSI, Serializable Snapshot
Isolation,也会被翻译为系列化快照)是基于SI立异达到Serializable级其余隔离性。SSI由Michael詹姆士 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隔离级别下不可能兑现。下图的“黑白球”平日被用来表明写偏序难题。

www.5037.com 8

什么促成真正的串行化效果呢?事实上,早期的数据库已经通过严苛两等级锁协议(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,作品最后提供了该随笔的二零零六年总体版[www.5037.com,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

相关文章