迷失杜小勇大结局,迷失的情感杜小勇和富婆大结局

首页 > 娱乐 > 作者:YD1662024-05-01 22:10:19

迷失杜小勇大结局,迷失的情感杜小勇和富婆大结局(1)

【CSDN 编者按】本文阐述一致领域存在诸多的问题,他们可以用“一致性24字问题”加以概括:范围不清、定义不明、多意、多词、理论有缺、扩展无法、系统难平。提出100%保证数据正确的必要性。

作者 | 李海翔 责编 | 夏萌

出品 | 那海蓝蓝知数行云

迷失杜小勇大结局,迷失的情感杜小勇和富婆大结局(2)

数据正确性的24字难题

数据库范围内,ACID中的C和I,是两个非常重要的特性,I表示并发执行的事务在执行过程中互不影响,即互相处于“隔离”状态,C要求并发执行的事务最终结果是正确的。

尽管C和I非常重要,但遗憾的是,传统的数据库知识从未把这他们的概念清晰表达,而是存在二义性(完整性约束和ACID之C的二义差异),并且缺乏用严谨的数学方式加以定义。

另外,更重要的是:没有直接把前述的数据异常和一致性的概念关联起来。在大众的头脑中,似乎数据异常和一致性有着很强的关系,但是没有从数学的角度把他们之间的关系完全掲示出来。

除了事务处理技术领域,谈及事务一致性外,还有其他领域,都在提及一致,如操作系统领域会涉及cache一致性、大型分布式缓冲软件系统会涉及缓冲一致性、CAP中的C也是在谈及一致性,这些不同领域的一致性有什么不同?他们之间的本质是否存在某种必然的联系?

事实上,一致领域存在诸多的问题,他们可以用“一致性24字问题”加以概括:

  1. 范围不清:是从整体上描述数据正确性问题存在边界不清晰的问题,如数据库的一致性和Cache一致性、分布式一致性等之间的边界模糊,这使得各个领域似乎都在解决一致性问题,但都各自为战,不能形成有效的统一的体系系统化地解决数据正确性问题。

  2. 定义不明:指每个领域内的一致性的定义是不明确的,缺乏形式化的表达,即缺乏科学的定义方式,这表明我们并没有深入理解其本质问题。

  3. 多意:在数据库中,一致性的含义有不同的内容,如完整性约束表达的一致性,有ACID的C表达的因并发操作同一对象导致的一致性,因此一致性这个词是存在多种解释的,这会使得学习数据库的人困惑不解。

  4. 多词:在数据库中,一致性和数据异常和数据正确性等,似乎存在着某种关系,但是却用了不同的词表达,且词与词之间的含义、关系是不明确的,这也会使得学习数据库的人困惑不解。根据文献[6]可推知,有冲突环图一定不一致性(有环是充分条件非必要条件);但不能知道不一致一定是有环(有三个数据异常游离于冲突环外,分别是:Dirty Read、Dirty Write、Intermediate Read);

  5. 理论有缺:事务一致性依赖的可串行化理论不完备;可串行化不能消除所有的数据异常;冲突可串行化也不能消除所有的数据异常(根据文献[6]需要处理如Dirty Read等特例)。

  6. 扩展无法:事务一致性和分布式一致性的关系不清晰,导致单机系统的数据正确性无法扩展到分布式系统中(目前只能依据经验解决而不能有明确的定义和规则):在分布式数据库系统中,CAP的C和ACID的C之间的关系是什么?“严格可串行化”是最严格的一致性语义,这个概念是结合了可串行化和线性一致性的语义而成的,适用于分布式事务型数据库系统;但分布式系统是否只存在“严格可串行化”这一种一致性?

  7. 系统难评:无论是单机还是分布式数据库,都缺乏一致性检测体系。Oracle数据库有可串行化隔离级别,但是在运行了若干年之后,被发现其所谓的可串行化隔离级别不能消除Write Skew数据异常,因此是一个假的数据异常;而其他的数据库系统,号称实现了可串行化,但是没有一个验证标准,可把数据库作为一个黑盒子进行一致性验证;数据库厂商提供不了数据正确性的评测方法,理论界也不能提供(参考“第三代分布式数据库(3)——一致性八仙图”关于“一致性八仙图”和Jepsen的讨论)。

相关概念混淆:无论是学术界还是工程界,因为一致性缺乏明确的定义,因此不同人对该概念有着不同的理解。有些词经常混淆在一起,如事务范围内容和ACID相关的一致性,分布式系统下和线性一致性、因果一致性等相关的分布式一致性,强一致性(多指多副本复制时被复制的数据与原始数据自己的一致性),最终一致性等。

