可串行性

数据库事务的属性

可串行性(英語:Serializability)是指在計算機里一種多個事務先後之間穿插的用於執行正確調度方式的主要準則[1][2],亦是事務之間最高級別的隔離,在並發控制中起着至關重要的作用,其中多個事務並發時的執行順序要對數據的一致性沒有影響。

可串行化(英語:Serializable)是指並發控制數據庫[3][4]事務處理以及各種事務應用程序(例如,事務內存[5]軟件事務內存)的集中式英語Centralized computing分布式事務排程。調度的可串行性意味對於存在共同操作對象的多個並發執行的相同事務串行執行結果(如:生成數據庫狀態、數據值)「等價」於某個「串行化調度」(即連續的受時間上沒有事務重疊影響)。

如果事務之間沒有共同的操作對象,則事務之間的執行順序與前後置換都是沒有關係的,但是如果事物間存在共同的操作對象,則事務間先後執行順序需要區分。事務通常是並發執行的(重疊的),因這是最有效的方法。

自20世紀70年代早期以來,在大多數數據庫系統(以各種變體)中都使用了一種流行的可串行機制——強兩階段加鎖(SS2PL)。

可串行性理論(英語:Serializability theory)為推理和分析可串行化及其技術提供了形式框架。儘管本質上是數學,但下面非正式地介紹了它的基本原理(沒有數學符號)。

正確性

可串行性

可串行性 用於保持數據項中的數據處於一致的狀態。可串行性是事務排程的屬性。 它與數據庫事務的「隔離」屬性有關。

排程的可串行性意味着(在結果,數據庫狀態、數據值)與「串行進度」(在時間上沒有事務重疊)使用相同的事務。它是判斷並發事務調度是否正確的主要標準,因此在所有通用數據庫系統中都支持它.
可串行性背後的基本原理 如下:
如果每個事務本身是正確的,即滿足一定的完整性條件,則包含這些事務的任何「串行」執行的調度都是正確的(其事務仍然滿足其條件):完全的「隔離」彼此之間存在。如果事務之間不存在依賴關係,則事務的任何順序都是合法的,這是假設的。因此,包含與這些事務的任何串行執行(在結果上)等價的任何串行執行(不一定是串行執行)的調度是正確的。

無法可串行化的調度可能會產生錯誤的結果。眾所周知的例子是使用貨幣作為借貸賬戶的交易:如果相關的排程是不可串行化的,那麼貨幣的總數可能不會被保留。錢可以消失,也可以憑空產生。這和其他的可能需要不變保存的是由一個事務寫入造成違規一樣,並且在另一個事務寫入的內容成為數據庫中的永久內容之前,並清除「布進式」。如果保持可串行性,則不會發生這種情況。

參考文獻

  1. ^ 那海藍藍. 事务的属性--可串行化(Serializability)_数据库_那海蓝蓝的博客-CSDN博客. blog.csdn.net. 2017-03-13 [2020-04-22]. (原始內容存檔於2020-08-20) (中文(簡體)). 
  2. ^ Simon.Wang. 数据库 - 并发调度的可串行性 原创. blog.csdn.net. 2015-05-12 [2020-04-22]. (原始內容存檔於2020-08-20) (中文(簡體)). 
  3. ^ 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
  4. ^ Gerhard Weikum, Gottfried Vossen (2001): Transactional Information Systems頁面存檔備份,存於網際網路檔案館), Elsevier, ISBN 1-55860-508-8
  5. ^ 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.