并且没有将切断级别与实际贯彻机制绑定bet365娱乐场官网,该标准依据两种十分现象将隔离性定义为三个级别

写在前面

近两年分布式数据库技术加速进化,而由于金融行业技能生态的界定,周围众多同查对其并不曾深入的摸底,所以举办高质量、高可相信系统规划时一再紧缺这一利器。伊凡希望以多元作品的法子与我们交换商讨,加深大家对分布式数据库的认识。本文是该系列文章的首先篇,主要探索事务管理中的隔离性,厘清相关概念和关键技术,为后边演说分布式数据库的事务管理做3个掩映,姑且算是一篇前传吧。


写在后边

近两年分布式数据库技术加快前行,而出于金融行业技术生态的限制,周围众多同班对其并不曾深切的刺探,所以进行高质量、高可倚重系统规划时频仍不够这一利器。伊凡希望以连串文章的方法与大家互换切磋,加深大家对分布式数据库的认识。本文是该体系文章的首先篇,紧要探索事务管理中的隔离性,厘清相关概念和关键技术,为前面演说分布式数据库的事务管理做2个铺垫,姑且算是一篇前传吧。


正文

咱俩先是从概念出发,事务管理包罗原子性、一致性、隔离性和持久性三个地点,即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标准隔离级别,我们来看望它的具体内容。

bet365娱乐场官网,ANSI SQL-92 Isolation Levels

ANSI
SQL-9二只怕是最早提议了依照很是现象来定义隔离级其他主意,同时没有将割裂级别与具体完毕机制绑定,隔离的落实可以依照锁(lock-based)或许无锁(lock-free),包容了后续的技能发展。该专业按照三种非常现象将隔离性定义为三个级别,具体如下。

bet365娱乐场官网 1

脏读,事务(T1)中修改的数据项在尚未提交的意况下被其余业务(T2)读取到,而T1进行Rollback操作,则T2刚刚读取到的数码并不曾实际存在。
不足重复读,T1读取数据项,T2对其中的多寡开展了改动或删除且Commit成功。即使T1尝试重新读取那个数量,会博得T2修改后的数目恐怕发现数目已删除。这样T1在三个政工中三遍同样条件的读取,且结果集内容改动或结果集数量缩减。
幻读,T1使用一定的询问条件拿到2个结实集,T2插入新的多少且那些数据符合T2刚刚操作的询问条件。T2
commit 成功后,T1再度实施同样的询问,此时拿到的结果集增大。

不少小说都构成数据库产品对上述格外现象的实例和拍卖机制举行了认证,本文中不再赘言,有趣味的同学可以参见文末的链接[1]。

ANSI
SQL-92标准早在92年公告,但不论当时依旧后来都并未被各大数据库厂商严峻依据,部分缘由大概是正经过于简化与事实上接纳有自然水准的退出。吉米格雷等人在1994文告了舆论“A Critique of ANSI SQL Isolation Levels”
(本文中简称为Critique[2])对隔断级别举行更周详的论述,可以扶持大家深化了解。

ANSI SQL-92 Isolation Levels

ANSI
SQL-92或者是最早提议了依照至极现象来定义隔离级其他艺术,同时没有将切断级别与实际已毕机制绑定,隔离的完毕可以依照锁(lock-based)大概无锁(lock-free),包容了一连的技巧发展。该专业依照三种卓殊现象将隔离性定义为八个级别,具体如下。

bet365娱乐场官网 2

脏读,事务(T1)中修改的多寡项在没有提交的状态下被其余业务(T2)读取到,而T1举行Rollback操作,则T2刚刚读取到的数目并没有实际存在。
不足重复读,T1读取数据项,T2对内部的数码进行了修改或删除且Commit成功。若是T1尝试再次读取那么些数量,会收获T2修改后的多少大概发现数目已去除。这样T1在二个工作中两回同样条件的读取,且结果集内容变更或结果集数量减小。
幻读,T1使用一定的询问条件拿到二个结出集,T2插入新的数目且那些数量符合T2刚刚操作的查询条件。T2
commit 成功后,T1再一次实施同一的询问,此时赢得的结果集增大。

不可胜数篇章都构成数据库产品对上述非凡现象的实例和处理机制进行了印证,本文中不再赘言,有趣味的同桌能够参照文末的链接[1]。

ANSI
SQL-92标准早在92年发表,但无论当时依然后来都没有被各大数据库厂商严酷根据,部分缘由恐怕是专业过于简化与事实上拔取有一定水准的退出。吉米格雷等人在一九九五颁发了舆论“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;

在上述操作中T① 、T2串行执行效率是对余额举行五次扣减,分别为40和1,最后值为9,但互相的末尾值为49,T2的改动被丢掉。大家得以发现Lost
update的实质是T1事务读取数据,而后该数据被T2事务修改并交给,T1基于已经过期的数量举行了重复修改,造成T2的改动被覆盖。

Lost Update

不见更新(Lost
Update)是2个经典的数据库难题,由于太过紧要全部主流数据库都化解了该难点,大家那边将操作稍加变形来比喻。

