Nosql 數據庫:它們適合事務處理嗎?

已發表: 2022-12-10

Nosql 數據庫通常因其可擴展性和性能優勢而被使用。 但是,這可能會以事務為代價,這對於確保數據完整性很重要。 對於 nosql 是否適合事務,沒有一刀切的答案,因為它取決於應用程序的具體要求。 但是,總的來說,nosql 數據庫不像傳統的關係數據庫那樣適合事務處理。

雖然 NoSQL 數據庫的事務語義比關係數據庫少,但它們仍然在某種程度上提供原子操作。 如果您習慣使用 Node.js 或 Ruby/Rack,Heroku.com 是一個很好的起點。 我不知道有什麼方法可以實現這個。 數據庫操作必須符合 ACID 標準才能處理用戶事務。 大多數 NoSQL 工具放寬了操作的一致性標準,以提供容錯和擴展能力。 您應該使用內存中的、面向列的分佈式數據庫,例如 VoltDB,它使用 SQL/ACID。 無論如何,我建議確保您了解數據庫實現的原子性保證(例如,哪種寫入和讀取操作是原子的)。

網上好像有人在討論HBase事務,請大家指點一下。 NoSQL 行業普遍認為鍵/值數據存儲用於存儲數據,並且您始終可以在您首選的 RDBMS 中實現這些並保留交易、ACID 屬性、DBA 支持等好的東西,同時認識到好處NoSQL 的性能和靈活性。 如果 NoSQL 解決方案支持比較和設置事務,您可以在它們之上實現樂觀事務。

此外,NoSQL 不支持動態操作。 它不能保證酸不會有酸味。 如果您在這些情況下有特定要求,例如金融交易,則可能首選 SQL 數據庫。 此外,如果您的應用程序需要運行時靈活性,則應避免使用 NoSQL。

Nosql中可以進行事務嗎?

Nosql中可以進行事務嗎?
圖片來源:coding-time

雖然大多數 NoSQL 數據庫本身不支持事務,但有一些變通方法可以實現類似事務的功能。 例如,在 MongoDB 中,您可以使用兩階段提交來實現事務行為。 在 Couchbase 中,可以使用 N1QL 語言對文檔進行原子操作。

從面向對象的角度建模數據的方式與將數據存儲在關係數據庫中的方式之間存在根本區別。 面向文檔的數據庫(例如 MarkLogic、MongoDB 和 CouchDB)在消除這種不匹配方面非常有效。 另一方面,由於在敏捷性和可擴展性之間進行權衡,NoSQL 數據庫不提供此類功能。 不管 ACID 屬性是否重要到足以保證它們在市場上的應用,它們都是。 在本文中,我們將特別介紹一個 NoSQL 數據庫 MarkLogic,以及它如何使 Java 開發人員能夠使用多語句事務。 面向文檔的 NoSQL 數據庫,例如 MarkLogic,也稱為文檔型 NoSQL 數據庫。 不需要復雜的映射來將對象序列化為語言中立或自描述格式。

MarkLogic 使用 JAXB 將 POJO 呈現給它的持久性模型,這是如何做到這一點的一個例子。 購買商品時,MarkLogic 的 ACID 屬性確保庫存反映交易(因此庫存減少)。 這是一種利用數據庫觀點的獨一無二的操作。 除了為這個多語句事務執行讀操作外,MarkLogic 還創建了文檔鎖級別的鎖。 上述程序的輸出將是一個三行盤點訂單,其中包含更新的庫存項目以減少其總數量。 現在是重新啟動程序並聲明沒有庫存以便交易可以繼續進行的時候了(儘管有些倉促)。 在這種情況下會出現以下錯誤,因為我們選擇中止整個事務。

當我們讀取一個對象並打算對其進行更新時,我們希望確保在執行更新之前沒有其他線程發生更改。 為此,我們將讀取操作從事務上下文中取出,以使其保持不變。 第二步是與 DocumentDescriptor 對象交互。 如果我們確信在進行後續更新時不會發生任何更改,那麼這就是在讀取期間不鎖定的行為。 我們通常不會檢測到隔離違規; 但是,如果出現問題,我們寧願密切關注它。 MarkLogic 將跟踪版本更新並讓我們知道我們是否已經遠遠擊敗了他們。 MarkLogic 服務器的目標是在不犧牲功能本身的情況下提供簡單易用的強大功能。 請隨意瀏覽該網站以獲取有關這些主題和其他主題的更多信息。 訪問 GitHub 以了解有關本文中使用的多語句事務模型的更多信息。

