Nosql具有分布式结构,为什么它不支持到ACID属性?newsql也有分布式结构,那么newsql如何保证ACID的支持呢
发布于 2015-08-05 04:59:02
正如您所指出的,NoSQL和NewSQL数据库通常都具有分布式体系结构。分布式并不排除提供ACID保证,也不排除使用或不使用SQL语言,因为事实上存在一些ACID NoSQL数据库。它们是两个不同的东西。
然而,在NoSQL的早期,人们经常争辩说,为了提供web应用程序所需的规模,不仅需要使用分布式体系结构,而且还需要摆脱SQL、关系表和ACID保证。NewSQL在许多方面驳斥了这一论点,表明通过使用专门的体系结构,通常是分布式体系结构,数据库可以是分布式的和可伸缩的,而不会放弃这些东西。
每个数据库都是不同的,即使在“ACID兼容”的数据库中,它们提供的实际保证也有许多变化,因此阅读细节通常很重要。
例如,一些ACID数据库将事务的范围限制为单个操作,例如插入或更新单个记录。其他人放宽了隔离的定义,这样就有可能得到不正确的结果。另一些则放松了持久性,因此存在一些“提交的”事务可能无法在中断中幸存的可能性。许多数据库声称是酸兼容的,但这并不意味着你可以用它们来做一些事情,比如保证只有一个人在飞机上预定一个座位,或者订单永远不会超过库存,或者购买永远不会超过客户的可用余额。
可以遵循非常严格的ACID定义,支持复杂的事务,同时仍然是分布式的和可伸缩的。VoltDB就是一个例子。VoltDB在这里详细描述了它是如何处理事务的:http://voltdb.com/sites/default/files/tn-transactions.pdf
发布于 2015-08-14 23:57:20
如果您正在寻找纯ACID属性(原子性、一致性、隔离性、持久性),NoSQL可能不是准确的解决方案。
如果您正在寻找三个CAP (一致性、可用性和分区)中的两个属性,NoSQL是正确的解决方案。
但是像MongoDB这样的一些NoSQs可以接近实现ACID属性(除了在持久性方面的一些折衷)
请参阅下面的文章,了解MongoDB如何实现ACI (而不是完全D) How ACID is MongoDB
https://stackoverflow.com/questions/31800356
复制相似问题