天天看點

什麼是資料庫的ACID測試?

        鑽石顯然是十分貴重的東西,正因為貴重,是以我們會嚴肅的區分真品和膺品。确定鑽石是真是假的一個簡單而(至少在電影裡)流行的測試是讓它在一片玻璃上滾。因為鑽石是衆所周知最堅硬的材料,真正的鑽石很容易切割玻璃表面;而赝品,尤其是用玻璃本身制作的赝品,則無法做到。

        對軟體開發人員來說,資料庫也有這麼貴重。如果使用資料庫的話,需要確定它安全存儲資料并允許您将來檢索資料。您還希望資料庫允許多個程式使用資料庫而不會互相幹擾。為了示範,假設您擁有一個銀行。銀行的資料庫必須具備下列功能:

    • 安全存儲合适的資料
    • 快速檢索合适的資料
    • 支援多個并行的使用者會話

        這些任務可以合稱為 ACID 測試;ACID 是 Atomicity(原子性)、Consistency(一緻性)、Isolation(隔離性)和 Durability(持久性)的縮略詞。 

         原子性 指資料庫操作可以組合到一起,當作單個單元處理。 

         一緻性 保證此單個單元(或事務)中的所有操作要麼都成功執行,要麼都不執行。換句話說,資料庫不能處于未完成狀态。要了解這些特征為何如此重要,可考慮這樣一個銀行事務:即錢從儲蓄帳戶轉到支票帳戶。如果在将錢從儲蓄帳戶減去之後、加到支票帳戶之前,轉帳處理失敗,那麼您就會變窮,而銀行将會有一個憤怒的(前)客戶!原子性使得這兩個操作 —— 從儲蓄帳戶減錢和向支票帳戶加錢 —— 被當作單個事務進行處理。一緻性保證事務中的這兩個操作同時成功或同時失敗。這樣,您的錢就不會丢失了。

         隔離性 指獨立的資料庫事務集合以不互相沖突的方式執行。仍使用這個銀行類比,考慮兩個客戶同時在帳戶之間轉移資金。資料庫必須分别跟蹤兩個轉帳;否則,資金可能進入錯誤的帳戶,而銀行可能得多兩個憤怒的(前)客戶。

        持久性 保證資料庫是安全的,不會異常終止。當電源斷電時,如果電視或計算機不工作,這可能是小麻煩,但同樣的事情對于資料庫來說就不一樣了。如果銀行計算機在轉移資金時掉電,導緻交易丢失,您就不會是個快樂的客戶了。持久性保證如果資料庫在資金轉移期間異常終止,則當資料庫重新啟動時,它将能夠恢複交易并繼續正常的操作。