14.2 InnoDB 和 ACID 模型

kakaxi9521發表於2020-10-30

14.2 InnoDB 和 ACID 模型

ACID 模型是資料庫設計的準則。ACID模型的設計初衷是為了防止在軟體或硬體crashes的時候資料損壞。

  • A: atomicity.

  • C:    consistency

  • I:     isolation

  • D:    durability

Atomicity 原子性

      原子性是指一個事務是一個不可分割的工作單元,其中的操作要麼都做,要麼都不做;如果事務中一個sql語句執行失敗,則已執行的語句也必須回滾,資料庫退回到事務前的狀態。

實現:     

InnoDB 儲存引擎提供兩種事務日誌: redo log(重做日誌)和undo log(回滾日誌)。其中 redo log 用於保證事務永續性undo log則是事務原子性和隔離性實現的基礎。

     實現原子性的關鍵,是當事務回滾時能夠撤銷所有已經成功執行的sql語句。 InnoDB 實現回滾,靠的是undo log:當事務對資料庫進行修改時,InnoDB會生成對應的undo log; 如果事務執行失敗或呼叫了rollback,導致事務需要回滾,便可以利用undo log中的資訊將資料回滾到修改之前的樣子。

    undo log屬於邏輯日誌,它記錄的是sql執行的資訊。當發生回滾時,InnoDB會根據undo log的內容做與之相反的工作: 對於每個insert,回滾時會執行delete;對於每個delete,回滾時會執行insert;對於每個update,回滾時會執行一個反向的update,把資料改回去。

Consistency 一致性

一致性是無論在什麼情況下,資料的完整性不被破壞。一致性與mysql與下列特性有關:

  • InnoDB doublewrite buffer

  • InnoDB crash recovery

一致性指事務執行結束後,資料庫的完整性約束沒有被破壞,事務執行的前後都是合法的資料狀態。

實現:

可以說一致性是事務追求的終極目標:原子性,永續性,隔離性都是為了保證資料狀態的一致性。

Isolation 隔離性

與原子性、永續性側重於研究事務本身不同,隔離性研究的是不同事務之間的相互影響。隔離性是指,事務內部的操作與其他事務隔離的,併發執行的各個事務之間不能相互干擾。嚴格的隔離性,對應了事務隔離級別中的serializable(可序列化),但實際應用中處於效能方面的考慮很少會使用可序列化。

Durability 永續性


部分內容參考以下文件:

https://www.cnblogs.com/kismetv/p/10331633.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2730668/,如需轉載,請註明出處,否則將追究法律責任。

相關文章