NoSQL 數據庫和 ACID 事務
已發表: 2022-11-21NoSQL 數據庫通常被稱為“不符合 ACID”。 這意味著它們不會強制執行 ACID(原子性、一致性、隔離性、持久性)事務的所有屬性。 然而,這並不意味著 NoSQL 數據庫不能支持 ACID 事務。 事實上,許多 NoSQL 數據庫確實支持 ACID 事務,儘管它們可能不像某些關係數據庫那樣嚴格執行。
顧名思義, NoSQL 數據庫是基礎 (*) 數據庫。 基本上,這是一種幸福而一致的心態。 這意味著,例如,如果亞馬遜使用它,您將始終能夠從他們那裡購買一本書,但不能保證可以取貨。 他們的目的是打敗布魯爾定理。
由於分佈式事務的到來,NoSQL 數據庫進入了一個新時代,這次賭注增加了:ACID 重新流行起來。 以前,事務通常在單個服務器上執行,然後根據需要復製到集群的其餘部分。
Oracle NoSQL 數據庫為用戶提供了對事務屬性的一些控制。 當您有許多具有共享相同鍵的相同分片鍵的行時,可以在單個原子單元上執行寫操作。
為什麼 Nosql 不兼容 Acid?
Nosql 數據庫不符合 acid,因為它們不提供與關係數據庫相同級別的數據一致性。 這意味著 nosql 數據庫在斷電或系統故障時更有可能發生數據丟失或損壞。
Matt Turner 是 MarkLogic 媒體和製造部門的首席技術官。 他的專業領域包括媒體、娛樂和製造。 Matt 與客戶和潛在客戶合作設計企業 NoSQL 運營數據中心。 如果您現在擁有合適的 DBMS,則可以將 NoSQL 與 ACID 結合使用。
例如,原子操作將兩個數字相加而不會出現不一致。 這些操作的數據完整性得到保證,與此狀態的任何偏差都將被檢測和糾正。 但是,可以在 MongoDB 中運行 ACID 測試。 在某些情況下,它可以檢測文檔何時更新,並確保使用該文檔的所有後續查詢都這樣做。 NoSQL 數據庫不需要固定的表結構,也不支持 ACID 作為功能。 儘管如此,它們確實會產生最終一致性,這意味著數據將隨著時間的推移繼續保持一致。 這是必不可少的,因為它可以防止數據不一致。 MongoDB 是 NoSQL 數據庫的一個例子。 特別是,下面的鏈接不符合關係數據庫系統中原子的定義。 從這個意義上講,MongoDB 不符合 ACID 標準。 術語原子操作是指沒有不一致的操作,例如將兩個數相加。
數據庫管理的四大支柱:Acid
酸是什麼意思?
術語“酸”指的是原子性、一致性、隔離性和持久性等特性。 一組規則用於指定數據庫系統在創建數據時應如何處理數據。
Nosql有事務控制嗎?
這個問題沒有明確的答案,因為它取決於所討論的特定 NoSQL 數據庫。 但是,一般來說,NoSQL 數據庫不提供與傳統關係數據庫相同級別的事務控制。 這可以看作是缺點或優點,具體取決於應用程序的特定需求。
與關係數據庫相比,NoSQL 解決方案具有較低的事務語義,但仍提供某種級別的原子操作。 如果您熟悉的話,可以使用 Node.js 或 Ruby/Rack 在 Heroku.com 上快速創建一個小型模型。 我尚未以任何方式實現此功能。 事務必須包含 ACID 屬性,以便數據庫執行用戶操作。 大多數 NoSQL 工具旨在放寬操作設置的一致性標準,以提供容錯和擴展能力。 為此,您可能需要使用內存中的、面向列的和分佈式 SQL/ACID 數據庫,例如 VoltDB。 有許多“優化事務”可用於完成此操作,但我認為需要了解數據庫實現的原子性保證(例如,哪種寫入和讀取操作是原子的)。
你聽說過 HBase 事務嗎? 如果是這樣,請告訴我。 通常,NoSQL 依賴於鍵/值數據存儲。 你總是可以在你喜歡的 RDBMS 中實現它,你可以保留好東西,比如事務、ACID 屬性、友好的 DBA 的支持等等,同時利用 NoSQL 的性能和靈活性優勢如果 NoSQL 解決方案可以支持對比,可以在上面實現樂觀交易。
Mongodb 完全兼容酸嗎?
Mongodb 是一個功能強大的面向文檔的數據庫系統,非常適合許多現代應用程序。 它完全符合 acid,這意味著它支持所有四個 ACID 屬性:原子性、一致性、隔離性和持久性。 這使其成為存儲數據的安全可靠選擇。
MongoDB 4.0 版本包括多文檔 ACID 事務。 儘管 Postgres 提供了原生的 ACID 合規性支持,但 MongoDB 不得不為此等待多年。 我們不確定 MongoDB 是否關心 ACID 或者它是否是一個優先事項,或者他們是否正在做任何事情。 MongoDB 4.0 版包括對多頁 ACID 事務保證的支持,這是一個重要的特性。 在最近的一份聲明中,CTO Eliot Horowitz 表示文檔模型不需要 ACID 事務。 根據產品、服務器和企業工具副總裁 Grigori Melnik 的說法,這不太可能是寫入 MongoDB 的常見方式。 MongoDB 的 V4.2 版本將包括跨多個工作負載執行事務的能力,以及各種事務類型。
儘管MongoDB過去支持多種存儲引擎,但如果需要事務,只能使用WiredTiger。 ACID 在 MongoDB 中的重要性是什麼? 關於 EDB 對 ACID 事務的承諾,我們無話可說,但我們可以說一件事:我們並不失望。 儘管圍繞 No.7 進行了各種宣傳,但使用 SQL 等標準查詢語言仍然具有顯著的優勢。 當您設計多個應用程序來訪問您的數據時,您將有很多工作要做。 最流行的通用數據庫是 PostgreSQL。
Mongodb、Cassandra 和 Redis 的優缺點
時至今日,MongoDB、Cassandra 和 Redis 是三個最流行的 NoSQL 框架。 因此,它們可能並不適合所有用例。 如果您需要一個能夠促進多部分文檔交易的系統,MongoDB 是一個很好的選擇。 如果你想要一個符合 ACID 的系統,MySQL 是更好的選擇。
哪種類型的 Nosql 數據庫遵循酸屬性?
與 MySQL、postgresql、oracle 和 Microsoft SQL 一樣,所有關係數據庫中的事務都保證具有 ACID 功能。
原子性、一致性、隔離性和密度的縮寫是酸。 在 ACID 事務中,當事務完成或完全失敗時,事務被視為完成。 在交易中,沒有任何主體能夠完全完成交易。 每個關係數據庫都保證事務的 ACID 屬性。 在我們進入 NoSQL 之前,讓我們回顧一個典型的故事。 快速瀏覽亞馬遜詳細信息頁面會發現 100 多種不同的功能。 如果每個功能都在其自己的表中表示,則要準備這樣一個頁面,將需要數百個連接。 如果我們有資源這樣做,我們會垂直擴展我們的硬件,比如 16 個內核、128 GB RAM 和 25 個 SSD 組。 結果,NoSQL 數據庫誕生了。
為什麼 Mongodb 是 Acid 交易的最佳數據庫
事務是原子的,因為它們本質上是提交或回滾的。 提交的事務必須與事務發生時的數據庫狀態一致。 交易必須彼此分開,並與其他系統分開,以便它們獨立運行。 事務持久性:如果要在不丟失數據的情況下提交和回滾事務,事務必須是可靠的。 以文檔格式存儲數據的 MongoDB 支持 ACID 事務。 事務被歸類為原子事務,這意味著它們要么被提交,要么被撤銷。 如果事務在提交時與數據庫的狀態一致,那麼它應該與提交時數據庫的狀態一致。 交易彼此分開,並與其他系統分開。 MongoDB除了具有持久性之外,還可以在提交事務時保持與數據庫狀態的一致性。
Nosql 事務酸
NoSQL 數據庫中的事務不符合 ACID。 這意味著如果您將一系列操作作為單個事務執行,則無法保證所有操作都將提交到數據庫。 這可能會導致數據不一致,並使調試問題變得困難。
NoSQL 數據庫是存儲和檢索數據的數據庫,就好像它們不是關係數據一樣。 在以下部分中,我們將了解 NoSQL 事務。 使用持久耐用的組件很重要,因為它表明在系統出現故障時可以保留數據。 為確保一個操作與其他並發操作分開,隔離是主要目標。 ACID 事務確保我們的數據永遠不會因為操作或任務僅部分完成或未正確完成而陷入不一致狀態。 當我們使用 ACID 屬性時,我們能夠在我們的數據庫中保持正確性和一致性。 以下是 ACID 事務的示例。 我們需要從 S1 發送 50 到 S2。
像 Mongodb 這樣符合 Base 的數據庫還不符合 Acid
目前尚不清楚符合 BASE 標準的數據庫(例如 MongoDB)將來是否會符合 ACID 標準。 另一方面,MongoDB 不能保證所有節點將同時看到相同的寫入。
Nosql是否支持酸
關於 NoSQL 數據庫是否支持酸性事務存在一些爭論。 Acid 事務是一組屬性,可保證數據庫中數據的一致性和完整性。 一些人認為,因為 NoSQL 數據庫不是關係型的,所以它們不支持酸性事務。 其他人則認為,由於 NoSQL 數據庫設計為可擴展並處理大量數據,因此它們必須支持酸性事務以保持數據完整性。 最終,由個人數據庫決定是否支持 acid 事務。
對於尋求可以隨時擴展和訪問的雲 SQL 選項的企業來說,雲 SQL 是一個很好的選擇。 但是,雲 SQL 還必須牢記傳統 DBMS 的性能和可靠性。 由於其易於使用和配置,它是需要快速數據訪問和管理的小型企業和初創公司的理想解決方案。 隨著業務的增長,Cloud SQL 憑藉其強大的 GCP 平台成為存儲和管理數據的理想工具。
基本模型的優點和缺點
儘管如此,MongoDB 的獨特之處在於它使用的基本模型會隨著時間的推移進行一致的更新。
重要的是要注意,BASE 模型提供了一些優於 ACID 模型的優勢,但它們這樣做是有代價的。
這最終取決於哪個應用程序表現最好。
Nosql 和 Sql 處理事務
SQL 數據庫對於多行事務比 NoSQL 數據庫對於非結構化數據(例如文檔或 JSON)更有效。 SQL 數據庫還用於在以前基於關係數據庫的遺留系統中存儲數據。
Oracle NoSQL 數據庫中的每個數據操作都是同時發生的。 事務語義的 ACID 屬性經常被討論。 雖然沒有可配置的原子性或隔離策略,但用戶可以設置一致性和持久性策略。 一致性策略的靈活性有助於開發人員創建一致的業務解決方案,同時滿足延遲和可擴展性要求。
Sql和Nosql數據庫的優缺點
數據存儲在文檔中,而不是關係數據庫中。 在這方面,它們被組合成各種靈活的數據模型,被歸類為 SQL 而不僅僅是 SQL。 使用NoSQL可以分為三種類型的數據庫類型包括純文檔數據庫、鍵值存儲、寬列數據庫和圖數據庫。 SQL 數據庫非常適合面向事務的應用程序,例如客戶關係管理工具、會計軟件和電子商務平台。 SQL 數據庫非常適合高度結構化的數據。 Oracle 的 NoSQL 數據庫使用的術語“NoSQL 數據庫”不僅僅是 SQL。 文檔而不是表格存儲在數據庫中。 因此,它們被歸類為“不僅是 SQL”數據庫,還根據其靈活性分為各種數據類型。 文檔數據庫、鍵值存儲、寬列數據庫和圖形數據庫都是 NoSQL 數據庫的示例。 NoSQL 數據庫是非結構化數據的絕佳選擇,因為它們易於構建。 SQL 是一種可以在任何 NoSQL 數據庫中使用的查詢語言; 這並不意味著您不能在 NoSQL 數據庫中使用它。 NoSQL和SQL其實是互補的技術。 SQL 是 NoSQL 數據庫中用於搜索數據的通用語言。 如果您需要能夠處理事務的數據庫,SQL 數據庫可能是最佳選擇。 SQL 數據庫非常適合處理交易的系統,例如客戶關係管理工具、會計軟件和電子商務平台。