大部分關聯式資料庫並不真的支援ACID
大部分關聯式資料庫宣稱與NoSQL的區別是100%支援ACID事務,在現實中,很少有關聯式資料庫包括Oracle能提供正式的ACID保證,即使他們宣傳自己是提供真正ACID。
那麼,誰在撒謊呢?
來自2013年文章When is "ACID" ACID? Rarely. | Peter Bailis認為:
ACID的教科書正式定義隔離是序列化serializability ,即執行一組事務的結果應該相當於這些事務的序列執行,這就意味著每個運算元據庫的事務好像只有它們自己一樣,這能確保資料庫的正確性和一致性,帶有序列化的資料庫(ACID中I)提供了任意讀寫事務並且確保一致性(ACID中的C)或正確性,沒有序列化,ACID(特別是一致性)將無法得到保證。
大部分提供ACID的資料庫並不提供序列化,作者在文章中列出了18種資料庫中預設的只有三個提供序列化(default isolation列),只有9個將序列化作為選項提供(Maximum Isolation列):
那麼,誰在撒謊呢?
來自2013年文章When is "ACID" ACID? Rarely. | Peter Bailis認為:
ACID的教科書正式定義隔離是序列化serializability ,即執行一組事務的結果應該相當於這些事務的序列執行,這就意味著每個運算元據庫的事務好像只有它們自己一樣,這能確保資料庫的正確性和一致性,帶有序列化的資料庫(ACID中I)提供了任意讀寫事務並且確保一致性(ACID中的C)或正確性,沒有序列化,ACID(特別是一致性)將無法得到保證。
大部分提供ACID的資料庫並不提供序列化,作者在文章中列出了18種資料庫中預設的只有三個提供序列化(default isolation列),只有9個將序列化作為選項提供(Maximum Isolation列):
[img index=1]
圖中標註S的表示提供序列化,RC表示read committed; RR表示repeatable read等。
這些關聯式資料庫預設並沒有提供序列化,取而代之的是幾個弱變種,對於一個資料庫來說,沒有理由不支援序列化,我們已經擁有很好的演算法,我們也已經在ACID可擴充套件伸縮方面取得飛躍進步,那麼預設為什麼不提供序列化呢?
一個關鍵原因是效能,序列化隔離級別會限制併發,傳統技術如兩段鎖2PC相比代價又非常昂貴,另外,想同時獲得高可用性和序列化又是不可能的(這些關聯式資料庫即使透過它們現在的弱模型也不能提供高可用性),第三個預設不提供序列化的理由是在弱模型(相對序列化隔離級別低一些的隔離級別)下事務也降低了衝突機率,不太會死鎖。但是,這些好處並不是免費的,在這種弱模型下一致性異常還是不斷呈現上升趨勢。
[該貼被admin於2015-06-28 21:09修改過]
相關文章
- Web Sql 關聯式資料庫WebSQL資料庫
- 關聯式資料庫設計資料庫
- 關聯式資料庫之父 (轉)資料庫
- 關聯式資料庫與文件資料庫對比資料庫
- 關聯式資料庫分片原則資料庫
- 資料庫 - 關聯式資料庫標準語言SQL資料庫SQL
- 從關聯式資料庫遷移到NoSQL雲資料庫資料庫SQL
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- 關聯式資料庫的封建迷信資料庫
- 從關聯式資料庫遷移到CouchDB資料庫
- 資料庫事務 ACID資料庫
- 從關聯式資料庫向NoSQL遷移資料庫SQL
- 關聯式資料庫SQL語言略解資料庫SQL
- 事件溯源將顛覆關聯式資料庫! - Remy事件資料庫REM
- 事件溯源超越關聯式資料庫 - confluent事件資料庫
- 規劃關聯式資料庫學習筆記資料庫筆記
- 在關聯式資料庫中儲存RDF (轉)資料庫
- 關聯式資料庫SQL語言詳解(轉)資料庫SQL
- 鍵值資料庫與關聯式資料庫有沒有融合的可能?資料庫
- 資料庫關聯問題資料庫
- 響應式關聯式資料庫處理R2DBC資料庫
- SQL資料庫真的已經不再那麼重要了嗎?SQL資料庫真的不支援雲端計算嗎?SQL資料庫
- 主流關聯式資料庫鎖實現的區別資料庫
- 關聯式資料庫比較:SQLite vs MySQL vs PostgreSQL資料庫SQLiteMySql
- 關聯式資料庫和NoSQL結合使用:MySQL + MongoDB資料庫MySqlMongoDB
- 物件導向的關聯式資料庫設計(轉)物件資料庫
- NoSQL資料庫探討之一 - 為什麼要用非關聯式資料庫?SQL資料庫
- Apache Kafka不是資料庫:資料庫+Kafka=完整ACID - fivetranApacheKafka資料庫
- 如何將傳統關聯式資料庫的資料匯入Hadoop?資料庫Hadoop
- 使用反應式關聯式資料庫連線規範R2DBC操作MySQL資料庫資料庫MySql
- 頁面上怎麼從不同資料庫取數並關聯計算?資料庫
- 資料庫系統原理-關聯式資料庫的規範化理論總結資料庫
- 【筆記】關係型資料庫架構設計基石之ACID筆記資料庫架構
- 基於記憶體的關聯式資料庫memsql初探記憶體資料庫SQL
- 寫給關聯式資料庫開發者的 TDengine 入門指南資料庫
- 關聯式資料庫索引設計和優化器前言資料庫索引優化
- 關聯式資料庫的幾種設計正規化資料庫
- 金融級分散式關聯式資料庫OceanBase 2.2版正式釋出分散式資料庫