MongoDB 數據庫將所有文檔存儲在單個文檔存儲中以實現長期持久性。 無論單個文檔是否存在問題,所有文檔都將正常運行。 如果文檔有拼寫錯誤,您仍然可以訪問和查詢文檔,無論發生什麼情況。 數據不會丟失。 Oracle NoSQL 數據庫中的事務是通過一個數據庫訪問操作訪問的邏輯原子工作單元。 每個操作都在由系統管理的 Oracle NoSQL 數據庫事務中執行。 MongoDB庫從一開始就保證了單頁操作的完整性。 MongoDB 中的單個文檔操作始終是原子的。 它們還可以用於寫入多個字段,包括子文檔、數組中的元素和嵌套數組。 每個文檔都存儲在 MongoDB 中的單獨文檔存儲中,從而確保了文檔的持久性。 由於其事務一致性和原子性,MongoDB 是需要頻繁訪問的數據的絕佳選擇,使其成為存儲敏感數據的理想選擇。

Nosql 數據庫:優點和缺點

NoSQL 數據庫比關係數據庫靈活得多,因此沒有理由相信這會成為一個問題。 nosql 數據庫中的事務時間比關係數據庫中的事務時間更快,後者可能需要幾毫秒。 NoSQL 數據庫中的數據由於缺乏對複雜查詢(例如跨表連接)的支持而無法實時執行。 此外,NoSQL 數據庫通常無法執行多鍵事務,因此難以確保跨分佈式系統的數據一致性。

為什麼 Nosql 不適用於事務處理?

為什麼 Nosql 不適用於事務處理?
圖片來源:viblo

涉及 ACID 事務的數據庫操作在 NoSQL 數據庫中並不常見。 當現代應用程序在其最終事務中需要這些屬性時,NoSQL 無法充分發揮其潛力。 結構化數據和一般數據不能很好地使用它,因為它不使用結構化查詢語言。

使用 NoSQL 數據庫的開發人員可以快速輕鬆地創建關係數據庫,而無需將內存結構轉換為 NoSQL 數據庫。 它們提供足夠的數據安全性也很重要,這是現代 IT 公司的主要關注點。 儘管並非所有數據庫都能自動執行分片過程,但將大型數據庫分成更小、更快、更易於管理的部分非常有用。 數據可以使用 NoSQL 數據庫跨多個節點進行分區,從而允許通過計算資源有選擇地擴展大型數據集。 數據庫的可伸縮性、可靠性和可用性都是現代應用程序的重要特性。 為了克服可用於現代應用程序的 NoSQL 的缺點,有許多選項可用。

如果您需要以一致的方式更新多個文檔,NoSQL 不是適合使用的數據庫。 例如,MongoDB 是一個面向文檔的數據庫,無法支持事務。 如果您的應用程序需要同時跟踪多個文檔,這可能是一個重要問題。
儘管交易不像以前那樣普遍,但在某些情況下它們仍然是必要的。 如果您的團隊需要進行交易,您應該考慮替代方案,例如 MongoDB。

Nosql 數據庫的缺點

Nosql 數據庫不支持複雜的查詢結構,例如跨表連接。 儘管關係數據庫嚴重依賴規範化數據和引用完整性,但 NoSQL 數據庫卻不是。 NoSQL 數據庫通常不支持多鍵事務。 MongoDB 不適合事務,因為它缺乏事務支持。 儘管需要事務處理的應用程序越來越少,但仍有一些應用程序需要更新多個文檔/集合。 有該功能要求的團隊不應使用它。 使用 NoSQL 數據庫的缺點是什麼? 在 NoSQL 數據庫中,最常被提及的缺點之一是它們不支持跨多個文檔的 ACID 事務(原子性、一致性、隔離性和持久性)。 適當的模式設計允許大量應用程序以單記錄原子性執行。 應該注意的是,由於一個主要缺點:缺乏一致性,不建議將 NoSQL 用於財務數據。 付款應使用一致的數據進行,並應遵循交易以保持數據的可靠性。 這只能在 RDBMS 中完成。

Nosql 適合財務數據嗎?

