zoukankan      html  css  js  c++  java
  • MySQL事物隔离级别的解决方案MVVC

    数据隔离级别解决方案

    第一种:在读取数据前,对其加锁,阻止其他事物对数据进行修改——Lock Based Concurrency Control(LBCC)

    第二种:生成一个数据请求时间点的一致性数据快照(Snapshot),并用这个快照来提供一定级别的一致性读取

    Multi Version Concurrency Control(MVVC)

    当执行查询SQL时,会生成一致性视图 read-view

    read-view包括

      1)查询时所有未提交事物id数组(还没有commit)

      2)已创建事物最大id

    如[100,200],300

    不可重复读(读已提交):每次select时都会按最新的一次生成read-view

    可重复读:沿用事物中第一条select语句的read-view(其中read-view是session级别的,所有表都会沿用)

    每次Update操作都会生成一个undo日志,Mysql底层会给每张表加两个字段 事物id(trx_id)和回滚指针(roll_pointer)

    MVVC比对规则(read-view和版本链比对规则)

    read-view视图会和undo日志版本链进行对比,版本链比对规则

      1)小于min_Id 数据可见

      2)大于max_Id 数据不可见

      3)在min_Id和max_Id之间:若rowtx-id在数组中表示这个版本是由还没提交事物生成的,不可见

                           若rowtx-id不在数组中,表示这个版本是由已经提交的事物生成,可见

    如果数据不可见,会根据版本链的roll_pointer指针找到上一条数据,直到找到可见的数据

    不同的session拿到的结果集不一样,并不是因为数据被赋值的多份,而是不同session的read-view不同

  • 相关阅读:
    顺序表应用4-2:元素位置互换之逆置算法(数据改进)(SDUT 3663)
    顺序表应用3:元素位置互换之移位算法(SDUT 3326)
    Java——容器(Collection)
    Java——容器(Interator)
    Java——JDK1.5新增强的for循环
    Java——容器(Set)
    Java——容器(List)
    Java——类
    Java——面向对象编程
    Java——递归调用
  • 原文地址:https://www.cnblogs.com/ssskkk/p/13547725.html
Copyright © 2011-2022 走看看