02 探讨事务一致性
1.事务的ACID特性
在数据库中,“事务”是由多个操作构成的序列。广义上的事务一致性具化到了原子性、一致性、隔离性和持久性这4个方面。
原子性(Atomicity):
指事务是一个不可分割的操作单元,要么全部执行成功,要么全部失败回滚。如果事务中的任何一个操作失败,整个事务将回滚到最初的状态。一致性(Consistency):
指事务将数据库从一个一致状态转变为另一个一致状态。在事务开始和结束时,数据库必须满足预定义的一致性规则,以保持数据的有效性和完整性。隔离性(Isolation):
指每个事务的执行应该与其他事务的执行相互隔离,以防止彼此干扰。隔离级别定义了事务之间的隔离程度,包括已提交读、可重复读、快照隔离和可串行化。持久性(Durability):
指一旦事务提交,其结果就应该永久保存在数据库中,即使系统发生故障也不会丢失。数据库通过将事务日志持久化到磁盘来实现持久性。
1.1 原子性和一致性的差异
原子性
关注事务内部状态,要不全部成功,要不全部失败
一致性
关注数据可见性,中间状态的数据对外不可见,只有最初状态和最终状态的数据对外可见
1.2 持久性核心思想即应对系统故障
目的都是保证在本地节点之外,至少有一份完整的日志可用于数据恢复。
存储硬件无损、可恢复故障: 主要依托于预写日志(Write Ahead Log, WAL)保证第一时间存储数据。WAL采用顺序写入的方式,可以保证数据库的低延时响应。
存储硬件损坏、不可恢复的故障: 需要用到日志复制技术,将本地日志及时同步到其他节点。
- 单体数据库自带的同步或半同步的方式,其中半同步方式具有一定的容错能力
- 日志存储到共享存储系统上,后者会通过冗余存储保证日志的安全性
- 基于Paxos/Raft的共识算法同步日志数据,在分布式数据库中被广泛使用
1.3 隔离性分为多个隔离级别
较低的隔离级别就是在正确性上做妥协,将一些异常现象交给应用系统的开发人员去解决,从而获得更好的性能。
02 探讨事务一致性
http://example.com/2024/05/18/02探讨事务一致性/