文章目录


ACID和CAP理论

ACID

**atomicity(原子性):**所有的事务要么都成功要么都失败,

**consistency(一致性):**执行事务的前后,数据库的状态保持一致

**isolation(隔离性):**即不同事务之间的相互影响和隔离的程度。

**durability(持久性)????*可以理解为事务执行完后,该事务对数据库的更改便持久到了数据库中,这个更改是永久的

CAP

**一致性(Consistency) ????*不同机器访问一致,即所有节点在同一时间具有相同的数据

**可用性(Availability) ????*客户端总是可以读写,即保证每个请求不

管成功或者失败都有响应

分隔容忍(Partition tolerance):​ 分到多个机器形成多个分区,即使网络故障依然可以工作,即系统中任意信息的丢失或失败不会影响

系统的继续运作

我们都知道在关系型数据库中是需要满足ACID特性的,而在NoSQL中是是不能同时满足CAP三个理论的,但不是说,CAP理论是不对的哈。

下面先来看可用性(A)和一致性©的冲突:

P:分布式系统都分布在各个子网络,每一个网络叫做一个区,所以每一个分区都是分隔的。一般来说,分区容错是不能容忍的。

但是,需要满足分区容忍的话,就需要花费一定的时间进行数据的复制,在数据复制时,需要保证数据的一致性的话,就不能对外提供访问请求,需要等数据复制完时,才能进行访问,这样就违背了可用性(A)。下面我们来看一个例子:

ACID和CAP特性_数据库ACID和CAP特性_nosql_02

client向G1发起一个写请求,将其改为v1,这时client读取G1获得到v1,满足可用性。但是当用户访问G2时返回的是v0的话,这样就不满足一致性了。

ACID和CAP特性_关系型数据库_03

当G2需要将数据更新为v1时,这个时候,要是想要保证数据的一致性,必须在G1在写操作时,锁定G2的读操作和写操作,当两者的数据同步后,才能重新开放读写。这样就和可用性冲突了

所以说,在非关系型数据库中,CAP理论是不能同时被满足的。

写。这样就和可用性冲突了

所以说,在非关系型数据库中,CAP理论是不能同时被满足的。