MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库系统中的并发控制技术,用于解决并发访问数据库时的读写冲突问题。在MVCC中,每个事务都可以看到数据库中的某个版本,而每个版本是由对数据库的更新操作生成的。
RR(Repeatable Read,可重复读)和RC(Read Committed,读已提交)是MVCC中常见的两种并发控制方式。
在RR中,读取的数据始终是在事务开始时存在的数据版本。在这种情况下,事务启动时会获取一个数据库快照,所有的读操作都从这个快照中获取数据。因此,在RR中,不管其他事务是否对数据进行了修改,当前事务都不会看到这些修改。这可以通过在每个修改上设置版本号或时间戳来实现。在RR中,事务只能看到在其开始之前的数据库状态,这可以确保事务在读取的同时不会受到其他事务的干扰。
在RC中,读取的数据始终是已提交的数据版本。这意味着在RC中,事务只能看到已提交的数据,并且事务可以在其生命周期内看到对数据的更改。当其他事务修改数据时,事务会在下一次读取时看到这些更改。在RC中,每个修改操作也需要设置版本号或时间戳。
在MVCC中,使用快照来提供事务的一致性视图,同时使用版本号或时间戳来区分数据的不同版本。每个事务在执行之前都需要获取一个一致性视图,以保证其读取的数据版本是一致的。同时,当一个事务对数据进行修改时,它会创建一个新版本,并且所有其他事务都会使用其自己的一致性视图,以确保事务之间的隔离性。