为什么 NoSQL 数据库通常不支持事务——以及如何解决它
已发表: 2022-11-21事务是任何数据库系统的关键部分,它提供了一种方法来确保面对并发更新时的数据完整性和一致性。 但是,并非所有数据库都支持事务。 特别是,NoSQL 数据库通常不提供任何方式来执行事务。 对于需要事务支持的应用程序来说,这可能是一个主要问题,因为它可能导致数据损坏和不一致。 但是,有一些变通方法可用于为 NoSQL 数据库提供事务支持。 在本文中,我们将了解什么是事务,为什么 NoSQL 数据库通常不支持事务,以及如何解决此限制。
NoSQL 解决方案的事务语义比关系数据库的语义更轻,但它们仍然在某种程度上提供原子操作。 如果您知道如何使用 Node.js 或 Ruby/Rack,则可以在 Heroku.com 上快速创建一个小型模型。 很遗憾地通知您,我还没有以任何方式实施它。 如果要执行一个事务,它必须能够实现 ACID 属性。 大多数 NoSQL 工具降低了操作的一致性标准,以实现容错和扩展可用性。 使用 SQL/ACID 数据库(例如 VoltDB)是一个好主意,它们是内存中的、面向列的和分布式的。 可以使用“乐观事务”来完成此操作,但我相信您在继续之前必须了解数据库实现的原子性保证(例如,我应该连续写入和读取多少个字)。
根据一些讨论论坛,互联网上有一些HBase 交易,如果您正在寻找的话。 通常有两种类型的 NoSQL 数据库:键/值和分布式数据存储,它们都在您首选的 RDBMS 中实现,并且可以在 DBA 的帮助下以及 NoSQL 的灵活性和性能下保持领先。 如果 NoSQL 解决方案包含比较和匹配,您可以在其上使用乐观事务。
对于 NoSQL 数据库,这一次尤为重要:风险更高,终于到了实现分布式事务的时候了。 在此之前,事务通常在一台服务器上提交,然后以与以前相同的方式复制到集群的其余部分。
为什么 Nosql 不适用于事务处理?
NoSQL 数据库不执行 ACID 事务。 在当今的应用程序中,这些属性对于在必须使用 NoSQL 执行的事务中使用并不是微不足道的。 它不支持结构化数据,也不使用结构化查询语言。
在开发中使用 NoSQL 数据库允许开发人员实现相同级别的并发性,而无需将内存结构转换为关系结构。 此外,虽然它们确实提供了高级别的数据安全性,但现代 IT 组织这样做至关重要。 分片过程将非常大的数据库分成更小、更易于管理的部分,并不是每个数据库都能实现自动化。 当您使用 NoSQL 数据库时,数据被跨多个节点分区,因此可以更有效地访问,从而导致具有更多计算能力的更大数据集的选择性访问。 现代应用程序要求数据库具有高水平的可伸缩性、可靠性和可用性,因此也要求关系数据库具有高水平的可靠性和可伸缩性。 对于当今的应用程序,可以使用多种策略来克服 NoSQL 的缺点。
根据您的需要选择合适的 NoSQL 数据库需要考虑多种因素。 此列表包括诸如所需数据类型、所需可靠性级别以及所需速度和可扩展性等因素。 MongoDB、Cassandra 和 Redis 是一些最流行的 NoSQL 数据库。 这些数据库中的每一个都有自己的一组优点和缺点,因此您必须选择最适合您的一个。 无法保证 NoSQL 数据库将是满足您需求的最佳选择。 NoSQL 数据库的主要缺点之一是它们无法原生支持关系数据库中的可靠性功能。 在可靠性的特性中,原子性、一致性、隔离性和持久性都很重要。 如果您需要执行事务,MongoDB 不是最适合您的数据库。 需要事务的应用程序越来越少,但有些确实需要事务来更新多个文档/集合。在这种情况下,应该避免使用 MongoDB,因为它是团队需要的。 在选择 NoSQL 数据库时考虑许多因素至关重要,包括您正在处理的数据类型、所需的可靠性级别以及数据库的性能和可扩展性。 MongoDB、Cassandra 和 Redis 只是当今可用的 NoSQL 数据库中的一小部分。
为什么金融数据不推荐使用 Mongodb
为什么不应该将 MongoDB 用于财务数据?
由于缺乏事务支持,不推荐在金融数据中使用MongoDB。 执行事务对数据可靠性和一致性至关重要。 需要事务来确保与数据库的一致性或同步,但并不总是执行事务。
Nosql 事务酸
NoSQL 数据库不像关系数据库那样支持事务。 这意味着您在使用 NoSQL 数据库时不能依赖事务的 ACID 属性。 但是,一些 NoSQL 数据库确实支持事务的某些特性,例如原子操作。
不同的 Nosql 数据库可能提供不同级别的事务支持。
不同的 Nosql 数据库可能提供不同级别的事务支持。 例如,一些数据库可能提供完整的事务支持,而其他数据库可能只提供有限的支持。 这可能是选择 Nosql 数据库时要考虑的重要因素。
数据是从面向对象的角度建模的,而不是存储在关系数据库中,以便开发人员更好地理解面向对象和关系数据库之间的区别。 面向文档的数据库(例如 MarkLogic、MongoDB 和 CouchDB)已经完全消除了这种阻抗失配。 NoSQL 数据库的缺点是它们在敏捷性和可扩展性方面不提供此类功能。 在实践中,ACID 属性的重要性通过市场如何应用或解决它们来证明。 MarkLogic 是一种 NoSQL 数据库,它是 NoSQL 数据库的一个示例,我们将了解它如何帮助 Java 中的多语句事务。 MarkLogic 是一个面向文档的 NoSQL 数据库。 可以将对象序列化为语言中立的自描述格式,而无需经过复杂的映射。
在以下示例中,JAXB 用于将 POJO 呈现给 MarkLogic 以实现持久性。 使用 MarkLogic 的 ACID 属性,库存反映了购买商品时的购买(以库存减少的形式)。 从数据库的角度来看,数据库将执行此任务作为全有或全无操作。 因为这个事务是一个多语句事务,所以MarkLogic在第一次执行读操作的时候创建了一个文档级的锁。 如果我们成功运行上述程序,我们将收到一个包含三个订单项目的订单以及库存项目的更新以减少项目数量。 当程序再次运行时,我们可以通过声明没有库存来强制交易发生异常(尽管有点虚假)。 结果,当我们在这种情况下中止整个事务时,我们会收到以下错误。
当我们为了更新它而读取一个对象时,我们必须确保在我们完成操作之前其他线程不会改变它的状态。 为了确保这一点,读取操作在事务上下文之外时不会被隐式锁定。 要完成任务,您必须使用 DocumentDescriptor 对象。 我们相信乐观锁定,因为我们相信当我们执行后续更新时,我们的操作系统不会改变。 在这座大楼里发生隔离违规的情况并不少见; 但是,如果有问题,应该进行调查。 MarkLogic 将跟踪更新的版本,如果我们击败了它们,则会向我们发送电子邮件。 MarkLogic 服务器的目标是以开发人员可以在不牺牲其任何功能的情况下使用的方式提供强大的功能。 请随意浏览该网站以获取有关这些主题和其他主题的更多信息。 有关本文中使用的多语句事务示例,请参阅 GitHub 页面。
为什么 Mongodb 是最好的文档数据库
文档数据库是存储大量数据的应用程序的绝佳选择。 这个星球上最流行的文档数据库是 MongoDB。
键值存储对于需要将数据存储在简单数据模型中的应用程序很有用。 像 Redis 这样的键值存储是最受欢迎的。
如果您需要表来存储数据,那么面向列的数据库是一个很好的选择。 MySQL 是使用最广泛的面向列的数据库。
数据可以通过使用图形数据库存储在图形中。 它是最流行的图数据库,也是最流行的 NoSQL 数据库之一。
Mongodb 事务
在 MongoDB 中,事务是一个单一的工作单元,由对数据库的一个或多个操作组成。 事务对于确保数据完整性和确保数据按照您期望的顺序进行处理很有用。
MongoDB 提供两种类型的事务:
1. 单一操作:这是最常见的事务类型,用于更新、插入或删除单个文档。
2. 多文档事务:这些事务可以更新、插入或删除多个文档,有助于确保按特定顺序处理数据。
要启动事务,您可以使用 db.collection.startTransaction() 方法。 此方法采用一些参数,让您指定事务的读取关注和写入关注。 读关注指定 MongoDB 应该如何为事务读取数据,而写关注指定 MongoDB 应该如何为事务写入数据。
启动事务后,您可以运行通常在数据库上运行的任何操作。 您在事务中运行的所有操作都将属于同一工作单元。
要提交事务,您可以使用 db.collection.commitTransaction() 方法。 此方法会将您在事务中所做的所有更改写入数据库。
如果要中止事务,请使用 db.collection.abortTransaction() 方法。 此方法将回滚您在事务中所做的所有更改。

