MVCC原理、以及靠什么保证ACID | 您所在的位置:网站首页 › 数据库ACID › MVCC原理、以及靠什么保证ACID |
mvcc的实现原理主要由三个隐藏字段、undolog和read view实现。 隐藏字段: DB_TRX_ID:事务ID,创建时的事务或者最后修改记录的事务ID DB_ROLL_PTR:回滚指针,指向上个版本,配合undolog用于回滚 DB_ROW_ID:行号,如果没有主键,innodb自动生成的隐藏主键 undo log日志: 回滚日志,记录历史版本数据 read view: 指某个事务在进行第一次数据读取时,会读取当前最新的数据,也就是说读取操作之前其他事务最后一次修改后的数据 RC和RR的不同在于生成read view的策略不同。 RC只会在事务第一次读取的时候生成read view,之后一直使用这个read view,所以保证了这个事务中读取的数据一直一致。 RR读取的时候则是每次都重新生成read view,所以会产生不可重复读的情况,因为每次读都是最新的数据。 ACID如何保证: A(原子性):依靠undo log回滚日志保证原子性,要么全部失败要么全部成功 C(一致性):靠其他三个以及业务上的处理共同保证 I(隔离性):依靠MVCC保证了隔离性 D(持久性):依靠redo log日志保证了持久性,有数据修改、增加和删除会先记录到redo log日志用,如果最后入库失败也能通过redo log日志恢复 |
CopyRight 2018-2019 实验室设备网 版权所有 |