当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否有符合ACID标准的NoSQL数据存储?》经验,为你挑选了11个好方法。

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



1> AJ...:

我纯粹是张贴此作为一个答案,支持对话- 蒂姆·梅伊,nawroth和CraigTP建议可行的数据库.由于使用了Erlang,CouchDB将是我的首选,但还有其他人.

我说ACID并不矛盾或否定的概念NoSQL的 ......虽然似乎是继发表的意见趋势鸽子,我要说的概念是不同的.

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

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

(A)当您做某些事情来更改数据库时,更改应该作为一个整体工作或失败

(C)数据库应保持一致(这是一个相当广泛的主题)

(I)如果其他事情同时发生,他们应该无法在更新中看到事情

(d)如果系统炸毁(硬件或软件)的数据库需要能够挑选自己备份; 如果它说它已完成应用更新,则需要确定

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

一些资源供进一步阅读:

关于ACID的维基百科文章

关于传播限制的维基百科

维基百科(是的,我喜欢这个网站,好吗?)关于数据库规范化

关于CouchDB的Apache文档,很好地概述了它如何应用ACID

关于集群计算的维基百科

Wikipedia(再次......)关于数据库事务


好答案.你可以同时拥有NoSQL + ACID和非ACID-RDBMS(想想MySQL + MyISAM).我*通常*认为NoSQL是"最终一致的".我也会投入CAP定理... :-)

2> CraigTP..:

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

嗯,根据关于NoSQL的维基百科文章的旧版本:

NoSQL是一种推动松散定义的非关系数据存储类的运动,它打破了关系数据库和ACID保证的悠久历史.

并且:

该名称试图描述越来越多的非关系型分布式数据存储的出现,这些数据存储通常不会尝试提供ACID保证.

NoSQL系统通常提供弱一致性保证,例如最终一致性和仅限于单个数据项的事务,即使可以通过添加补充中间件层来强加完整的ACID保证.

因此,概括地说,我会说的"NoSQL的"数据存储的主要好处之一是它的独特缺乏的ACID属性.此外,恕我直言,越是试图实施和实施ACID属性,越远离你得到的"NoSQL"数据存储的"精神",越接近你得到的"真正的" RDBMS(当然,相对来说,当然).

然而,所有这一切,"NoSQL"是一个非常模糊的术语,并且对个人的解释持开放态度,并且在很大程度上取决于你有多少纯粹主义观点.例如,最现代的RDBMS系统实际上并不坚持所有的埃德加·科德的12条规则他的关系模型!

采用务实的方法,似乎Apache的CouchDB最接近于体现ACID兼容性,同时保留松散耦合,非关系的"NoSQL"心态.


我编辑(待审核)试图更清楚.NoSQL数据模型没有任何暗示ACID事务是不可能的.一些NoSQL分布式系统没有它们.有些人实际上没有任何"中间件层".

3> 小智..:

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

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



4> Ken Tindell..:

FoundationDB符合ACID标准:

http://www.foundationdb.com/

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


不幸的是,它不是开源的.但它确实看起来像一个非常好的数据库.
Apple收购Foundation DB后,我的回答没有实际意义.

5> Arnaud Bouch..:

请确保您阅读Martin Fowler关于NoSQL数据库的介绍.和相应的视频.

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

    面向聚合的数据库;

    面向图形的数据库(例如Neo4J).

按照设计,大多数面向图形的数据库都是ACID!

那么,其他类型呢?

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

基于文档的NoSQL数据库(例如MongoDB,CouchDB);

键/值NoSQL数据库(例如Redis);

列族NoSQL数据库(例如Hibase,Cassandra).

我们称之为Aggregate的是Eric Evans在其域驱动设计中定义为给定有界上下文中的实体和值对象的自给自足.

因此,聚合是我们作为一个单元进行交互的数据集合.聚合形成了数据库的ACID操作的边界.(马丁福勒)

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

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



6> Kevin Cox..:

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

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

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

您可以在其他答案中找到许多示例,因此我不需要在此处列出它们,但是对于各种操作,存在具有ACID合规性的非SQL数据库,一些仅针对单个对象写入的ACID,而一些保证更多.每个数据库都不同.


@ shmish111不是真的。当该术语首次出现时,它的意思是“ No SQL”。“ o”很小,毕竟不是大写字母。当其中一些(NoSQL产品)开始添加类似SQL的查询语言接口时,后来尝试重新定义“不仅SQL”一词。
只是为了迂腐,但它通常意味着'不仅是SQL':-)

7> Michael Borg..:

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


最佳答案.当这场火焰战争出现时,我想向对方询问他们从NoSQL数据库中明确要求的定义功能,并且经常与他们可以在RDBMS中找到的功能重叠 - 不是因为一个或RDBMS符合NoSQL主题,而仅仅因为他们的功能"要求"是如此模糊,以至于它们并没有完全否定,这些功能在(并非所有必需的)RDMBS中都有发现.为你的评论伙伴+1!

8> dscape..:

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



9> Lennart Rege..:

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

但是,它只是Python.



10> nawroth..:

如果您正在寻找符合ACID标准的键/值存储,那么就是Berkeley DB.在图形数据库中,至少Neo4j和HyperGraphDB提供ACID事务(HyperGraphDB目前实际上使用Berkeley DB进行低级存储).



11> J Chris A..:

作为NoSQL的创始人之一(我是Apache CouchDB的早期撰稿人,以及2009年在CBS Interactive/CNET举办的第一次NoSQL活动的发言人)我很高兴看到新算法创造了以前不存在的可能性.Calvin协议提供了一种思考CAP和PACELC等物理约束的新方法.

Calvin不使用主动/被动异步复制或主动/主动同步复制,而是通过使用类似RAFT的协议来维护事务日志,从而在副本中断期间保留正确性和可用性.此外,在每个副本上确定性地处理事务,消除了死锁的可能性,因此仅通过一轮共识就可以达成一致.这使得即使在全球多云部署中也能快速实现.

FaunaDB是唯一使用Calvin协议的数据库实现,使其非常适合需要具有NoSQL规模和灵活性的大型机数据完整性的工作负载.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有