【微云数聚整理】 【翻译自:https://neo4j.com/blog/acid-vs-base-consistency-models-explained/】 【由Neo4j APAC授权编译发布】
谈到NoSQL数据库,其数据一致性模型有时与关系数据库使用的模型有着显著的不同(存储上不同NoSQL之间也有很大的不同)。
我们熟知的数据一致性模型有ACID和BASE。虽然他们相互竞争、努力想证明自己比对方优越,但这两种一致性模型各有优缺点,适用不同场景。让我们仔细分析下两种数据库一致性模型。
在图数据库入门系列文章中,假设您对图数据库了解很少,我将带您了解图技术的基础知识。在过去的几周里,我们讨论了为什么图技术是未来、为什么连接数据很重要、数据建模的基础(和陷阱)、为什么数据库查询语言很重要、命令式和声明式查询语言之间的差异、基于图论的预测建模、图搜索算法的基础,以及为什么我们需要NoSQL数据库。
本周,我们将更详细地了解ACID和BASE数据库一致性模型之间的主要区别,以及在数据事务处理方面的差异。
- ACID一致性模型
许多开发者在使用关系数据库时熟悉ACID事务处理,而ACID一致性模型也已经成为规范。
ACID特性提供了一个安全的环境,可以对您的数据进行操作。ACID的缩写表示:
-
原子性(Atomic) 事务中的所有操作要么都成功,要么回滚到事务开始前的状态。
-
一致性(Consistent) 事务完成后,数据库系统处于有效状态。
-
隔离性(Isolated) 并发环境中,事务有各自的完整数据空间,当不同事务同时操纵相同的数据时,由数据库控制事务按顺序运行。
-
持久性(Durable) 执行事务的结果必须永久保存,即使在出现故障时也是如此。
ACID特性意味着一旦事务执行完毕,它的数据必须一致(写一致性),并且写入磁盘,这可能涉及多个不同的内存地址。
对于应用程序开发者来说,写一致性是非常好的特性,但是它需要复杂的锁,对于大多数用例来说,这通常是一个重量级的模式。
谈到NoSQL技术,Neo4j图数据库使用ACID一致性模型来确保数据的安全性和一致性存储。
- BASE一致性模型
对于大多数领域和用例,相比实际需要的,ACID事务处理过于保守(即它们更担心数据安全)。
在NoSQL数据库领域,有观点认为ACID事务处理不再适用,数据库系统通过牺牲某一时刻数据强一致性、实时性和准确性,可以显著提升系统的伸缩性。
(值得一提的是,基于.NET的RavenDB在支持ACID事务方面逆势而上。)
下面是BASE的缩写表示:
-
基本可用(BasicallyAvailable) 数据库系统大部分时间都可用。
-
软状态(Soft state) 存储不必写一致,不同的数据副本也不必一直保持一致。
-
最终一致性(Eventually Consistent) 数据副本在经过一段时间的同步后,最终能够达到一致性状态(例如,在读取时延迟)。
BASE特性比ACID要弱的多,但在两个一致性模型之间没有直接的一对一映射。
BASE模型数据存储更重视系统可用性(系统的可伸缩性非常重要),但它不能保证数据副本的写一致性。总的来说,BASE一致性模型提供了比ACID更弱的特性:数据在某个时刻将保持一致,无论是在读取时(如Riak),还是始终保持一致,但仅限于某些已处理的过去快照(如Datomic)。
BASE一致性模型主要用于聚合存储,包括列、键值和文档存储。
- ACIDvs BASE
对于您的应用是否需要ACID和BASE一致性模型,我们没有正确的答案。开发者和数据架构师应该根据具体情况对数据一致性进行取舍,而不仅仅是基于发展趋势或以前使用的模型。
考虑到BASE的弱一致性,如果开发者为其应用选择BASE存储,那么他们需要对数据一致性更加了解,熟悉所选聚合存储的BASE特性,并在这些约束下工作。
另一方面,与ACID简单的事务特性相比,受限于BASE特性进行规划有时会是一个主要缺点。对于数据可靠性和一致性要求很高的用例(例如银行),ACID数据库非常适合。
在接下来的几周里,当涉及到聚合存储和其他图技术时,我们将深入研究更多的ACID/BASE特性。
更多Neo4j技术咨询: 联系人:微云数聚 于松林 电话:13910069835 Email:yusonglin@we-yun.com 微信号:ysllong_0226 微云数聚官网:www.we-yun.com