02 探讨事务一致性

1.事务的ACID特性

在数据库中,“事务”是由多个操作构成的序列。广义上的事务一致性具化到了原子性、一致性、隔离性和持久性这4个方面。

  1. 原子性(Atomicity):指事务是一个不可分割的操作单元,要么全部执行成功,要么全部失败回滚。如果事务中的任何一个操作失败,整个事务将回滚到最初的状态。
  2. 一致性(Consistency):指事务将数据库从一个一致状态转变为另一个一致状态。在事务开始和结束时,数据库必须满足预定义的一致性规则,以保持数据的有效性和完整性。
  3. 隔离性(Isolation):指每个事务的执行应该与其他事务的执行相互隔离,以防止彼此干扰。隔离级别定义了事务之间的隔离程度,包括已提交读、可重复读、快照隔离和可串行化。
  4. 持久性(Durability):指一旦事务提交,其结果就应该永久保存在数据库中,即使系统发生故障也不会丢失。数据库通过将事务日志持久化到磁盘来实现持久性。

1.1 原子性和一致性的差异

原子性关注事务内部状态,要不全部成功,要不全部失败

一致性关注数据可见性,中间状态的数据对外不可见,只有最初状态和最终状态的数据对外可见

1.2 持久性核心思想即应对系统故障

目的都是保证在本地节点之外,至少有一份完整的日志可用于数据恢复。

存储硬件无损、可恢复故障: 主要依托于预写日志(Write Ahead Log, WAL)保证第一时间存储数据。WAL采用顺序写入的方式,可以保证数据库的低延时响应。

存储硬件损坏、不可恢复的故障: 需要用到日志复制技术,将本地日志及时同步到其他节点。

  • 单体数据库自带的同步或半同步的方式,其中半同步方式具有一定的容错能力
  • 日志存储到共享存储系统上,后者会通过冗余存储保证日志的安全性
  • 基于Paxos/Raft的共识算法同步日志数据,在分布式数据库中被广泛使用

1.3 隔离性分为多个隔离级别

较低的隔离级别就是在正确性上做妥协,将一些异常现象交给应用系统的开发人员去解决,从而获得更好的性能。


02 探讨事务一致性
http://example.com/2024/05/18/02探讨事务一致性/
作者
Wangxiaowang
发布于
2024年5月18日
许可协议