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 数据库非常适合处理交易的系统,例如客户关系管理工具、会计软件和电子商务平台。