是否有符合ACID标准的NoSQL数据存储?

时间:2010-04-09 14:05:17

标签: database nosql acid

是否有符合NoSQLACID数据存储?

30 个答案:

答案 0 :(得分:102)

我会将此作为答案发布,纯粹是为了支持对话 - Tim MahynawrothCraigTP已建议可行的数据库。 CouchDB因使用Erlang而成为我的首选,但还有其他人。

我会说 ACID 并不反驳或否定 NoSQL 的概念......虽然{{3}表达的意见似乎有一种趋势我认为这些概念是截然不同的。

NoSQL 基本上是关于简单的键值(例如Redis)或文档样式的架构(在“文档”模型中收集的键值对,例如MongoDB)作为显式的直接替代方法经典RDBMS中的模式。它允许开发人员不对称地处理事物,而传统引擎在数据模型中强制执行严格的同一性。之所以如此有趣,是因为它提供了一种处理变更的不同方式,对于大型数据集,它提供了处理数量和性能的有趣机会。

ACID 提供了有关如何将更改应用于数据库的原则。它以非常简单的方式表明(我自己的版本):

  • (A)当你做一些改变数据库的事情时,改变应该作为一个整体起作用或失败
  • (C)数据库应保持一致(这是一个相当广泛的主题)
  • (I)如果其他事情同时发生,他们应该无法在更新中看到事情
  • (D)如果系统爆炸(硬件或软件),数据库需要能够自行备份;如果它说它已完成应用更新,则需要确定

当谈到dove的想法时,谈话会变得更加兴奋。一些RDBMS引擎提供了强制执行约束(例如,外键)的能力,该约束可以具有传播元素(la 级联)。简单来说,一个“东西”可能与数据库中的另一个“东西”有关系,如果你改变一个属性,它可能需要另一个被更改(更新,删除,......许多选项)。主要(目前)专注于高数据量和高流量的 NoSQL 数据库似乎正在解决在(从消费者的角度来看)任意时间范围内发生的分布式更新的想法。这基本上是propagation and constraints通过replication管理的一种特殊形式 - 所以我想说如果传统的分布式数据库可以支持ACID,那么NoSQL数据库也是如此。

进一步阅读的一些资源:

答案 1 :(得分:33)

更新(2012年7月27日): 链接到维基百科的文章已经更新,以反映发布此答案时当前文章的版本。请注意,current Wikipedia article已经过广泛修订!

嗯,根据Wikipedia article on NoSQL的旧版本:

  

NoSQL是一个推动a的运动   松散定义的类   破坏的非关系数据存储   有着悠久的关系历史   数据库和ACID保证。

还有:

  

该名称试图描述   越来越多的出现   非关系的分布式数据   经常没有尝试的商店   提供ACID保证。

  

NoSQL系统经常提供弱点   一致性保证,如   最终的一致性和交易   甚至限于单个数据项   虽然可以施加完整的ACID   通过添加补充保证   中间件层。

因此,简而言之,我会说“NoSQL”数据存储的主要好处之一是ACID属性的缺少。此外,恕我直言,越是试图实施和执行ACID属性,越远离“NoSQL”数据存储的“精神”,越接近“真正的”RDBMS你得到(当然,相对来说)。

然而,所有这一切,“NoSQL”是一个非常模糊的术语,并且对个人的解释持开放态度,并且在很大程度上取决于你有多少纯粹观点。例如,大多数现代RDBMS系统实际上并不遵守Edgar F. Codd12 rules relation model所有

采取务实的方法,似乎Apache的CouchDB最接近体现ACID兼容性,同时保留松散耦合,非关系型“NoSQL”心态。

答案 2 :(得分:18)

FoundationDB符合ACID:

http://www.foundationdb.com/

它具有正确的事务,因此您可以以ACID方式更新多个不同的数据项。这用作在更高层维护索引的基础。

答案 3 :(得分:16)

在这个问题中,有人必须提到OrientDB: OrientDB是一个NoSQL数据库,是少数几个支持完全ACID事务的数据库之一。 ACID不仅适用于RDBMS,因为它不是Relational代数的一部分。因此可以使用支持ACID的NoSQL数据库。

这个功能是我在MongoDB中最想念的功能

答案 4 :(得分:14)

ACID和NoSQL是完全正交的。一个并不意味着另一个。

我的桌子上有一个笔记本,我用它来记录我仍然需要做的事情。这个笔记本是一个NoSQL数据库。我使用带有"页面缓存的线性搜索来查询它#34;所以我不必总是搜索每一页。它也符合ACID标准,因为我确保我一次只写一件事,而不是在我阅读时。

NoSQL只是意味着它不是SQL。许多人感到困惑,并认为这意味着高度可扩展 - 狂野西部 - 超快速存储。它没有。它并不意味着键值存储或最终的一致性。它意味着"而不是SQL",这个星球上有很多数据库,其中大部分都不是SQL [citation needed]

你可以在其他答案中找到很多例子,所以我不需要在这里列出它们,但是对于各种操作都有非ACID兼容的非SQL数据库,有些只是单对象写入的ACID,而有些则保证更多。每个数据库都不同。

答案 5 :(得分:14)

请确保you read the Martin Fowler introduction about NoSQL databases。和相应的视频。

首先,我们可以区分两种类型的NoSQL数据库:

  1. 面向聚合的数据库;
  2. 面向图形的数据库(例如Neo4J)。
  3. 按照设计,大多数面向图形的数据库都是ACID

    那么,其他类型呢?

    在面向聚合的数据库中,我们可以放置三个子类型:

    • 基于文档的NoSQL数据库(例如MongoDB,CouchDB);
    • 键/值NoSQL数据库(例如Redis);
    • 列族NoSQL数据库(例如Hibase,Cassandra)。

    我们称之为 Aggregate 的是Eric Evans在其Domain-Driven Design中定义为给定有界上下文中的实体和值对象的自给自足。

      

    因此,聚合是我们的数据集合   与单位互动。聚合形成ACID的边界   与数据库的操作。 (马丁福勒)

    所以,在Aggregate级别,我们可以说大多数NoSQL数据库都可以像ACID RDBMS一样安全,并进行适当的设置。从来看,如果你以最佳速度调整服务器,你可能会遇到非ACID的问题。但复制会有所帮助。

    我的主要观点是你必须使用NoSQL数据库,而不是RDBMS的(廉价)替代品。我看到太多项目滥用文件之间的关系。这不能是ACID。如果您保持文档级别,即在Aggregate边界,则不需要任何事务。并且您的数据将与ACID数据库一样安全,即使它不是真正的ACID,因为您不需要这些交易!如果您需要一次交易并更新几个“文档”,那么您不再是NoSQL世界 - 所以请改用RDBMS引擎!

答案 6 :(得分:11)

“NoSQL”不是一个定义明确的术语。这是一个非常模糊的概念。因此,甚至不可能说什么是什么,什么不是“NoSQL”产品。几乎并非所有标有品牌标签的产品都是键值商店。

答案 7 :(得分:8)

是的,MarkLogic Server是一个NoSQL解决方案(我喜欢称之为文档数据库),适用于ACID事务

答案 8 :(得分:7)

如果您正在寻找符合ACID标准的键/值存储,那么Berkeley DBgraph databases至少Neo4jHyperGraphDB提供ACID事务(HyperGraphDB目前实际上使用Berkeley DB进行低级别存储)。

答案 9 :(得分:7)

NoSQL的祖父:ZODB符合ACID标准。 http://www.zodb.org/

但是,它只是Python。

答案 10 :(得分:6)

作为NoSQL的发起者之一(我是Apache CouchDB的早期贡献者,并且是2009年在CBS Interactive / CNET举行的the first NoSQL event上的发言人),我很高兴看到新算法创造了以前不存在。 The Calvin protocol提供了一种新的方式来思考诸如CAP和PACELC之类的物理约束。

Calvin使用RAFT-like protocol来维护事务日志,而不是主动/被动异步复制或主动/主动同步复制,而是在副本中断期间保持正确性和可用性。另外,每个副本上的transactions are processed deterministically消除了潜在的僵局,因此仅需进行一轮共识即可达成协议。即使在全球范围内的多云环境中,这也可以使其快速运行。

FaunaDB是唯一使用Calvin协议的数据库实现,使其特别适合需要类似大型机的数据完整性以及NoSQL规模和灵活性的工作负载。

答案 11 :(得分:4)

MongoDB宣布其4.0版本将符合ACID标准,适用于多文档交易。

版本4.2。应该在分片设置下支持它。

https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb

答案 12 :(得分:3)

NewSQL

此概念Wikipedia contributors定义为:

  

[...]一类现代关系数据库管理系统,旨在为在线事务处理(OLTP)读写工作负载提供相同的NoSQL系统可扩展性能,同时仍保持传统数据库系统的ACID保证。{{ 1}}

参考

[1][2][3] Nancy Lynch和Seth Gilbert,“Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services”,ACM SIGACT News,Volume 33 Issue 2(2002),pg。 51-59。

[1] "Brewer's CAP Theorem",julianbrowne.com,检索02-Mar-2010

[2] "Brewers CAP theorem on distributed systems",royans.net

答案 13 :(得分:3)

看一下CAP定理

编辑:RavenDB似乎符合ACID

答案 14 :(得分:3)

提到了FoundationDB,当时它还没有开源。它在两天前由Apple开源: https://www.foundationdb.org/blog/foundationdb-is-open-source/

我认为它符合ACID。

答案 15 :(得分:3)

要添加到备选列表中,另一个完全符合ACID标准的NoSQL数据库是GT.M

答案 16 :(得分:3)

Hyperdex Warp http://hyperdex.org/warp/ Warp(ACID功能)是专有的,但Hyperdex是免费的。

答案 17 :(得分:2)

<强> db4o的

  

与滚动你自己的持久性或   序列化,db4o是ACID   交易安全并允许   查询,复制和架构   运行期间的变化

http://www.db4o.com/about/productinformation/db4o/

答案 18 :(得分:2)

Tarantool是一个完全ACID NoSQL数据库。您可以发出CRUD操作或存储过程,一切都将严格按照ACID属性运行。您还可以在此处阅读:http://stable.tarantool.org/doc/mpage/data-and-persistence.html

答案 19 :(得分:1)

BergDB是一个轻量级,开源的NoSQL数据库,从开始运行ACID事务开始设计。实际上,BergDB比大多数SQL数据库“更”ACID,因为唯一的方式来改变数据库的状态是运行具有最高隔离级别的ACID事务(SQL术语:“可序列化”) )。脏读,不可重复读或幻像读不会有任何问题。

