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 数据库对事务很有用,因为它能够处理复杂的数据结构。