谈谈你对MVCC的理解--来自某高手的回答

谈谈你对MVCC的理解------关注我!!!以后更多文章更新

我觉得可以从数据库的三种并发场景来说:

  • 第一种是读和读的并发,就是两个线程A和B同时进行读操作,这种情况不会产生任何并发问题。
  • 第一种是读和写的并发,就是两个线程A和B同一时刻分别进行读和写操作,这种情况可能会对数据库的数据造成以下问题:
    第一个是事务隔离性问题。
    第二个是会出现脏读、幻读、不可重复读的问题。
  • 第三种就是写和写的并发,就是两个线程A和B同时进行写操作,这种情况可能会造成更新丢失问题。
    而MVCC就是为了解决事务操作中并发安全问题的无锁并发控制技术。它是通过数据库中的隐式字段-undo日志-readView来实现的,它主要用来解决三个问题:
    第一个是通过MVCC可以解决读写并发阻塞的问题,从而提高数据库的并发处理能力。
    第二个是MVCC采用的是乐观锁的方式实现,降低了死锁的概率。
    第三个是解决了一致性读的问题,也就是事务启动的时候根据某个条件去读取数据,直到事务结束的时候再去执行相同的条件,还是读到同一份数据,不会发生变化。

而我们在使用MVCC的时候一般是根据业务场景来选择组合搭配乐观锁或者悲观锁,这俩组合中MVCC用来解决读写冲突,乐观锁和悲观锁用来解决写和写的冲突。从而最大程度地提高的数据库的并发性能。

你可能感兴趣的:(mysql夺命连环问系列,mysql)