【資料庫理論】 ACID和BASE的比較
傳統關係型資料庫系統的事務都有ACID的屬性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、永續性(Durability)。英文為:
- Atomic: Everything in a transaction succeeds or the entire transaction is rolled back.
- Consistent: A transaction cannot leave the database in an inconsistent state.
- Isolated: Transactions cannot interfere with each other.
- Durable: Completed transactions persist, even when servers restart etc.
- 原子性: 整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
- 一致性: 在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。
- 隔離性: 兩個事務的執行是互不干擾的,一個事務不可能看到其他事務執行時,中間某一時刻的資料。 兩個事務不會發生互動。
- 永續性: 在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。
中譯為:
在資料庫系統中,事務的ACID屬性保證了資料庫的一致性,比如銀行系統中,轉賬就是一個事務,從原賬戶扣除金額,以及向目標賬戶新增金額,這兩個資料庫操作的總和構成一個完整的邏輯過程,不可拆分,為原子,從而保證了整個系統中的總金額沒有變化。
然而,這些ACID特性對於大型的分散式系統來說,適合高效能不相容的。比如,你在網上書店買書,任何一個人買書這個過程都會鎖住資料庫直到買書行為徹底完成(否則書本庫存數可能不一致),買書完成的那一瞬間,世界上所有的人都可以看到熟的庫存減少了一本(這也意味著兩個人不能同時買書)。這在小的網上書城也許可以執行的很好,可是對Amazon這種網上書城卻並不是很好。
而對於Amazon這種系統,他也許會用cache系統,剩餘的庫存數也許是之前幾秒甚至幾個小時前的快照,而不是實時的庫存數,這就捨棄了一致性。並且,Amazon可能也捨棄了獨立性,當只剩下最後一本書時,也許它會允許兩個人同時下單,寧願最後給那個下單成功卻沒貨的人道歉,而不是整個系統效能的下降。
其實,上面的思想是從得到的啟發,在CAP理論中:
在設計分散式Web服務中,通常需要考慮三個應用的屬性:一致性、可用性以及分割槽寬容性。但是在實際的設計中,不可能這三方面同時做的很好。
由於CAP理論的存在,為了提高效能,出現了ACID的一種變種BASE:
- Basic Availability:基本可用
- Soft-state :軟狀態/柔性事務,可以理解為”無連線”的, 而 “Hard state” 是”面向連線”的
- Eventual consistency:最終一致性,最終整個系統(時間和系統的要求有關)看到的資料是一致的。
在BASE中,強調可用性的同時,引入了最終一致性這個概念,不像ACID,並不需要每個事務都是一致的,只需要整個系統經過一定時間後最終達到是一致的。比如Amazon的賣書系統,也許在賣的過程中,每個使用者看到的庫存數是不一樣的,但最終買完後,庫存數都為0。再比如SNS網路中,C更新狀態,A也許可以1分鐘才看到,而B甚至5分鐘後才看到,但最終大家都可以看到這個更新。
有趣的是,ACID的意思是酸,而BASE卻是鹼的意思,因此這是一個對立的東西。其實,從本質上來講,酸(ACID)強調的一致性(CAP中的C),而鹼(BASE)強調是可用性(CAP中的A)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15747463/viewspace-761026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分散式從 ACID、CAP、BASE 的理論推進分散式
- 比較SQL資料庫和HadoopSQL資料庫Hadoop
- 圖資料庫比較資料庫
- 主流資料庫比較資料庫
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- 常見資料庫SYBASE和SQL SERVER的比較資料庫SQLServer
- oracle資料庫兩表資料比較Oracle資料庫
- 分散式理論(二) - BASE理論分散式
- MongoDB、Cassandra 和 HBase 三種 NoSQL 資料庫比較MongoDBSQL資料庫
- 資料庫比較 PostgreSQL vs MongoDB資料庫SQLMongoDB
- 幾種常用資料庫比較資料庫
- 資料庫事務 ACID資料庫
- 比較兩個資料庫的差異資料庫
- MySQL大量資料入庫的效能比較MySql
- 關閉資料庫比較好的方法資料庫
- BASE理論之思考
- 用PHP連mysql和oracle資料庫效能比較(轉)PHPMySqlOracle資料庫
- 轉享:NoSQL 圖資料庫比較SQL資料庫
- Oracle資料庫遷移方案比較Oracle資料庫
- 磁碟資料庫與記憶體資料庫的特點比較資料庫記憶體
- ORM框架和資料庫對系統效能影響的比較ORM框架資料庫
- influxdb與傳統資料庫的比較UX資料庫
- MySQL 一種比較經濟的資料庫MySql資料庫
- 資料庫理論知識資料庫
- 資料庫概念、原理、理論資料庫
- 分散式事務及其CAP和base理論分散式
- 資料庫內功心法:資料庫基本理論資料庫
- 常見資料庫系統比較之Oracle資料庫(轉)資料庫Oracle
- mysql資料庫中decimal資料型別比較大小MySql資料庫Decimal資料型別
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- MySQL大量資料入庫的效能比較(分割槽)MySql
- 關於資料庫物件版本比較的指令碼資料庫物件指令碼
- delete的統計資料檢視和比較delete
- 團隊動力之社會比較理論
- 關係型資料庫理論資料庫
- 分散式必備理論基礎:CAP和BASE分散式
- 三個大資料處理框架:Storm,Spark和Samza介紹比較大資料框架ORMSpark
- ¡Hola Euler! 圖資料庫的理論基礎:圖論資料庫圖論