跳轉到內容

PostgreSQL/ACID

來自 Wikibooks,開放世界的開放書籍


ACID 正規化是資料庫管理系統的基石。 對於資料修改,該正規化要求事務必須滿足某些要求,並且必須保證這些要求不僅在常規操作期間滿足,而且在所有輕微和重大問題(如互鎖、連線丟失、伺服器宕機、磁碟已滿、磁碟崩潰等)的情況下也得到滿足。

請特別注意,這些要求是在事務級別上定義的。 它們被命名為

  • 原子性
  • 一致性
  • 隔離性
  • 永續性

如上一章所示,每個寫入操作或一系列寫入操作都嵌入到一個事務中。 讀取操作也可能是事務的一部分。

原子性

[編輯 | 編輯原始碼]

事務中的所有寫入操作都建立一個單一的、不可分割的整體。 它們要麼全部成功,要麼全部失敗。 針對不同表的寫入操作就是這種情況的一個例子。 另一個例子是在轉賬過程中,一個人的銀行賬戶減少,另一個人的銀行賬戶增加。

一致性

[編輯 | 編輯原始碼]

在事務結束時,資料庫處於一致狀態。 所有定義的完整性規則,如唯一性、檢查約束、外部索引鍵和主鍵定義都得到滿足。 此外,所有相關觸發器都已成功執行。 在事務的生命週期中,這些規則可能會被破壞,例如,在雙向連結串列中,兩個節點之間的外部索引鍵關係可能會被破壞。

本質上,事務將資料庫從一種一致狀態轉移到另一種一致狀態。

隔離性

[編輯 | 編輯原始碼]

在很多情況下,事務會並行執行。 但是資料庫系統會讓它們覺得它們是按順序執行的。 根據所選的隔離級別,競爭的讀寫操作的確切行為可能會有所不同。 儘管如此,PostgreSQL 在所有情況下都能保證,讀操作永遠不會阻塞寫操作,寫操作永遠不會阻塞讀操作。

永續性

[編輯 | 編輯原始碼]

永續性保證,在事務成功終止(COMMIT)之後,即使發生磁碟崩潰等重大問題,所進行的更改也會保留在資料庫中。 PostgreSQL 透過將資料更改不僅儲存在資料檔案中,而且還冗餘地儲存在預寫日誌 (WAL) 檔案中來實現這一點。 因此,建議將資料檔案和 WAL 檔案儲存在不同的磁碟上。


華夏公益教科書