由於多種原因,Nosql 數據庫變得越來越流行。 一個關鍵優勢是它們通常比傳統關係數據庫更容易擴展。 對於期望快速增長或處理大量數據的公司來說,這可能是一個很大的優勢。 nosql 數據庫的另一個優點是它們通常比關係數據庫更能處理非結構化數據。 這對於需要處理大量非標準數據的公司很有幫助。
也就是說,nosql 數據庫並非沒有缺點。 一個潛在的缺點是它們比關係數據庫更難查詢。 這會使從數據中獲取所需信息變得更加困難。 此外,nosql 數據庫比關係數據庫更難管理,這會增加總體擁有成本。
那麼,nosql對金融數據好用嗎? 這取決於。 如果您期望快速增長或處理大量數據,那麼 nosql 可能是一個不錯的選擇。 但是,如果您需要能夠輕鬆查詢數據或擔心可管理性,那麼您可能希望堅持使用關係數據庫。

Nosql 中的事務

在 NoSQL 中,事務是對數據的單一操作。 事務用於在修改數據時提供全有或全無的保證。 如果事務的任何部分失敗,則回滾整個事務並且數據保持不變。 並非所有 NoSQL 數據庫都支持事務,但那些支持事務的數據庫通常會提供某種形式的原子操作,以保證應用事務中的所有操作或不應用任何操作。

由於 Google BigTable 和 Amazon Dynamo 論文的發表, NoSQL 數據庫革命在 2006 年和 2007 年獲得了發展。 最初的設計側重於水平可擴展性,以盡量減少對性能的影響。 近年來,NoSQL 數據庫開發了一種或多種 ACID 事務。 最近,論文中使用的DynamoDB內部數據庫增加了事務支持。 CosmosDB 本質上是微軟試圖與亞馬遜的數據庫系統 Amazon DynamoDB 競爭的嘗試。 DocumentDB 於 2015 年作為 Microsoft 內部 CosmosDB 項目的一個組件向公眾推出。 DocumentDB 的範圍在 2017 年通過添加新的 API 並將其名稱更改為 CosmosDB 進行了擴展。

一般來說,開源數據庫是開源項目。 該過程經常由社區驅動,以便用戶參與數據庫的設計和開發。 由於無需從供應商處購買即可使用開源數據庫,因此不存在供應商鎖定風險。 有必要為 MongoDB 3.2 採用更具彈性的副本。 設置primary election protocol(基於Raft)4.0,隨後在事務維度增加單分片事務。 Apple 於 2015 年收購了 FoundationDB,該技術在當時並沒有得到太多采用。 TiKV 是一種分佈式事務鍵值存儲,其靈感來自於 Google Spanner 和 Apache HBase 的設計理念。

NoSQL 的第一個十年主要是為軟件工程師開發水平可擴展的無共享數據庫架構。 2012 年推出的 DynamoDB 啟發了應用程序架構師認識到非關係數據庫在開發麵向用戶的互聯網級應用程序中的價值。 到 2017 年,聰明的工程師們意識到 SQL 和 NoSQL 的劃分正在減慢應用程序的發布速度。 YugabyteDB 的 API 和存儲層的設計方式是為了滿足上述目標。 NoSQL 數據庫可用於多種用途。 SQL API 是一種工具,使您能夠對應用程序敏捷性的最終目標進行建模。 數據庫軟件要真正創新,首先要開發出能夠處理多種數據模型的核心引擎。

YugabyteDB 是一個 NoSQL 數據庫,使開發人員能夠為需要互聯網規模、交易和地理分佈式數據的工作負載建模數據。 我們並沒有從頭開始創建三個專有 API; 相反,我們開發了與現有流行數據庫兼容的 NoSQL 數據庫。 對我們來說,將 Redis 優雅的數據結構用於我們的 YEDIS 鍵值 API 非常有意義,因為它們與我們支持的優雅數據結構兼容。 由於 CQL 是具有顯式分區鍵和集群列的橫向擴展 SQL 版本,因此這是 YCQL 與 Cassandra 查詢語言 (CQL) 兼容的主要原因。 DocDB 的分片、複製/容錯和分佈式ACID 事務架構都是基於 Google Spanner 的設計。 客戶端可以通過管理一個或多個鍵來訪問 DocDB 的 API,這些鍵可以是 NoSQL API 或 SQL API,它們可以使用跨多個鍵的關係。 FoundationDB 和 TiKV 是開源的數據庫,不需要部署單個區域。

