该标准根据三栽异常现象将隔离性定义也四独级别。该规范根据三种异常现象将隔离性定义也四单级别。

正文

俺们第一从概念出发,事务管理包括原子性、一致性、隔离性和持久性四单方面,即ACID。所有数据库专著都见面叫闹这四独特性的定义,本文我们引用了Jim
Gray对该的定义。

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标准隔离级别,我们来看看她的具体内容。

正文

咱们首先从概念出发,事务管理包括原子性、一致性、隔离性和持久性四独面,即ACID。所有数据库专著都见面为起这四单特点的定义,本文我们引用了Jim
Gray对其的定义。

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标准隔离级别,我们来看看她的具体内容。

描绘于前头

近两年分布式数据库技术加快前进,而鉴于经济行业技术生态的限量,周围众多同桌对该并没有深刻的摸底,所以进行大性能、高可靠系统规划时数欠这一利器。Ivan希望盖多元文章的主意与大家交流探讨,加深我们针对分布式数据库的认。本文是该系列文章的率先篇,主要探索事务管理中之隔离性,厘清相关概念和关键技术,为后阐述分布式数据库的事务管理做一个铺垫,姑且算是一首前污染吧。


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年公布,但无论即要后来还不曾吃各大数据库厂商严格遵循,部分因可能是规范过于简化和实际使用来早晚程度之退出。Jim
Gray等人口在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年颁发,但不论是即或者新兴还没有被各大数据库厂商严格遵循,部分缘故恐怕是正式过于简化和事实上运用来早晚程度之淡出。Jim
Gray等人口在1995公布了舆论“A Critique of ANSI SQL Isolation Levels”
(本文中简称为Critique[2])对隔断级别进行重复周到的论述,可以协助我们深化理解。

描绘在前边

濒临两年分布式数据库技术加快前行,而由于经济行业技术生态之限,周围众多同班对其并不曾深切的问询,所以进行大性能、高可靠系统规划时一再缺乏这一利器。Ivan希望为多重文章的艺术和大家交流探讨,加深我们对分布式数据库的认识。本文是拖欠系列文章的首先篇,主要探索事务管理中的隔离性,厘清相关概念与关键技术,为后面阐述分布式数据库的事务管理做一个掩映,姑且算是一篇前污染吧。


Write Skew

写偏序(Write
Skew)也是一致性约束下的异常现象,即有限独相事务都冲自己读到的数额集去覆盖任何一样局部数据集,在错行化情况下零星只业务不管何种先后顺序,最终用齐平等状态,但SI隔离级别下无法落实。下图的“黑白球”常常被用来证实写偏序问题。

图片 3

安促成真正的错行化效果也?事实上,早期的数据库已经经过严厉两品锁协议(S2PL,Strict
Two-Phase Locking)实现了完全的错行化隔离(Serializable
Isolation),即在进展读操作的数阻塞对应写操作,写操作阻塞所有操作(包括读操作以及描绘操作)。如阻塞导致循环将组成死锁,则需进行rollback操作。S2PL的题目明显,在竞争激烈场面下,阻塞与死锁会造成数据库吞吐量下降和响应时间的增加,所以这种串行化无法用为实际生育环境。直到SSI的面世,人们终于找到有实际价值的错行化隔离方案。

阴差阳错行化快照隔离(SSI, Serializable Snapshot
Isolation,也会受翻译啊序列化快照)是基于SI改进上Serializable级别之隔离性。SSI由Michael
James Cahill在他的论文”Serializable Isolation for Snapshot
Databases”[3]遭受提出(该论文得到2008 Sigmod Best Paper
Award,文章最后提供了拖欠论文的2009年整体版本[4]连锁信息,有趣味的同窗可以深入钻研)。SSI保留了SI的不少长,特别是读不打断任何操作,写不会见卡住读。事务依然在快照中运作,但多了对作业中读写冲突的监察用于识别事务图(transaction
graph)中之危结构。当一组连发事务可能发异常现象(anomaly),系统将透过回滚其中一些事情进行干预为解除anomaly发生的恐怕。这个进程虽然会招致一些事情的荒谬回滚(不会见招anomaly的作业让误杀),但足管消除anomaly[3]。

从理论模型看,SSI性能接近SI,远远好为S2PL。2012年,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隔离级别下无法实现。下图的“黑白球”常常叫用来证实写偏序问题。

图片 4

哪落实真正的差行化效果也?事实上,早期的数据库都通过严厉两等锁协议(S2PL,Strict
Two-Phase Locking)实现了截然的差行化隔离(Serializable
Isolation),即在展开读操作的数额阻塞对应写操作,写操作阻塞所有操作(包括读操作及描绘操作)。如阻塞导致循环将成死锁,则需要开展rollback操作。S2PL的问题明显,在竞争剧烈场面下,阻塞与死锁会造成数据库吞吐量下降与应时间之增,所以这种失误行化无法以被实际生产条件。直到SSI的产出,人们终于找到有实际价值之差行化隔离方案。