术语事务是指处理数据库中一个或多个操作的逻辑进程组,例如多个文档的读取或写入。 事务用于通过组合和隔离多个语句来创建统一的操作。 数据库原子性和隔离用于实现 ACID 合规性。 在 MongoDB 中,有两个用于事务处理的 API。 除了作为第一个 API 之外,核心 API 的语法类似于关系数据库的语法。 第二种选择是使用 MongoDB 的事务处理。 通常使用在应用程序语言的适当 MongoDB 驱动程序中定义的 API 方法之一编写和执行事务。
在 MongoDB 中创建会话是生成事务的第一步。 startTransaction() 方法分为两部分:readConcern 和 writeConcern。 这些选项确保处于多数提交状态的数据保持实时同步。 如果出现错误,交易将中止; 请参阅附表以获取更多信息。 在这方面,我们可以聘请跑步作者。 作者由我们管理。 在此会话中,我们将通过添加返回之前的结果,因此请立即调用 find()。
本指南定义了事务以及它们在 MongoDB 中的最佳用例。 我们还从概念上介绍了 MongoDB 中事务会话的过程。 如果您想了解有关 MongoDB 和 Prisma 的更多信息,我们已经创建了从头开始指南或如何添加到现有项目指南。 使用 MongoDB 处理事务涉及许多最佳实践。 符合 ACID 的事务保护事务数据不受无效数据库状态的影响。 启动事务后,请确保进行优化以使其运行 60 秒。 一次交易中的操作数量不应超过 1,000 个文件。
MongoDB 的原子事务保证使其成为需要数据一致性和数据完整性的应用程序的绝佳选择。 此外,事务是 ACID 标准的关键组成部分,这对于需要持续访问数据的应用程序来说是必需的。
Mongodb 的力量:交易
可以使用 NoSQL 数据库 MongoDB 执行多页事务。 事务可用于确保对来自单个或多个集合的多个文档的多次读取和写入是原子的。 除了事务之外,还可以使用它们来确保跨多个操作、集合、数据库、文档和分片的原子性。 MongoDB 始终提供原子性这一事实使其成为出色的事务工具。 MongoDB 以每秒 2.5 亿个事务的速度处理事务。
Oracle Nosql 数据库事务
Oracle NoSQL 数据库事务是作为单个单元执行的一组读取和写入。 事务中的所有写入对于事务提交后发生的所有读取都是可见的。 一个事务可以跨越多个键和数据项。
Nosql 数据库:何时使用它们以及何时避免它们
另一方面,对于需要存储大量非结构化数据或结构化数据较少的组织来说,NoSQL 数据库可能是更好的选择。 与传统数据库不同,NoSQL 数据库不支持事务支持。 对于需要保留大量数据并正在寻找一种一致的存储和管理方法的系统来说,这可能不是最佳选择。
数据库
Nosql 数据库是不使用传统 SQL 数据库结构的数据库。 相反,他们使用更灵活的结构,可以更轻松地扩展以满足现代应用程序的需求。
NoSQL 数据库中的数据存储在文档中,而不是表中。 它们被设计为灵活、可扩展,并且能够在几分钟内响应现代业务需求。 文档数据库、键值存储、宽列数据库和图形数据库是一些可用的 NoSQL 数据库类型。 全球 2000 强组织正在迅速采用 NoSQL 数据库来为其关键任务应用程序提供支持。 上面提到的五个趋势是大多数关系数据库遇到的最困难的技术挑战之一。 关系型数据库由于数据模型固定,是敏捷开发的一大障碍。 NoSQL 将应用程序模型定义为数据模型的子集。
使用 NoSQL 建模数据不是静态的。 在面向文档的数据库中存储数据的实际格式是 JSON。 此外,这消除了 ORM 框架的使用并简化了应用程序开发。 新引入的 N1QL 查询语言(发音为 nickel)是 Couchbase Server 4.0 的一个强大的 SQL 和 JSON 扩展。 该产品不仅能够支持标准的SELECT/FROM/WHERE语句,还支持聚合(GROUP BY)、排序(SORT BY)、连接(LEFT OUTER/INNER)等。 NoSQL 数据库以其高水平的运营效率和横向扩展架构而著称。 随着越来越多的客户通过网络和移动应用程序在线与企业互动,服务的可用性已成为一个问题。
NoSQL 数据库可以轻松部署和配置。 它们专为读取、写入和存储而设计。 它们的运行范围很广,包括管理和监控不同规模的集群。 NoSQL 数据库分布在多个数据中心,无需单独的软件即可复制。 它还可用于通过硬件路由器启用即时灾难恢复,从而消除了应用程序等待数据库检测到问题并执行其自身恢复的需要。 随着 NoSQL 数据库的进步,您可以创建在多个平台上运行的 Web、移动和 IoT 应用程序。
NoSQL 数据库因其可扩展性、复制性和灵活性而大有裨益。 尽管它们具有高性能,但它们能够在不损失性能的情况下处理大量数据。 此外,它们非常适合需要以各种格式存储文本、图像和结构化数据的应用程序。
Nosql 数据库的优势
与传统关系数据库相比,NoSQL 数据库有几个优势,包括更快的性能和更大的灵活性。 可以存储难以适合关系模型的数据,例如视频流或社交媒体帖子。 它们在数据查询方面也更高效,因为它们不需要与关系数据库相同级别的模式和数据映射。
酸性交易
在确定事务的特征时,首字母缩略词 ACID 由四个关键属性定义:原子性、一致性、隔离性和持久性。 数据库中的事务可以定义为具有这些 ACID 特性的事务,事务系统可以定义为将这些 ACID 特性应用于数据存储的系统。
称为 ACID(原子性、一致性、隔离性和持久性)的属性集是数据库事务的重要组成部分,因为即使在出现错误、电源故障等情况下,也应维护该属性集。 事务是数据库更改的重要组成部分。 在开发分布式应用程序时,了解 ACID 事务至关重要。 DBMS 采用两种方法实现原子性。 在应用任何更改之前,会将日志文件写入服务器。 相反,第二种方法假设数据库被划分为固定长度的块,称为页面。 在事务处理过程中,存在页面的两个副本——当前页面和影子页面。
事务在隔离属性中按顺序执行,以避免状态不一致的风险。 客户被 DBMS 系统误以为事务是连续执行的,从而允许他们推断事务结束时的状态。 客户可能会发现等待持续时间较长的交易更容易,因为有些交易可能需要很长时间。 DBMS 仅在同时执行一系列事务时才允许事务交错,从而导致事务创建调度。 对同一数据项的操作由多个事务执行,其中一个是写操作。 原子性部分描述了实现原子性和持久性的一些更常见的方法。
酸合规性的重要性
为了使数据库事务顺利可靠地工作,它们必须始终以可预测和可靠的方式成功或失败。 ACID 是一个术语,用于描述事务的四个主要和最重要的属性:原子性、一致性、隔离性和持久性。 满足这些要求的交易被称为符合 ACID。