大家采纳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;

在上述操作中T一 、T2串行执行职能是对余额举办一次扣减,分别为40和1,最终值为9,但相互之间的结尾值为49,T2的改动被丢掉。大家得以窥见Lost
update的面目是T1事务读取数据,而后该数额被T2事务修改并付诸,T1基于已经过期的多寡举行了再也修改,造成T2的改动被遮住。

Read Skew

读偏序(Read
Skew)是冠道C级境遇的难点。假诺数据项x与y存在一致性约束,T1先对读x,而后T2修改x和y后commit,此时T1再读y。T1拿走的x与y不满意原有的一致性约束。

MySQL默许隔离级别为中华VCRUISER,大家必要手工安装为宝马7系C并开端化数据

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特别周全也更贴合真实的数据库产品。

bet365娱乐场官网 3

主流数据库考虑到串行化效果与出新质量的平衡,一般默许隔离级别都在于奇骏C与奥迪Q3Highlander之间,部分提供了Serializable。尤其提示,无论ASNI
SQL-92如故Critique的隔离级别都不可能保险直接照射到实在数据库的同名隔离级别。

Read Skew

读偏序(Read
Skew)是景逸SUVC级碰到的标题。如若数额项x与y存在一致性约束,T1先对读x,而后T2修改x和y后commit,此时T1再读y。T1拿到的x与y不满意原有的一致性约束。

MySQL暗许隔离级别为卡宴RAV4,我们要求手工安装为瑞鹰C并早先化数据

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越发完美也更贴合真实的数据库产品。

bet365娱乐场官网 4

主流数据库考虑到串行化效果与出新质量的平衡,一般暗许隔离级别都在于RubiconC与逍客普拉多之间,部分提供了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
Timestamp(记为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的EscortC与XC60Odyssey级别均使用了SI,假诺当前业务(T1)读操作的数据被此外作业的写操作加锁,T1转向回滚段读取快照数据,幸免读操作被卡住。可是君越C的快照定义与以上描述不一致,也包蕴了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
Timestamp(记为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的帕杰罗C与君越安德拉级别均运用了SI,假诺当前作业(T1)读操作的数量被其他工作的写操作加锁,T1转向回滚段读取快照数据,防止读操作被封堵。可是EscortC的快照定义与以上描述不相同,也席卷了T1执行进度中其余工作提交的时尚版本[6]。

其它,我们还有二个重点发现,时间戳是生成SI的严重性要素。在单机系统中,唯临时间戳相比简单完结,而对此分布式系统在跨节点、跨数据主导如故跨城市安排的动静下何以树立1个唯暂且钟就变成二个非常复杂的难题,大家暂留下2个伏笔将在末端的专题作品中举行商量。

Serializable VS SSI

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

bet365娱乐场官网 5

Serializable VS SSI

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

bet365娱乐场官网 6

Write Skew

写偏序(Write
Skew)也是一致性约束下的至极现象,即八个相互事务都依据本人读到的数目集去覆盖另一片段数据集,在串行化情状下五个业务不管何种先后顺序,最后将高达平等状态,但SI隔离级别下不大概落到实处。下图的“黑白球”常常被用来申明写偏序难点。

bet365娱乐场官网 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]中指出(该散文得到二〇一〇 Sigmod Best Paper
Award,小说最终提供了该杂文的2008年总体版[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存储引擎机, 械工业出版社, 二〇一二
    [7]https://wiki.postgresql.org/wiki/Serializable
Write Skew

写偏序(Write
Skew)也是一致性约束下的非常现象,即两个相互事务都基于本身读到的多寡集去覆盖另一片段数据集,在串行化情形下七个工作不管何种先后顺序,最后将高达同等状态,但SI隔离级别下不可以落到实处。下图的“黑白球”平常被用来表明写偏序难点。

bet365娱乐场官网 8

怎么样兑现真正的串行化效果呢?事实上,早期的数据库已经通过严峻两品级锁协议(S2PL,Strict
Two-Phase Locking)已毕了一心的串行化隔离(Serializable
Isolation),即正在拓展读操作的数量阻塞对应写操作,写操作阻塞全体操作(包蕴读操作和写操作)。如阻塞导致循环将组成死锁,则须要举办rollback操作。S2PL的题材一目精晓,在竞争激烈场馆下,阻塞和死锁会造成数据库吞吐量下跌和响应时间的加码,所以那种串行化无法运用于实际生产条件。直到SSI的产出,人们终于找到具有实际价值的串行化隔离方案。

串行化快照隔离(SSI, Serializable Snapshot
Isolation,也会被翻译为种类化快照)是按照SI革新达到Serializable级其余隔离性。SSI由Michael詹姆斯 卡Hill在他的舆论”Serializable Isolation for Snapshot
Databases”[3]中指出(该随想拿到2010 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存储引擎机, 械工业出版社, 二〇一一
    [7]https://wiki.postgresql.org/wiki/Serializable

相关文章