MVCC
...大约 2 分钟
MVCC
MVCC是什么?如何实现的?
MVCC又叫多版本并发控制,工作在读已提交和可重复读的隔离级别下,采用了read view 和undo log版本链来解决隔离性的问题,其中read view是读视图,记录了一些如活跃事务id、创建该read view事务的事务id、最大事务id,最小事务id等一些重要字段,通过比较事务id来判断一个事务能否读取到其他事务的数据,undo log是事务链表,用来记录事务在执行过程中对数据的修改,以便于回滚操作,工作原理就是查看当前事务是否在当前read view中,如果在,会寻找上一个版本的事务id,如果不在,该事物就是查找的事务;读已提交和可重复读差别就在这里
快照读和当前读
- 快照读和当前读是数据库中两种常见的读取数据的方式
- 快照读:指数据库中某个时间点的数据快照。保证事务提交前和事务开始前的数据是一至的,一般读取的是在事务开启前某个时间点的数据。快照读不会受到正在进行并发事务的修改数据的影响,能够提供一致性和可重复性的读取
- 当前读:指读取数据库中最新的数据,即读取操作发生时的数据。但是受到并发事务的影响,因为读取到的数据可能在事务提交后发生变化。
- 在数据库中,快照读通常用于一致性要求比较高的数据,如读取历史记录、生成报表等;当前读适用于读取最新数据状态的场景,如在线交易、实时查询等