一言以蔽之:

迷失杜小勇大结局,迷失的情感杜小勇和富婆大结局(3)

从历史的角度看数据正确性

让我们沿着时间的轨迹来梳理人类对于数据异常的认知过程,感悟技术的进步与发展过程。

数据异常,至今尚没有明确的定义。业界对于数据异常,只有一个个具体的数据异常名称,每个数据异常对应一个形式化表达式。即过往对于数据异常的研究,止于具体的案例(如脏写、脏读、不可重复读、幻读等数据异常),且不能让人明白各种数据异常之间的关系。在事务处理领域,尚存在一些基本问题,如“数据异常究竟有多少个?数据异常之间的关系是什么?”是不为人所知晓的。

本节讨论数据异常的研究历史和其中存在的一些问题。在事务处理技术的发展历史上,不同人定义过不同的数据异常。

1. ANSI/ISO-SQL标准定义的数据异常

ANSI/ISO-SQL标准[7]定义了四种数据异常,分别是:脏写(Dirty Write)、脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(/Phantom)数据异常。

这四种数据异常,后文会另行介绍,在此不再赘述。

2. Jim Gray等定义的数据异常

数据异常,不只是ANSI/ISO-SQL标准所定义的四种,还有更多数据异常。Jim Gray等人在参考文献[6]中定义了八种数据异常,除了ANSI-SQL标准定义的四种外,新增加了丢失更新(Lost Update)、游标丢失更新(Cursor Lost Update)、读偏序(Read Skew)和写偏序(Write Skew)数据异常。

该参考文献给出的新的数据异常的形式化定义如表1所示。其中,丢失更新的定义存在难以理解之处。例如:

H1 = R1[x]...W2[x]...W1[x]...C1 (丢失更新异常的定义)H2 = R1[x=100] R2[x=100] W2[x=120] C2 W1[x=130] C1(丢失更新示例)

H1是丢失更新数据异常的形式化定义,但该定义中的“W2[x]...W1[x]”构成一个脏写异常,因此该形式化定义和脏写异常的定义冲突,不能判断该定义究竟应属于哪种数据异常。该文献对丢失更新举例如H2,其中“W2[x=120] C2 W1[x=130]”中存在有“C2”这使得该示例与脏写异常不存在冲突之处,因此其定义应该更新为H3。

H3 = R1[x]...W2[x] ...C2...W1[x]...C1 (丢失更新异常的新定义)

游标丢失更新数据异常的定义类似丢失更新,出现在支持“游标(Cursor)”功能的数据库系统中,如DB2、Informix、MySQL、PostgreSQL等。

读偏序数据异常,其定义为H4。对于事务T1和T2,是两个事务作用在两个变量上,按照冲突可串行化理论,在变量x上形成RW冲突,在变量y上形成WR冲突。但是,为什么在“W2[y]...C2...R1[y]”中需要有“C2”存在呢?如果不采用读已提交规则,则完全可以存在H5的方式。所以,是否存在一种可能,使得H4和H5,都是读偏序异常呢?

H4 = R1[x]...W2[x]...W2[y]...C2...R1[y]...(C1 or A1)(读偏序异常的定义)H5 = R1[x]...W2[x]...W2[y]...R1[y]...(C1 or A1)(读偏序异常的另外一种形式)

写偏序数据异常的定义为H6。对于事务T1和T2,是两个事务作用在两个变量上,按照冲突可串行化理论,在变量x上形成RW冲突,在变量y上形成RW冲突,即该异常有两个RW冲突这点不同于读偏序异常的一个RW一个WR冲突。而该定义中“C1 and C2”位于表达式的最后,但是,H7中只是把“C1”提前到“W2[x]”,这样对于事务T2而言,无任何影响,所以是否我们可以认为,H6存在H7这样的等价变形形式?即是不是H6并没有把写偏序的定义完整表达?

H6 = R1[x]...R2[y]...W1[y]...W2[x]...(C1 and C2 occur)(写偏序异常的定义)H7 = R1[x]...R2[y]...W1[y]...C1...W2[x]..C2(写偏序异常的定义另外一种形式)

表1 《A Critique of ANSI/ISO-SQL Isolation Levels》定义的新的数据异常

迷失杜小勇大结局,迷失的情感杜小勇和富婆大结局(4)

首页 1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.