偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

必須重新理解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)致對其在NoSQL系統(tǒng)中適用性的誤解。一些知名網(wǎng)站,例如AWS,斷言NoSQL無法符合ACID特性。與這些觀點相反,ACID(原子性、一致性、隔離性、持久性)并非關(guān)系型數(shù)據(jù)庫所獨有,而是事務(wù)處理系統(tǒng)的基石。

讓我們探討這些誤解以及為什么NoSQL數(shù)據(jù)庫能夠——而且經(jīng)常——遵守ACID特性。

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

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

ACID的起源

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

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

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

“事務(wù)是對狀態(tài)的正確轉(zhuǎn)換。作為一個組采取的行動不會違反與狀態(tài)相關(guān)的任何完整性約束。這要求事務(wù)是一個正確的程序。”

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

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

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

“事務(wù)處理系統(tǒng)(TP系統(tǒng))管理與數(shù)據(jù)庫交互以表示和操作現(xiàn)實世界狀態(tài)的應(yīng)用程序。它們通常支持分布式、具有嚴(yán)格可用性和性能要求的異構(gòu)環(huán)境。歷史上,TP系統(tǒng)開創(chuàng)了諸如容錯存儲、分布式計算以及最值得注意的是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)各個層提供的一組保證:

層級

用途

查詢層

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

事務(wù)層

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

復(fù)制層

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

二級索引層

為節(jié)點上存儲的記錄提供二級索引

存儲層

在節(jié)點上存儲記錄或鍵值對

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

一致性:ACID與CAP

一個常見的混淆來源是ACID和CAP(一致性、可用性、分區(qū)容忍性)中“一致性”一詞的雙重使用。在ACID中,一致性指的是事務(wù)狀態(tài)轉(zhuǎn)換相對于用戶定義約束(例如主鍵、引用完整性)的正確性。在CAP中,一致性表示分布式系統(tǒng)中副本之間的數(shù)據(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)用程序的可擴展性需求。早期的NoSQL系統(tǒng)優(yōu)先考慮可用性和分區(qū)容錯性,通常會放寬ACID保證。這種區(qū)別導(dǎo)致了一種誤解,即NoSQL數(shù)據(jù)庫無法實現(xiàn)ACID一致性。

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

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

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

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

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

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

結(jié)論

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

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

責(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

2011-07-19 09:08:50

JavaNoSQL

2019-03-20 15:59:11

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

2019-07-08 10:36:34

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

2010-04-01 09:45:38

NoSQL

2024-03-28 09:00:00

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

2023-12-13 10:11:14

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

2011-08-02 15:04:49

2011-04-14 11:14:21

OracleNoSQLMySQL

2011-05-16 10:29:44

HandlerSockNoSQL

2011-07-13 09:58:15

HBase

2014-02-27 10:08:33

NoSQL

2019-07-23 11:41:45

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

2011-03-25 14:40:29

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

2020-10-31 22:01:40

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

2017-05-25 10:11:46

數(shù)據(jù)庫令牌節(jié)點
點贊
收藏

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