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

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

表13. 已知的数据异常与问题思考

前两节讨论了不同组织或学者发现并定义了不同个数的数据异常,ANSI/ISO-SQL标准定义了四种而Jim Gray等定义了八种,自然而然的,我们会产生这样一个疑问:究竟还有没有新的数据异常?

如表2,汇总了19种数据异常。该表的“异常名称”列还给出报告该异常的文献和文献发表的年份,可以看出,从1992年到2019年近三十年的时间里,不断有新的数据异常被报告。由此,我们会产生一系列疑问:究竟有多少种数据异常?数据异常之间,有什么必然联系?数据异常的命名,是不是也是有规律可循的?新的数据异常,应该在哪个隔离级别下被消除(即数据异常和隔离级别的关系,究竟是什么)?

表2中,“Cross-Phenomenon”数据异常,是四个事务作用在两个变量上构成的数据异常,这样的数据异常,为什么是“数据异常”?为什么该异常和其他的数据异常有不同?不同之处又在哪里?还有,上一节我们讨论了写偏序异常,而表2给出了一个称为“谓词写偏序(Predicate-Based Write Skew)”的数据异常,这两类数据异常看起来有些相似之处,都是两个事务在两个变量上存在两个RW冲突关系,但是后者的读操作带有谓词,那么,是否每一个带有读操作的数据异常都对应有一个谓词类数据异常?如果是这样,为什么到目前为止,只报告有幻读和谓词写偏序数据异常这两个谓词类的数据异常,而没有报告出更多的谓词类数据异常?

另外,表2中,第十个和第十一数据异常,表达式相同,但却是被不同的参考文献在不同的场景下报告得出:在2014参考文献[3]和2017年参考文献[1]报告的“fractured reads”是一个不区分分布式环境的数据异常,在2014年参考文献[2]报告的“Serial-Concurrent-Phenomenon”是一个分布式环境下的数据异常。根据这样的情况,我们可以思考,为什么同样的数据异常会被命名不同且数据异常?数据异常和分布式环境有着什么样的关系?

再如,表2中,大部分数据异常都是涉及单个变量的数据异常,而 “Read Skew”却有两个变量,这是为什么?根据这样的情况,我们可以思考,是否会有三个变量或更多变量的数据异常存在?数据异常和变量个数之间有着什么样的关系?

表2表明数据异常有很多个,他们都是一个个具体的案例,我们可以思考:如何对这些数据异常分类?是否可以从数据异常整体的角度,给数据异常一个简洁而统一的科学定义?

前述这些问题,表明数据异常的研究,尚不充分。这就需要我们对数据异常开展系统化的研究工作。参考文献[5]给出了如何对数据异常开展体系化研究的工作。

表2 已知数据异常汇总表[3]

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

表2

4. 为什么会产生数据异常?

可串行化理论源自串行化的思路,直观地看,如果所有的事务都串行执行,则数据的一致性不会被破坏,即在单个事务的操作下,事务使得数据能够从一个初始的合法状态变迁为事务结束后的另一个合法状态。因此不会有数据异常发生。

而一个事务对数据的操作,抽象后无非是两种,读操作和写操作。如果有两个或两个以上的事务并发地操作相同的数据项,则存在四种组合情况,分别是读读、读写、写读和写写。其中,只有读读不会改变数据的状态,而其他三种组合都会改变数据的状态,因此存在出现数据异常的可能。但是,这并不意味着数据异常一定会出现。

例如,表2中的脏写定义如H8。该异常的定义中包括了事务的提交或回滚的状态,且“any order”表明T1和T2的提交或回滚的状态可以交换位置,因此存在表3中的八种情况。该表采用数据状态变迁方法,观察不同操作对数据状态的变迁变化,来观察数据一致性的保持情况,其中事务执行过程中允许数据处于不一致性的状态,但事务结束必须使得数据处于一致性状态。

H8 = W1[x]...W2[x]...((C1 or A1) and (C2 or A2) in any order)

表3中编号1到6的存在数据不一致的情况,但编号7和编号8实际上不存在数据不一致,但是“WW”却被定义为脏写,这不合理。或者说,为什么没有文献讨论脏写因何会被这样定义?作者的理解是,对于编号7和编号8的情况,因为都涉及了回滚操作,而这样的回滚操作是浪费计算资源的操作,与其允许其发生而浪费计算资源,倒不如禁止“WW”发生而节省计算资源为好,因此“WW”被直接定义为了数据异常。但是这样的定义方式,不利于理解“什么是数据异常”。

因此,我们提出疑问:究竟是什么原因使得数据异常产生?前述这些问题,不由得促使我们深思。

表3 “W1[x]...W2[x]”的事务状态展开的八种情况表

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

表3

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

从应用的角度理解数据正确性

数据库教科书,通常会抽象地、不完备地、且非数学方式不严谨地讲四个数据异常(ANSI-SQL标准定义的Dirty Write、Dirty Read、Non-repeatable Read、Phantom),读后会很容易“不理解”!

其实,结合实际的应用背景,可以很容易地理解数据异常。

1. 对账应用——对账错误

金融交易中,对账是一个重要的工作,通过对账,可知道“总账目应当是平衡的”。

这个事情,在数据库中,对应事务的示例如:

如图1所示(分布式环境下,一个被称为Serial-Concurrent-Phenomenon的异常),写事务正在执行从Na节点的X账户转账10元到Nb节点Y账户。当Na节点完成提交,而Nb节点尚未提交,此时,一个读事务的读操作,从Na节点读取到的是新值“X-10”,而从Bb节点读取到的是旧值“Y”,对账写事务之前的“X Y”与读事务读到的“X-10 Y”,账户总账不平。

如果数据库系统的实现存在问题,单机系统下,该异常也能出现。

该异常本质上是“Write Skew Committed”类异常。

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

上一页1234下一页

栏目热文

文档排行

本站推荐

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