天天看點

資料庫必知詞彙:ACID

對于關系型資料庫的事務而言,具有四個強一緻性(Strong Consistency)要求,也稱為ACID:

(1) 原子性(Atomicity):

事務裡的所有操作要麼全都執行完成,要麼全都不執行。隻要有一個操作失敗,整個事務就失敗,事務會復原至它們最初的狀态。

(2) 一緻性(Consistency):

資料庫要一直處于一緻的狀态,事務的運作不會改變資料庫原本的一緻性限制。

(3) 隔離性(Isolation):

事務的執行不被其他事務幹擾。如果一個事務要通路的資料正在被另外一個事務修改,隻要另外一個事務未送出,它所通路的資料就不受未送出事務的影響。

(4) 持久性(Durable):

一旦事務送出後,它所做的修改将會永久的儲存在資料庫上,即使出現系統故障也不會丢失。

在事務完成以後,該事務對資料庫所作的更改便持久的儲存在資料庫之中,并不會被復原。由于一項操作通常會包含許多子操作,而這些子操作可能會因為硬體的損壞或其他因素産生問題,要正确實作ACID并不容易。ACID建議資料庫将所有需要更新以及修改的資料一次操作完畢,但實際上并不可行。

目前,資料庫管理者通常使用以下幾種政策來執行ACID。一種增強原子性和持久性的方法是使用Write-ahead logging政策,在這種政策下任何事務細節都首先寫入日志,其中包括重做和撤消資訊。這種方法可以確定在任何類型的資料庫故障情況下,資料庫都可以檢查日志并将其内容與資料庫的狀态進行比較。

另一種增強原子性和持久性的方法是影子分頁(Shadow-paging).在這種方法中,當需要修改資料時則建立一個影子頁面。對于資料的更新請求會被寫入影子分頁中,而不是寫入資料庫中的實際資料,而隻有在編輯完成時才會修改資料庫本身。

還有一種政策稱為兩階段送出協定,該政策在分布式資料庫系統中非常有效。該協定将修改資料的請求分為兩個階段,即請求階段和送出階段。在請求階段,受到事務影響的所有DBMS必須确認它們已經收到了事務并具有執行事務的能力。而所有相關的DBMS接收到确認之後,送出階段就完成了,此時資料才會被真正地修改。

資料來源:

Wikipedia: ACID

http://taggedwiki.zubiaga.org/new_content/95063fc8cca3e3b4a3238ead2d9aa83a

What does ACID mean in Database Systems? | Database.Guide

https://database.guide/what-is-acid-in-databases/

The ACID Model for Database Management Systems

https://www.lifewire.com/the-acid-model-1019731

What is ACID in Databases? - Definition from Techopedia

https://www.techopedia.com/definition/23949/atomicity-consistency-isolation-durability-acid