出错行化快照隔离(SSI, Serializable Snapshot
Isolation,也会为翻为序列化快照)是冲SI改进上Serializable级别之隔离性。SSI由Michael
James Cahill在外的舆论”Serializable Isolation for Snapshot
Databases”[3]被提出(该论文获得2008 Sigmod Best Paper
Award,文章最后提供了该论文的2009年整体版本[4]系消息,有趣味之同窗可以深深研讨)。SSI保留了SI的洋洋优点,特别是朗诵不封堵任何操作,写不见面死读。事务依然当快照中运作,但增加了针对性作业间读写冲突之监察用于识别事务图(transaction
graph)中之险恶结构。当一组连发事务可能发生异常现象(anomaly),系统以通过回滚其中一些事情进行干涉为消弭anomaly发生的或是。这个过程尽管会促成一些事情的一无是处回滚(不会见造成anomaly的作业让误杀),但可以保证消除anomaly[3]。

由理论模型看,SSI性能接近SI,远远好于S2PL。2012年,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
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更加圆满与否重贴合真实的数据库产品。

图片 5

主流数据库考虑到离谱行化效果与出新性能的平衡,一般默认隔离级别都在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
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的RC与RR级别都采取了SI,如果手上政工(T1)读操作的多寡为外事情之写操作加锁,T1转向回滚段读取快照数据,避免读操作为打断。但是RC的快照定义跟以上描述不同,也席卷了T1执行进程被其他工作提交的新式版本[6]。

另外,我们还有一个根本发现,时间穿是生成SI的关键因素。在单机系统受,唯一时间穿比较轻实现,而对于分布式系统在跨节点、跨数据主导还是跨城市部署之状下怎么建一个唯一时钟就变成一个非常复杂的题材,我们暂时留下一个伏笔将于后面的专题篇中展开讨论。

Critique Isolation Levels

Critique提出了ANSI
SQL-92存在的鲜个问题,首先是自然语言方式界定的异常现象并无严格导致有些同质化的异常现象被遗漏;其次是有的超人的异常现象并不曾为含有进去,导致隔离级别在明显少。因此,文中对ANSI
SQL-92的老三栽异常现象(将其编号也A1/A2/A3)进行了扩大(编号为P1/P2/P3),并加了另外5栽常见的异常现象。受抑制篇幅,这里只对少数种异常现象进行认证。

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更加完善呢更贴合真实的数据库产品。

图片 6

主流数据库考虑到离谱行化效果和产出性能的平衡,一般默认隔离级别都在RC与RR之间,部分提供了Serializable。特别提示,无论ASNI
SQL-92还是Critique的割裂级别都不能够保证直接照射到实际数据库的同名隔离级别。

Serializable VS SSI

SI是这般有效,甚至在TPC-C
benchmark测试中吗无起任何特别状况[5],但事实上SI不克保证完全的差行化效果。Critique中指出,SI还无法处理A5B(Write
Skew,写偏序),如下图所出示。

图片 7

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的修改为埋。

Serializable VS SSI

SI是这般有效,甚至以TPC-C
benchmark测试着吗没出现其他异常现象[5],但骨子里SI不能够管总体的失误行化效果。Critique中指出,SI还无法处理A5B(Write
Skew,写偏序),如下图所著。

图片 8

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的RC与RR级别都使用了SI,如果手上作业(T1)读操作的数量被其他作业之描写操作加锁,T1转向回滚段读取快照数据,避免读操作为堵塞。但是RC的快照定义和以上描述不同,也囊括了T1执行过程遭到任何业务提交的摩登版本[6]。

此外,我们还有一个第一发现,时间戳是生成SI的首要要素。在单机系统面临,唯一时间戳比较容易实现,而对此分布式系统在跨节点、跨数据主导还跨城市部署的情形下如何树立一个唯一时钟就成为一个非常复杂的问题,我们小留下一个伏笔将以后头的专题文章被开展座谈。

Critique Isolation Levels

Critique提出了ANSI
SQL-92存在的点滴个问题,首先是自然语言方式界定的异常现象并无严厉导致有些同质化的异常现象被遗漏;其次是一对卓越的异常现象并不曾受含有进去,导致隔离级别有显著少。因此,文中对ANSI
SQL-92的老三种植异常现象(将该编号为A1/A2/A3)进行了扩大(编号吧P1/P2/P3),并增加了另外5栽普遍的异常现象。受压篇幅,这里仅针对有限种植异常现象进行认证。

相关文章