云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

结合隔离级别RR和RC来详细讲解下MVCC和LBCC

jxf315 2025-07-01 20:49:37 教程文章 4 ℃

MVCC(多版本并发控制)和LBCC(基于锁的并发控制)都是常见的并发控制技术,可以通过不同的隔离级别来实现不同程度的数据一致性和性能需求。

通俗讲解下:

MVCC其实就是查询的时候,会去生成一个readView的class结构,里面会保存一些事务ID数据,比如当前存活的事务ID有哪些,然后跟数据的事务ID进行比对,来决定数据是否展示。

RR 只有在第一次查询的时候会生成一个readView,后面的查询比对的都是第一个查询的时候的结果,所以后面查不到新的值。

RC是每次查询都会生成一个新的readView,这样每次查询我就能拿到最新的数据了,也就产生了不可重复读跟幻读问题。

而LBCC是通过锁的形式去解决不可重复读跟幻读问题,就是我在改数据同一条或者同一批数据的时候,其他事务不能进行改动。但是RR相比于RC多了一个间隙锁,所谓间隙锁,就是会根据你锁的条件会锁定一个区间,所以没有幻读,但是RC隔离级别下,间隙锁只会用在重复键的检查。

下面我将根据两种隔离级别RR和RC来分别详细介绍MVCC和LBCC的工作原理和应用场景。

1、隔离级别为RR(可重复读) 在RR隔离级别下,事务可以读取已提交的数据,并保证在同一个事务中多次读取相同的数据结果都相同。具体来说,MVCC和LBCC的实现方式如下:

  • MVCC:在MVCC中,每个事务开始时会拥有自己的快照视图,即只能看到它开始后已经提交的数据。因此,在RR隔离级别下,MVCC可以保证事务只能访问已提交的数据版本,并且在同一事务中多次读取相同的数据结果都相同。
  • LBCC:在LBCC中,事务可以使用共享锁来读取已提交的数据,而写操作则需要使用排他锁。在RR隔离级别下,LBCC可以保证事务只能访问已提交的数据,并且在同一事务中多次读取相同的数据结果都相同。

2、隔离级别为RC(读已提交) 在RC隔离级别下,事务可以读取其他已提交的事务所修改的数据,并保证在同一个事务中多次读取相同的数据结果都相同。具体来说,MVCC和LBCC的实现方式如下:

  • MVCC:在MVCC中,每个事务开始时会拥有自己的快照视图,即只能看到它开始后已经提交的数据。因此,在RC隔离级别下,MVCC可以保证事务只能访问已提交的数据版本,并且在同一事务中多次读取相同的数据结果都相同。不同之处在于,其他事务提交的新数据版本可能会被当前事务所看到,从而可能导致数据的不一致性。
  • LBCC:在LBCC中,事务可以使用共享锁来读取已提交的数据,而写操作则需要使用排他锁。在RC隔离级别下,LBCC可以保证事务只能访问已提交的数据,并且在同一事务中多次读取相同的数据结果都相同。不同之处在于,其他事务提交的新数据可能会被当前事务所读取,从而可能导致数据的不一致性。

总的来说,MVCC适用于读操作频繁、写操作相对较少的场景,而LBCC适用于读写操作频率相近或写操作频率较高的场景。隔离级别的选择应当综合考虑性能和数据一致性的要求,并根据具体的应用场景和需求进行调整。

最近发表
标签列表