自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NOSQL數(shù)據(jù)庫能否符合ACID特性?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
ACID不是關(guān)系數(shù)據(jù)庫的遺留物,而是事務(wù)處理系統(tǒng)中的一個(gè)基礎(chǔ)概念?,F(xiàn)代NoSQL數(shù)據(jù)庫已經(jīng)發(fā)展到包含ACID保證,挑戰(zhàn)了它們天生就是“BASE”的過時(shí)說法。

必須重新理解ACID作為事務(wù)系統(tǒng)屬性的含義,而不管底層數(shù)據(jù)模型如何。

譯自Can NoSQL Databases Be ACID Compliant?,作者 Srinivasan Seshadri。

ACID特性概念傳統(tǒng)上與關(guān)系型數(shù)據(jù)庫相關(guān)聯(lián),導(dǎo)致對(duì)其在NoSQL系統(tǒng)中適用性的誤解。一些知名網(wǎng)站,例如AWS,斷言NoSQL無法符合ACID特性。與這些觀點(diǎn)相反,ACID(原子性、一致性、隔離性、持久性)并非關(guān)系型數(shù)據(jù)庫所獨(dú)有,而是事務(wù)處理系統(tǒng)的基石。

讓我們探討這些誤解以及為什么NoSQL數(shù)據(jù)庫能夠——而且經(jīng)?!袷谹CID特性。

早期的NoSQL系統(tǒng)優(yōu)先考慮性能和可用性,經(jīng)常放松ACID保證,這導(dǎo)致了NoSQL本質(zhì)上不符合ACID特性的認(rèn)知。

另一個(gè)重要的混淆來源在于對(duì)ACID中“C”(一致性)的解釋。許多人錯(cuò)誤地認(rèn)為它要求引用完整性約束,而NoSQL數(shù)據(jù)庫通常不支持這一點(diǎn)。然而,ACID的一致性概念更廣泛,并不固有地要求引用完整性,允許NoSQL數(shù)據(jù)庫在適當(dāng)?shù)那闆r下實(shí)現(xiàn)ACID一致性。

ACID的起源

原子性、一致性和持久性屬性是由Jim Gray在其關(guān)于事務(wù)的開創(chuàng)性論文中提出的。雖然ACID首字母縮略詞后來才出現(xiàn),但基本概念起源于Gray對(duì)事務(wù)處理的討論。值得注意的是,Gray對(duì)一致性的定義并不依賴于關(guān)系型數(shù)據(jù)庫特有的引用完整性約束。相反,它包含一個(gè)更廣泛的概念:

“事務(wù)是對(duì)狀態(tài)的轉(zhuǎn)換,具有原子性(全部或無)、持久性(效果能夠在故障后存活)和一致性(正確的轉(zhuǎn)換)的特性。”

Jim Gray和Andreas Reuter后來這樣定義一致性:

“事務(wù)是對(duì)狀態(tài)的正確轉(zhuǎn)換。作為一個(gè)組采取的行動(dòng)不會(huì)違反與狀態(tài)相關(guān)的任何完整性約束。這要求事務(wù)是一個(gè)正確的程序?!?/span>

這突出表明,ACID是一個(gè)用于確保事務(wù)處理系統(tǒng)(無論是否為關(guān)系型)正確性和可靠性的框架。

事務(wù)處理系統(tǒng):更廣泛的背景

此外,Gray和Reuter將事務(wù)處理系統(tǒng)定義為:

“事務(wù)處理系統(tǒng)(TP系統(tǒng))管理與數(shù)據(jù)庫交互以表示和操作現(xiàn)實(shí)世界狀態(tài)的應(yīng)用程序。它們通常支持分布式、具有嚴(yán)格可用性和性能要求的異構(gòu)環(huán)境。歷史上,TP系統(tǒng)開創(chuàng)了諸如容錯(cuò)存儲(chǔ)、分布式計(jì)算以及最值得注意的是ACID特性等概念?!?/span>

甚至在關(guān)系型系統(tǒng)之前,例如IBM在20世紀(jì)70年代的信息管理系統(tǒng)(IMS),就已經(jīng)支持ACID事務(wù),遠(yuǎn)在該首字母縮略詞被創(chuàng)造出來之前。

ACID特性:分層視角

ACID一致性可以理解為數(shù)據(jù)庫系統(tǒng)內(nèi)各個(gè)層提供的一組保證:

層級(jí)

用途

查詢層

支持 SQL、Cypher、Gremlin、GQL 等查詢語言

事務(wù)層

為操作多條記錄或鍵值對(duì)提供事務(wù)保證

復(fù)制層

在多個(gè)節(jié)點(diǎn)之間提供一致的副本復(fù)制

二級(jí)索引層

為節(jié)點(diǎn)上存儲(chǔ)的記錄提供二級(jí)索引

存儲(chǔ)層

在節(jié)點(diǎn)上存儲(chǔ)記錄或鍵值對(duì)

這些層說明ACID一致性是整個(gè)數(shù)據(jù)庫系統(tǒng)協(xié)調(diào)保證的結(jié)果。特別是,這些保證是由查詢語言或數(shù)據(jù)模型層以下的層提供的,這些層可以通過引入更多關(guān)于該數(shù)據(jù)庫系統(tǒng)必須確保的完整性約束的概念來增加ACID保證。

一致性:ACID與CAP

