图5 幻读数据异常
Lost Update使得用一个合法的更新过的值不存在而不能被读取到,从而丢失了正常的正确的记账结果。
Write Skew互相破坏了对方数据在读取数据前保持的一致性,因此用两个互不一致的状态参与计算,致使计算结果有误。
其实,不只是有这些异常现象,在论文《数据库管理系统中数据异常体系化定义与分类》(本文的内容基于该文,请先阅读该论文)中系统总结了各种不同一致的数据异常现象,读者可详细参考。
数据异常的新发展
继ANSI/ISO-SQL标准定义了四种数据异常和Jim Gray定义了八种数据异常之后,Andy通过定义隔离级别也对数据异常进行定义(采用两种方式,一是基于冲突图定义环来定义数据异常,二是把几个“不能纳入环方式定义数据异常”的几个情况作为特例加以定义)。
之后,如表2所示,从二十世纪的九十年代到二十一世纪的二十年代,三十多年间,不同的参考文献分别零星的发现、定义了十几个不同的数据异常,这使得数据异常的数目发生了变化,进一步扩展了人类对于数据异常的认知。众多的数据异常虽然被不断报告,但是没有引发人类对于数据异常的系统化思考,比如,存在的问题有:究竟有多少个数据异常?十几个已知的数据异常之间有什么关系?这十几个数据异常怎么对应到ANSI/ISO-SQL标准定义的四个隔离级别下?同理,这十几个数据异常怎么对应到Jim Gray定义的六个隔离级别下?数据异常究竟有什么价值?
再之后,进入二十一世纪,参考文献《数据库管理系统中数据异常体系化定义与分类》系统地对数据异常进行梳理和思考,通过形式化的方法,尝试定义所有的数据异常,并试图研究数据异常的本质和对事务处理技术的影响,这使得对数据异常的研究进入一个新的阶段。
更进一步信息可参考文献《数据库管理系统中数据异常体系化定义与分类》(http://www.jos.org.cn/jos/article/pdf/6442)或者《硬核干货 | 数据异常的本质和价值详解》(https://www.modb.pro/db/168385)。
为什么要100%保证数据正确性?
请思考几个问题:
您能说出多少个数据异常?教科书能说出多少个数据异常?
有谁能说出哪些数据异常在哪些场景中会出现?从而能指导你在应用开发中去避免数据不一致性现象?
有谁能说清楚数据异常和隔离级别的关系?
有谁能说出数据异常和数据库系统的性能的关系?
如果您不能回答这些问题,请问数据异常是否为您的基于数据库的应用开发带来了心智负担?是否您会担心数据的不一致性现象?
如果我们不想迷失在“一致性的迷雾”中,如果我们想清晰地认知数据正确性,如果我们不想基于数据库的应用存在任何心理负担(担心数据不一致),如果我们想在数据正确性方面永远高枕无忧,那么,100%确保数据正确性,是非常必要的。
另外,在100%保证数据正确性的同时,可得到最大化的并发性能。鱼和熊掌可兼得。这一点,是可证明的。
换句话说,隔离级别是无用的,只保留可串行化隔离级别即可(未来进一步探讨可串行化隔离级别存在的问题)。
参考文献
[1] Andrea Cerone, Alexey Gotsman, and Hongseok Yang. Algebraic laws for weak consistency. International Conference on Concurrency Theory (CONCUR 2017), LIPICS 85, pages 26:1-26:18, 2017.
[2] Lamport L, Shostak R, Pease M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems (TOPLAS), 1982,4(3):382-401
[3] P. Bailis, A. Fekete, J. M. Hellerstein, A. Ghodsi, and I. Stoica, “Scalable atomic visibility with ramp transactions,” in SIGMOD, 2014, pp. 27–38.
[4] Hal Berenson, Philip A. Bernstein, Jim Gray, Jim Melton, Elizabeth J. O'Neil, Patrick E. O'Neil:A Critique of ANSI/ISO-SQL Isolation Levels. SIGMOD Conference 1995:1-10
[5] 李海翔,李晓燕,刘畅,杜小勇,卢卫,潘安群.数据库管理系统中数据异常体系化定义与分类.软件学报,2022,33(3):0
[6] A. Adya, B. Liskov, and P. O’Neil. Generalized isolation level definitions. In Proceedings of the 16th International Conference on Data Engineering, ICDE ’00, pages 67–78, Washington, DC, USA, 2000. IEEE Computer Society.
[7] ANSI X3.135-1992, American National Standard for Information Systems – Database Language – SQL, Nov 1992.
作者简介
李海翔,前腾讯、字节跳动等数据库首席架构师,中国人民大学、北京林业大学硕士企业导师,CCF大数据、数据库专委会执行委员,北京市、深圳市科技进步一等奖得主。著有《数据库查询优化器的艺术》《数据库事务处理的艺术》《分布式数据库原理、架构和实践》等。申请与授权专利100 ,SIGMOD、VLDB等大会发表论文若干篇,参与国家863重大专项、核高基等多项目研发。
本文经授权转载自微信公众号「那海蓝蓝知数行云」,如需转载,请联系对方授权。