CAP
C consistency 强一致性
A Availability 可用性
P partition tolerance 分区容忍性
强一致性:指有多个副本的情况下,多线程的情况下,对数据的更新操作体现出来的效果与只有一份是一样的。
可用性:无论数据规模有多大,限定时间内都必须完成读/写操作。
分区容忍性:分区内的机器无法进行网络通信,系统仍然能够正常工作。
三选二
这三种要素最多只能满足其中两个。
为什么不能同时满足呢?来看两个场景:
1 如果系统中没有副本,那么 C肯定满足,A也是没问题的。但是因为没有副本,万一出现网络问题或者硬件故障,那么系统百分之百GG。
2 如果系统有副本,共有两台主机,在主机之间通信没问题的情况下,C是可以满足的。假如主机之间的通信出现问题了,同时对某个副本做了修改操作,从而另外一个主机是没有收到修改请求,那么数据就会不一致。 假如我们选择了C,那么就要拒绝用户的请求,导致A失效。假如我们选择了A,那么C就失效了。
传统选CA,互联网选AP
传统的关系型数据库会选择 CA
而 Nosql会关注AP。
因为传统的数据库更关心数字是否准确,而互联网应用则关心高可用以及用户体验
BASE
BA basically available基本可用
S soft state 软状态
E evetual consistency 最终一致性
基本可用指的是,系统大多数时间是可用用的,允许偶尔失败
软状态:数据的状态不需要任何时刻都完全保持同步,存在一个处于有状态和无状态的中间状态
最终一致性:在给定的时间内,数据达到一致
nosql系统采纳了BASE的原则。不过他们正在逐步向ACID发展,即先遵守BASE,然后尽可能遵守ACID
ACID
A atomicity 原子性
C consistency 一致性
I isolation 事务独立
D durability 持久性
原子性: 一个事务要么都运行,要么都不运行
一致性: 如果有两个进程,1,2,1进程改变了x的值,那么2进程也应该获取到它的改变
独立性:如果有两个事务同时执行,彼此之间不需要知道对方的存在,运行时不能互相影响
持久性:事务运行成功之后,对系统状态的更新是永久的。