數據庫ACID解析

基本含義

在數據庫系統中,事務所提供的安全保證,使用ACID來描述,分別代表原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持久性(durability)。

但是在今天,ACID幾乎成爲數據庫廠商的一個營銷術語,當一個系統聲稱自己符合ACID時,實際上能期待的是什麼保證,並不是很清楚。

原子性

ACID的原子性,描述的是當客戶想進行多次的寫入,但是在一些寫操作處理完成後,出現了故障的情況。

例如當一組寫操作被分組到一個原子事務中,當部分寫操作完成,但是部分寫操作還未進行時,出現了故障,比如進程崩潰、網絡連接中斷,磁盤沒有空間等,由於這些錯誤,導致後續的寫操作無法完成,則該事務不能提交,事務將被中止,而且數據庫必須丟棄或者撤銷該事務之前已經完成的任何寫入操作。

如果事務被中止,則應用程序可以確定其沒有改變任何東西,應用程序可以安全地重新進行事務操作。

ACID的原子性定義的特性是:能夠在錯誤時中止事務,丟棄該事務進行的所有的寫入變更的能力。

一致性

ACID中一致性的概念是,對數據的一組特定的陳述必須始終成立。

比如,在會計系統中,所有賬戶上的整體的借貸必須互相可抵。

如果一個事務開始於一個滿足這些不變量的有效數據庫,且在事務處理期間的任何寫入操作都保持這種有效性,則可以確定,不變量總是滿足的。

一致性的概念取決於應用程序對於不變量的定義。應用程序負責正確定義其事務,並保持一致性,這不是數據庫負責的範疇。

原子性、隔離性和持久性是數據庫的屬性,但是一致性在ACID意義上,是應用程序的屬性。

隔離性

大多數數據庫都會被多個客戶端訪問,如果多個客戶端訪問數據庫中相同的記錄數據,則可能會遇到併發的問題。

ACID的隔離性意味着,同時執行的事務是互相隔離的,互相不能冒犯。傳統的教科書將隔離性形式化爲可序列化,意味着每個事務都可以假裝其是唯一在整個數據庫上運行的事務,數據庫確保當多個事務已經提交時,結果與多個事務按照順序提交是一樣的。儘管實際上它們可能是併發運行的。

但是在實際實現時,越高的隔離性會帶來越大的性能損耗,因此一般的數據庫會提供不同級別的隔離性,以滿足不同性能需求。

持久性

持久性表示的是一個承諾。即一旦事務已經成功完成,則即使發生硬件故障,或者數據庫崩潰,寫入的任何數據也不會丟失。

在單節點數據庫中,持久性意味着數據已經被寫入非易失性存儲設備,通常還包括預寫日誌或者類似的文件。

在分佈式數據庫中,持久性意味着數據已經成功複製到一些節點。

完美的持久性是不存在的,如果所有的硬件和備份都被銷燬,則沒有任何數據庫能夠拯救數據。

發佈了68 篇原創文章 · 獲贊 4 · 訪問量 9136
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章