| 
                         这里的有向边包括三种情况: 
    - 写写冲突ww(Directly  Write-Depends):表示两个事务先后修改同一个数据库Object(w1[x]…w2[x]...);  先写后读冲突wr(Directly  Read-Depends):一个事务修改某个数据库Object后,另一个对该Object进行读操作(w1[x]…r2[x]...);  先读后写冲突rw(Directly  Anti-Depends):一个事务读取某个Object或者某个Range后,另一个事务进行了修改(r1[x]…w2[x]… or  r1[P]…w2[y in P]);
 
    - 基于序列化图的异象定义:
 
    - 根据有向图的定义,我们可以将事务对不同Object的依赖关系表示到一张同一张图中,而所谓异象就是在图中找不到一个正确的序列化顺序,即存在某种环。而这种基于环的定义其实就是将基于Lock定义的异象最小化到图中灰色部分:
 
    - 1,P0(Dirty Write) 最小化为 G0(Write Cycles):序列化图中包含两条边都为ww冲突组成的环,如H0:
 
 
H0: w1[x] w2[x] w2[y] c2 w1[y] c1 
    - 可以看出T1在x上与T2写写冲突,T2又在y上与T1写写冲突,形成了如下图所示的环。
 
 
 
    - 2,P1(Dirty  Read) 最小化为 G1:Dirty Read异象的最小集包括三个部分G1a(Aborted  Reads),读到的uncommitted数据最终被abort;G1b(Intermediate Reads)  :读到其他事务中间版本的数据;以及G1c(Circular Information Flow):DSG中包含ww冲突和wr冲突形成的环。
 
    - 3,P2(Fuzzy or Non-Repeatable Read) 最小化为 G2-item(Item Anti-dependency Cycles) :DSG中包含环,且其中至少有一条关于某个object的rw冲突
 
    - 4,P3(Phantom) 最小化为 G2(Anti-dependency Cycles): DSG中包含环,并且其中至少有一条是rw冲突,仍然以上面的H3为例:
 
 
H3:r1[P] w2[insert y to P] r2[z] w2[z] c2 r1[z] c1 
    - T1在谓词P上与T2 rw冲突,反过来T2又在z上与T1wr冲突,如下图所示:
 
 
 
    - 对应的隔离级别:
 
    - 通过上面的讨论可以看出,通过环的方式我们成功最小化了异象的限制范围,那么排除这些异象就得到了更宽松的,通用的隔离级别定义:
 
 
PL-1(Read Uncommitted):阻止G0PL-2(Read Commited):阻止G1PL-2.99(Repeatable Read):阻止G1,G2-itemPL-3(Serializable):阻止G1,G2其他隔离级别: 
    - 除了上述的隔离级别外,在正确性的频谱中还有着大量空白,也就存在着各种其他隔离级别的空间,商业数据库的实现中有两个比较常见:
 
    - 1,Cursor Stability
 
    - 该隔离界别介于Read Committed和Repeatable Read之间,通过对游标加锁而不是对object加读锁的方式避免了Lost Write异象。
 
    - 2, Snapshot Ioslation
 
    - 事务开始的时候拿一个Start-Timestamp的snapshot,所有的操作都在这个snapshot上做,当commit的时候拿Commit-Timestamp,检查所有有冲突的值不能再[Start-  Timestamp, Commit-Timestamp]被提交,否则abort。长久以来,Snapshot  Ioslation一直被认为是Serializable,但其实Snapshot Ioslation下还会出现Write  Skew的异象。之后的文章会详细介绍如何从Snapshot Ioslation出发获得Serializable。
 
 
总结 
    - 对于事务隔离级别的标准,数据库的前辈们进行了长久的探索:
 
 
ANSI  isolation levels定义了异象标准,并根据所排除的异象,定义了,Read Uncommitted、Read  Committed、Repeatable Read、Serializable四个隔离级别; A Critique of ANSI SQL  Isolation  Levels认为ANSI的定义并没将有多object约束的异象排除在外,并选择用更严格的基于Lock的定义扩大了每个级别限制的范围; Weak  Consistency: A Generalized Theory and Optimistic Implementations for  Distributed  Transactions认为基于Lock的定义过多的扩大了限制的范围,导致正常情况被排除在外,从而限制了Optimize类型并行控制的使用;指出解决该问题的关键是要有模型能准确地描述这种多Object约束;并给出了基于序列化图的定义方式,将每个级别限制的范围最小化。参考 
    - A History of Transaction Histories
 
    - ANSI isolation levels
 
    - A Critique of ANSI SQL Isolation Levels
 
    - Weak Consistency: A Generalized Theory and Optimistic Implementations for Distributed Transactions
 
    - Generalized Isolation Level Definitions
 
 
 
 【编辑推荐】 - 传统DBA将死?饿了么数据库自动化运维实践
 - 9月全球数据库排名:MongoDB 最耀眼,分数连续增长11个月
 - 利用关系数据库来实现大规模物联网
 - 浅谈三大主流数据库  哪一款你更喜爱
 - MariaDB和MySQL全面对比:选择数据库需要考虑这几点
  【责任编辑:庞桂玉 TEL:(010)68476606】 
            点赞 0                        (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |