《从Paxos到ZooKeeper》读书笔记之第一章(二)
1.2从ACID到CAP/BASE
这一节由三小节,从大家数值的数据库事务的四个特性,引出来分布式事务的概念。通过对ACID模型的讨论,提出如何构建一个兼顾可用性和一致性的分布式系统方案,于是出现了诸如CAP和BASE这样的分布式经典系统理论
1.2.1 ACID
事务:
1.多个程序并发访问数据库时,事务提供了一种进程间的隔离方法,防止互相干扰
2.未数据库操作序列提供了一个从失败中回复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持数据一致性的方法
四个特性:
1.原子性(Atomicity):要么全部成功执行,要么全部不执行
2.一致性(Consistency):事务执行前后,数据库都必须处于一致性状态
3.隔离性(Isolation):一个事务的执行不被其他事务干扰。即:不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
4.持久性(Durability):一旦某个事务成功结束,那么它对数据库所做的更新必须被永久保存下来。
附:4个事务隔离级别
1.未授权读取:也被称为读未提交。即:事务B可能读取到事务A操作过程中的所有中间值。
2.授权读取:也被称为读已提交。只允许获取已经被提交的数据。即:只能看到最终值而不能看到中间值。授权读取允许不可重复读取。
3.可重复读取:保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的。因此该事务级别禁止了不可重复读取和脏读取,但可能出现幻读
4.串行化:最严格的事务隔离级别,所有事务都被串行执行。
通常优先考虑将数据库系统的隔离级别设置为授权读取。至于不可重复读,幻读,第二类丢失更新等并发问题,可以由应用程序主动采用悲观锁和乐观锁来进行事务控制。
隔离级别对别
隔离级别 |
脏读 |
可重复读 |
幻读 |
未授权读取 |
存在 |
不可以 |
存在 |
授权读取 |
不存在 |
不可以 |
存在 |
可重复读取 |
不存在 |
可以 |
存在 |
串行化 |
不存在 |
可以 |
不存在 |