一個(gè)常見的混淆來源是ACID和CAP(一致性、可用性、分區(qū)容忍性)中“一致性”一詞的雙重使用。在ACID中,一致性指的是事務(wù)狀態(tài)轉(zhuǎn)換相對(duì)于用戶定義約束(例如主鍵、引用完整性)的正確性。在CAP中,一致性表示分布式系統(tǒng)中副本之間的數(shù)據(jù)一致性。

請(qǐng)注意:

  • 在嚴(yán)格串行化隔離級(jí)別下運(yùn)行的符合ACID特性的分布式數(shù)據(jù)庫固有地滿足CAP的一致性(線性化)要求。
  • 缺乏CAP一致性(線性化)意味著未能滿足ACID的原子性和嚴(yán)格串行化隔離保證。

BASE與ACID的二分法

BASE(基本可用,軟狀態(tài),最終一致性)理念隨著NoSQL數(shù)據(jù)庫的出現(xiàn)而出現(xiàn),以解決Web應(yīng)用程序的可擴(kuò)展性需求。早期的NoSQL系統(tǒng)優(yōu)先考慮可用性和分區(qū)容錯(cuò)性,通常會(huì)放寬ACID保證。這種區(qū)別導(dǎo)致了一種誤解,即NoSQL數(shù)據(jù)庫無法實(shí)現(xiàn)ACID一致性。

然而,NoSQL系統(tǒng)的發(fā)展模糊了這些界限。許多現(xiàn)代NoSQL數(shù)據(jù)庫現(xiàn)在支持:

  • 強(qiáng)一致性模型(CAP中的C)
  • 具有串行化保證的事務(wù)(ACID中的A、I和D)
  • 主鍵等約束的強(qiáng)制執(zhí)行

NoSQL系統(tǒng)中的ACID一致性

一些NoSQL數(shù)據(jù)庫聲稱具有ACID一致性,并有強(qiáng)大的技術(shù)實(shí)現(xiàn)作為支撐。但是,請(qǐng)注意,并非所有這些系統(tǒng)都可以在嚴(yán)格的串行化隔離級(jí)別運(yùn)行。例如:

  • DynamoDB:根據(jù)AWS,“DynamoDB支持原子性、一致性、隔離性和持久性(ACID)事務(wù),從而能夠跨表內(nèi)和跨表中的多個(gè)項(xiàng)目實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯?!?提供具有嚴(yán)格ACID保證的多文檔事務(wù)。
  • MongoDB提供具有嚴(yán)格 ACID 保證的多文檔事務(wù)。
  • Aerospike:將在2025年初的8.0服務(wù)器版本中發(fā)布對(duì)嚴(yán)格可串行化ACID事務(wù)的支持。
  • Databricks的Delta Lake:在分布式對(duì)象存儲(chǔ)上提供ACID兼容的表存儲(chǔ)。

這些例子表明,NoSQL數(shù)據(jù)庫能夠并且確實(shí)實(shí)現(xiàn)了ACID一致性,這使得它們適合于關(guān)鍵任務(wù)應(yīng)用程序。

結(jié)論

ACID不是關(guān)系數(shù)據(jù)庫的遺留物,而是事務(wù)處理系統(tǒng)中的一個(gè)基礎(chǔ)概念?,F(xiàn)代NoSQL數(shù)據(jù)庫已經(jīng)發(fā)展到包含ACID保證,挑戰(zhàn)了它們天生就是“BASE”的過時(shí)說法。隨著數(shù)據(jù)庫生態(tài)系統(tǒng)的不斷創(chuàng)新,必須重新定義我們對(duì)ACID的理解,將其視為事務(wù)系統(tǒng)的屬性,而不管底層數(shù)據(jù)模型如何。

通過消除這些誤解,我們可以更好地理解NoSQL數(shù)據(jù)庫在為各種應(yīng)用程序提供可靠、一致和可擴(kuò)展的解決方案方面的能力。

責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2010-09-08 15:55:20

SQL事務(wù)特性

2011-11-29 09:49:16

數(shù)據(jù)庫其他數(shù)據(jù)庫NoSQL

2024-02-02 10:51:53

2021-09-28 09:25:05

NoSQL數(shù)據(jù)庫列式數(shù)據(jù)庫

2011-10-09 09:38:03

OracleNoSQL

2019-07-08 10:36:34

數(shù)據(jù)庫WebNoSQL

2010-04-01 09:45:38

NoSQL

2019-03-20 15:59:11

NoSQLRedis數(shù)據(jù)庫

2011-07-19 09:08:50

JavaNoSQL

2024-03-28 09:00:00

NoSQL數(shù)據(jù)庫

2023-12-13 10:11:14

數(shù)據(jù)庫ACID數(shù)據(jù)

2011-04-14 11:14:21

OracleNoSQLMySQL

2011-07-13 09:58:15

HBase

2019-07-23 11:41:45

數(shù)據(jù)庫SQLDocker

2011-03-25 14:40:29

Trinity數(shù)據(jù)庫

2014-02-27 10:08:33

NoSQL

2011-05-16 10:29:44

HandlerSockNoSQL

2023-03-05 16:25:38

NoSQL數(shù)據(jù)庫

2020-10-31 22:01:40

NoSQL數(shù)據(jù)庫

2010-08-13 16:40:27

CouchDBAndroid SDKAndroid
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)