NOSQL數據庫能否符合ACID特性?
必須重新理解ACID作為事務系統屬性的含義,而不管底層數據模型如何。
譯自Can NoSQL Databases Be ACID Compliant?,作者 Srinivasan Seshadri。
ACID特性概念傳統上與關系型數據庫相關聯,導致對其在NoSQL系統中適用性的誤解。一些知名網站,例如AWS,斷言NoSQL無法符合ACID特性。與這些觀點相反,ACID(原子性、一致性、隔離性、持久性)并非關系型數據庫所獨有,而是事務處理系統的基石。
讓我們探討這些誤解以及為什么NoSQL數據庫能夠——而且經?!袷谹CID特性。
早期的NoSQL系統優先考慮性能和可用性,經常放松ACID保證,這導致了NoSQL本質上不符合ACID特性的認知。
另一個重要的混淆來源在于對ACID中“C”(一致性)的解釋。許多人錯誤地認為它要求引用完整性約束,而NoSQL數據庫通常不支持這一點。然而,ACID的一致性概念更廣泛,并不固有地要求引用完整性,允許NoSQL數據庫在適當的情況下實現ACID一致性。
ACID的起源
原子性、一致性和持久性屬性是由Jim Gray在其關于事務的開創性論文中提出的。雖然ACID首字母縮略詞后來才出現,但基本概念起源于Gray對事務處理的討論。值得注意的是,Gray對一致性的定義并不依賴于關系型數據庫特有的引用完整性約束。相反,它包含一個更廣泛的概念:
“事務是對狀態的轉換,具有原子性(全部或無)、持久性(效果能夠在故障后存活)和一致性(正確的轉換)的特性。”
Jim Gray和Andreas Reuter后來這樣定義一致性:
“事務是對狀態的正確轉換。作為一個組采取的行動不會違反與狀態相關的任何完整性約束。這要求事務是一個正確的程序?!?/span>
這突出表明,ACID是一個用于確保事務處理系統(無論是否為關系型)正確性和可靠性的框架。
事務處理系統:更廣泛的背景
此外,Gray和Reuter將事務處理系統定義為:
“事務處理系統(TP系統)管理與數據庫交互以表示和操作現實世界狀態的應用程序。它們通常支持分布式、具有嚴格可用性和性能要求的異構環境。歷史上,TP系統開創了諸如容錯存儲、分布式計算以及最值得注意的是ACID特性等概念?!?/span>
甚至在關系型系統之前,例如IBM在20世紀70年代的信息管理系統(IMS),就已經支持ACID事務,遠在該首字母縮略詞被創造出來之前。
ACID特性:分層視角
ACID一致性可以理解為數據庫系統內各個層提供的一組保證:
層級 | 用途 |
查詢層 | 支持 SQL、Cypher、Gremlin、GQL 等查詢語言 |
事務層 | 為操作多條記錄或鍵值對提供事務保證 |
復制層 | 在多個節點之間提供一致的副本復制 |
二級索引層 | 為節點上存儲的記錄提供二級索引 |
存儲層 | 在節點上存儲記錄或鍵值對 |
這些層說明ACID一致性是整個數據庫系統協調保證的結果。特別是,這些保證是由查詢語言或數據模型層以下的層提供的,這些層可以通過引入更多關于該數據庫系統必須確保的完整性約束的概念來增加ACID保證。
一致性:ACID與CAP
一個常見的混淆來源是ACID和CAP(一致性、可用性、分區容忍性)中“一致性”一詞的雙重使用。在ACID中,一致性指的是事務狀態轉換相對于用戶定義約束(例如主鍵、引用完整性)的正確性。在CAP中,一致性表示分布式系統中副本之間的數據一致性。
請注意:
- 在嚴格串行化隔離級別下運行的符合ACID特性的分布式數據庫固有地滿足CAP的一致性(線性化)要求。
- 缺乏CAP一致性(線性化)意味著未能滿足ACID的原子性和嚴格串行化隔離保證。
BASE與ACID的二分法
BASE(基本可用,軟狀態,最終一致性)理念隨著NoSQL數據庫的出現而出現,以解決Web應用程序的可擴展性需求。早期的NoSQL系統優先考慮可用性和分區容錯性,通常會放寬ACID保證。這種區別導致了一種誤解,即NoSQL數據庫無法實現ACID一致性。
然而,NoSQL系統的發展模糊了這些界限。許多現代NoSQL數據庫現在支持:
- 強一致性模型(CAP中的C)
- 具有串行化保證的事務(ACID中的A、I和D)
- 主鍵等約束的強制執行
NoSQL系統中的ACID一致性
一些NoSQL數據庫聲稱具有ACID一致性,并有強大的技術實現作為支撐。但是,請注意,并非所有這些系統都可以在嚴格的串行化隔離級別運行。例如:
- DynamoDB:根據AWS,“DynamoDB支持原子性、一致性、隔離性和持久性(ACID)事務,從而能夠跨表內和跨表中的多個項目實現復雜的業務邏輯?!?提供具有嚴格ACID保證的多文檔事務。
- MongoDB提供具有嚴格 ACID 保證的多文檔事務。
- Aerospike:將在2025年初的8.0服務器版本中發布對嚴格可串行化ACID事務的支持。
- Databricks的Delta Lake:在分布式對象存儲上提供ACID兼容的表存儲。
這些例子表明,NoSQL數據庫能夠并且確實實現了ACID一致性,這使得它們適合于關鍵任務應用程序。
結論
ACID不是關系數據庫的遺留物,而是事務處理系統中的一個基礎概念。現代NoSQL數據庫已經發展到包含ACID保證,挑戰了它們天生就是“BASE”的過時說法。隨著數據庫生態系統的不斷創新,必須重新定義我們對ACID的理解,將其視為事務系統的屬性,而不管底層數據模型如何。
通過消除這些誤解,我們可以更好地理解NoSQL數據庫在為各種應用程序提供可靠、一致和可擴展的解決方案方面的能力。