在我看来,数据库的性能仍然很高;但是不要相信我,我创造了这个软件。请自己尝试一下。

答案 20 :(得分:1)

许多现代NoSQL解决方案不支持ACID事务(原子隔离多键更新),但大多数都支持允许您在应用程序级别实现事务的原语。

如果数据存储支持每个键的线性化和比较和设置(文档级原子性),那么它足以实现客户端事务,您可以选择多个选项:

  1. 如果您需要Serializable隔离级别,那么您可以使用Google用于Percolator系统或Cockroach Labs CockroachDB的相同算法。我发表了关于它的博客并创建了step-by-step visualization,我希望它能帮助您理解算法背后的主要思想。

  2. 如果您希望获得较高的争用,但您可以获得Read Committed隔离级别,那么请查看Peter Bailis的RAMP transactions

  3. 第三种方法是使用补偿交易,也称为传奇模式。它在80年代晚期的Sagas论文中有所描述,但随着分布式系统的发展变得越来越实际。请参阅Applying the Saga Pattern对话获取灵感。

  4. 适用于客户端事务的数据存储列表包括具有轻量级事务的Cassandra,具有一致存储桶的Riak,RethinkDB,ZooKeeper,Etdc,HBase,DynamoDB,MongoDB等。

答案 21 :(得分:1)