Nosql 數據庫及其處理事務數據的能力

NoSQL 數據庫變得越來越流行,部分原因是它們能夠輕鬆處理大量數據; 這種流行有多種原因。 儘管 NoSQL 數據庫本身並不支持事務,但他們發現這是一個重要的賣點,許多人將分佈式事務作為其主要優勢。 SQL 數據庫是事務系統的一個很好的選擇,但它們並不是唯一的選擇。 在單個或多個集合中,MongoDB 是對多個文檔進行原子讀寫的絕佳選擇(例如)。 分佈式事務可以跨多個操作、集合、數據庫、文檔和分片使用。 不可否認,NoSQL 數據庫越來越受歡迎,並且與傳統數據庫相比具有很多優勢。 如果你需要一個具有良好事務功能的數據庫,MongoDB 是一個極好的選擇。

用於金融交易的 Nosql

由於其可擴展性和靈活性,Nosql 數據庫在金融交易中越來越受歡迎。 它們可以處理大量數據並提供對信息的快速訪問。 金融機構正在使用 nosql 數據庫進行實時欺詐檢測、風險管理和客戶分析。 Nosql 數據庫也被用於開發新的金融產品和服務。

借助 Couchbase,您可以自動化政府合規性並提供實時風險管理、企業範圍的分析、數字銀行和其他服務。 憑藉其深度學習能力,包括FICO在內的全球領先的欺詐檢測平台可以在不到一毫秒的時間內響應呼叫。 Couchbase 以網絡為中心的架構使得擴展數據庫變得簡單,同時保持其大規模性能; 除了高性能的複制主乾之外,數據庫還很容易擴展。 在單個文件中,開發人員可以在強大的 Couchbase 查詢語言中使用熟悉的類似 SQL 的表達式來查詢數據。 通過與全文搜索、實時分析和強大的事件服務的緊密集成,可以輕鬆地向您的應用程序添加新功能。 沒有其他 NoSQL 數據庫像 Couchbase 一樣支持面對面支付、網上銀行和移動支付。

Nosql 數據庫如何使銀行受益

如果保持數據一致性,則通過銀行進行支付。 如果銀行客戶的交易沒有得到妥善處理並且他們的賬戶沒有更新,他們可能不會很高興。 訪問這種一致性級別的能力通過傳統的關係數據庫是可能的,但是訪問這種一致性級別可能需要時間。 這些數據庫非常適合此類任務,因為它們可以訪問各種來源的數據。

Nosql 事務酸

酸被定義為原子物質、稠度物質、隔離物質或物質中的缺陷。 由於原子性,任何事務都可以完成或完全失敗。 當涉及到最先進的通信時,沒有自卑的狀態。 一個機構不可能理解交易已經完成。

MongoDB 和 RavenDB 是兩個最先進的 NoSQL 數據庫,它們在集群級別上獲得了 ACID 級別。 使用 ACID 事務將各種數據庫操作組合到一個事務中的能力對數據庫管理員來說是一個福音。 這四個保證保證數據的完整性、原子性、一致性、隔離性和持久性:不允許對數據進行任何更改。 CAP 定理指出,如果將簇劃分為幾個較小的正方形,則與將其劃分為幾個較大的正方形相比,您將獲得更小的平方根。 不同服務器上的數據可以同步嗎? 面對分區時,在一致性和可用性之間進行選擇很關鍵。 因此,維護 ACID 更加困難。

無需在數據庫層實施 ACID 保證。 這些工具總是可以在開發人員的應用層中實現。 對於您是否需要 ACID 保證沒有明確的答案,但是有一組您應該開始這樣做的日期。 MongoDB 4.0 包括進行多事務處理的能力。 MongoDB 3.x 版從一開始就是為處理多方事務而設計的。 為了實現這一壯舉,MongoDB 不得不切換到一個名為 WiredTiger 的新存儲引擎。 由於 RavenDB 是第一個與 MongoDB 大約同時創建的,因此開發人員選擇不放棄 ACIDity。

