可串行性
此條目可参照英語維基百科相應條目来扩充。 (2020年4月23日) |
可串行性(英語:Serializability)是指在计算机里一种多个事务先后之间穿插的用于执行正确调度方式的主要准则[1][2],亦是事务之间最高级别的隔离,在并发控制中起着至关重要的作用,其中多个事务并发时的执行顺序要对数据的一致性没有影响。
而可串行化(英語:Serializable)是指并发控制的数据库[3][4]、事务处理以及各种事务性应用程序(例如,事务内存[5]和软件事务内存)的集中式和分布式事务排程。调度的可串行性意味对于存在共同操作对象的多个并发执行的相同事务串行执行结果(如:生成数据库状态、数据值)“等价”于某个“串行化调度”(即连续的受时间上没有事务重叠影响)。
如果事务之间没有共同的操作对象,则事务之间的执行顺序与前后置换都是没有关系的,但是如果事物间存在共同的操作对象,则事务间先后执行顺序需要区分。事务通常是并发执行的(重叠的),因这是最有效的方法。
自20世纪70年代早期以来,在大多数数据库系统(以各种变体)中都使用了一种流行的可串行机制——强两阶段加锁(SS2PL)。
可串行性理论(英語:Serializability theory)为推理和分析可串行化及其技术提供了形式框架。尽管本质上是数学,但下面非正式地介绍了它的基本原理(没有数学符号)。
正确性
可串行性
可串行性 用于保持数据项中的数据处于一致的状态。可串行性是事务排程的属性。 它与数据库事务的“隔离”属性有关。
- 排程的可串行性意味着(在结果,数据库状态、数据值)与“串行进度”(在时间上没有事务重叠)使用相同的事务。它是判断并发事务调度是否正确的主要标准,因此在所有通用数据库系统中都支持它.
- 可串行性背后的基本原理 如下:
- 如果每个事务本身是正确的,即满足一定的完整性条件,则包含这些事务的任何“串行”执行的调度都是正确的(其事务仍然满足其条件):完全的“隔离”彼此之间存在。如果事务之间不存在依赖关系,则事务的任何顺序都是合法的,这是假设的。因此,包含与这些事务的任何串行执行(在结果上)等价的任何串行执行(不一定是串行执行)的调度是正确的。
无法可串行化的调度可能会产生错误的结果。众所周知的例子是使用货币作为借贷账户的交易:如果相关的排程是不可串行化的,那么货币的总数可能不会被保留。钱可以消失,也可以凭空产生。这和其他的可能需要不变保存的是由一个事务写入造成违规一样,并且在另一个事务写入的内容成为数据库中的永久内容之前,并清除“布进式”。如果保持可串行性,则不会发生这种情况。
参考文献
- ^ 那海蓝蓝. 事务的属性--可串行化(Serializability)_数据库_那海蓝蓝的博客-CSDN博客. blog.csdn.net. 2017-03-13 [2020-04-22]. (原始内容存档于2020-08-20) (中文(简体)).
- ^ Simon.Wang. 数据库 - 并发调度的可串行性 原创. blog.csdn.net. 2015-05-12 [2020-04-22]. (原始内容存档于2020-08-20) (中文(简体)).
- ^ Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (1987): Concurrency Control and Recovery in Database Systems (页面存档备份,存于互联网档案馆) (free PDF download), Addison Wesley Publishing Company, ISBN 0-201-10715-5
- ^ Gerhard Weikum, Gottfried Vossen (2001): Transactional Information Systems (页面存档备份,存于互联网档案馆), Elsevier, ISBN 1-55860-508-8
- ^ Maurice Herlihy and J. Eliot B. Moss. Transactional memory: architectural support for lock-free data structures. Proceedings of the 20th annual international symposium on Computer architecture (ISCA '93). Volume 21, Issue 2, May 1993.