mysqlACID的实现

12次阅读

共计 611 个字符,预计需要花费 2 分钟才能阅读完成。

原子性(atomicity)

mysql 实现原子性靠 undo log 实现,undo log 和 redo 
log 记录物理日志不一样,它是逻辑日志。可以认为当 delete 一条记录时,undo log 中会记录一条对应
的 insert 记录,反之亦然,当 update 一条记录时,它记录一条对应相反的 update 记录。当执行 rollback 时,就可
以从 undo log 中的逻辑记录读取到相应的内容并进行回滚

一致性(consistency)

mysql 一致性靠 redo log + undo log 二阶段提交实现. 先把数据写入 redo log 这个 logbuffer 缓冲区中, 写完状态改为 prepare, 之后再写入到 undo log 这个 logbuffer 缓冲区中, 之后再进行 commit. 这样无论什么时候都能保证 redo undo 数据是一样

隔离性(isolation)

通过 mysql 的一些锁机制完成

持久性(durability)

mysql 持久需要 redo log 先将数据写入到缓冲区, 之后 (可以配置一些策略) 将缓冲区的数据使用内核空间的 fsync()函数写入到磁盘中.
模拟简单事务提交

-Undo+Redo
事务的简化过程
假设有 A、B 两个数据,值分别为 1,2.
A. 事务开始.
B. 记录 A = 1 到 undolog.
C. 修改 A =3.
D. 记录 A = 3 到 redolog.
E. 记录 B = 2 到 undolog.
F. 修改 B =4.
G. 记录 B = 4 到 redolog.
H. 将 redolog 写入磁盘。
I. 事务提交

正文完
 0