儘管 RavenDB 有不同的設計優先級,但它仍然非常適合集群。 MongoDB 和 RavenDB 都使用一種稱為 Raft 的共識算法來映射集群。 在整個集群或 raft 達成一致之前,不會提交事務。 領導者負責通知分佈式事務集群的其餘部分。 在這種情況下,只要第一條消息被集群中的大多數節點接受,領導者就會提交事務。 在這種情況下,不需要解決衝突事務。 提交給 MongoDB 的事務需要在每個步驟上達成共識,包括在開始和提交調用上,就像在單節點版本中一樣。 Raft 保證要么整個集群提交事務,要么整個集群提交回滾事務。

Nosql 是酸還是鹼?

關係型數據庫的ACID(Atomic、Consistency、Isolation、Durability)特性極其重要,而NoSQL數據庫的ACID(Also Available、Soft State、Eventual Consistency)特性極其重要。

Mongodb 有酸性事務嗎?

ACID 事務在 MongoDB 中如何工作? 在 MongoDB 4.0 版本中,新增了多文檔 ACID 事務特性,在 4.2 版本中,MongoDB 擴展了對分佈式多文檔 ACID 事務的支持。 MongoDB 中的文檔模型將相關數據存儲在單個文檔中。

Nosql 可以是事務性的嗎?

隨著 NoSQL 數據庫的改進,它們的數據一致性使它們本質上是事務性的。 因為所有對 BangDB 的 API 調用都使用 ACID,所以它是一個基於 ACID 的數據庫。

不同的 Nosql 數據庫可能提供不同級別的事務支持。

不同的 nosql 數據庫可能提供不同級別的事務支持。 例如,MongoDB 支持數據庫級別的事務,而 Couchbase 只支持文檔級別的事務。 這意味著 MongoDB 可以為需要它的應用程序提供更全面的事務支持

為什麼 Nosql 數據庫非常適合存儲大量非結構化數據

NoSQL 數據庫可用於存儲大量非結構化數據。 它缺乏對跨表連接等複雜查詢的支持,但它很靈活並且在性能方面表現良好。

Mongodb 中的事務

MongoDB 中的事務用於確保多次寫入時數據的一致性。 事務提供全有或全無的保證,這意味著要么應用事務中的所有操作,要么都不應用。 這可確保您的數據始終處於一致狀態,即使在事務期間出現故障也是如此。

事務是封裝在數據庫中的操作的邏輯集合,這些操作執行一個或多個任務,例如讀取和寫入多個文檔。 事務是一種將多個語句組合在一起並隔離的方法,這些語句可以作為單個操作進行處理。 這些系統可以提供數據庫原子性和隔離性以滿足 ACID 合規性要求。 MongoDB 有兩個允許事務的 API。 第一個 API 是核心 API,其語法類似於關係數據庫。 第二種選擇是使用 MongoDB 中的事務。 外部應用程序通常通過其 API 方法之一編寫和執行事務,其中包括適用於應用程序語言的適當 MongoDB 驅動程序。

會話是使 MongoDB 能夠執行事務的第一步。 startTransaction() 方法可以是 readConcern 或 writeConcern。 為確保維護多數提交數據的同步快照,請使用這些選項。 如果出現問題,交易將中止,並將很快提供錯誤的詳細解釋。 作者可以負責為我們做這件事。 對我們來說最好的事情是運行作者。 同時,我們將通過在會話中使用 find() 來返回之前的結果和我們的添加。

在本指南中,我們將了解什麼是事務以及它們可以在 MongoDB 中服務的用例。 我們還從概念上了解了 MongoDB 外殼中事務會話的過程。 在我們的從頭開始指南或如何添加到現有項目部分中,您可以了解如何構建 MongoDB 或 Prisma 項目。 使用 MongoDB 時,考慮多個事務至關重要。 符合 ACID 標準的數據庫中的事務數據對於不符合標準的狀態是安全的。 為確保事務運行時間保持在啟動後的 60 秒內,需要優化事務。 在一次交易中,流程中包含的單據不得超過 1,000 個。

Oracle Nosql 數據庫事務

Oracle NoSQL 數據庫中的事務是全有或全無,這意味著要么應用事務中的所有寫操作,要么都不應用。 這確保了數據的一致性和完整性。 事務可以跨越多個表並且可以嵌套。

為什麼使用 Nosql 數據庫?

NoSQL 數據庫架構支持非結構化數據的存儲。 這些產品可用於多種應用,包括客戶關係管理 (CRM)、會計軟件和電子商務平台。 SQL 數據庫對事務很有用,因為它能夠處理複雜的數據結構。