MarkLogic也是ACID complient。我认为现在是最大的参与者之一。

答案 22 :(得分:1)

等待结束了。

符合ACID标准的NoSQL DB已经淘汰-----------看看citrusleaf

答案 23 :(得分:1)

YugaByte DB支持ACID Compliant distributed txns以及查询层上的Redis和CQL API兼容性。

答案 24 :(得分:0)

节点级别UP是事务性的,并且构建在leveldb https://github.com/rvagg/node-levelup#batch

答案 25 :(得分:0)

VoltDB是一个声称符合ACID标准的参赛者,虽然它仍然使用SQL,但它在可扩展性方面的目标是相同的

答案 26 :(得分:0)

答案 27 :(得分:0)

DynamoDB是NoSQL数据库,并且具有ACID transactions

答案 28 :(得分:0)

虽然它只是 嵌入式引擎而不是服务器,但leveldb具有WriteBatch并能够打开同步写入以提供ACID行为。

答案 29 :(得分:-1)

不仅NoSQL不符合ACID设计。 NoSQL运动拥抱BASE(基本可用,软状态,最终一致性)声称与ACID相反。 NoSQL数据库通常称为最终一致的数据库。 要理解这些差异,你应该深入研究CAP定理(又名Brewer定理)

访问http://www.julianbrowne.com/article/viewer/brewers-cap-theorem