zoukankan      html  css  js  c++  java
  • [MySQL] MVCC 多版本并发控制实现的事务

    1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行
    2.通过保存数据在某个时间点的快照实现的
    3.典型的有乐观并发控制和悲观并发控制
    4.innodb的mvcc是每次事务都有递增的版本号,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储操作它事务的版本号
    5.在事务中增删改查就是对两列版本号字段进行操作

    insert 为新插入的每一行保存当前事务版本号到 行创建版本号字段
    update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号
    delete 修改行的删除版本号字段为本次事务的版本号
    select 查询 创建版本号字段 小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的
    查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除

    6.这样的设计就不需要加锁了,读和操作性能好,但是需要额外的存储空间
    7.mvcc只在REPEATABLE READ和READ COMMITED两个隔离下工作;READ UNCOMMITED总是读取最新数据;SERIALIZABLE对读取的行都加锁

  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10677999.html
Copyright © 2011-2022 走看看