当前位置: 首页 > news >正文

MVCC:多版本并发控制案例分析(一)

(笔记总结自b站马士兵教育课程)

一、简介

MVCC:全称multi-version Concurency control,多版本并发控制,是为了解决并发读写问题存在的。MVCC的实现原理由三部分组成:隐藏字段、undolog、readview。

二、概念补充

当前读:读取的总是最新的数据,例如update、insert、delete等等。

快照读:读取的是历史的数据,例如select。

数据库并发场景:

①读读:不会产生任何问题,也不需要进行并发控制。

②读写:会存在数据安全问题,比如脏读、幻读、不可重复读,可以通过加锁的方式来解决,但是会存在性能安全问题。

③写写:会存在数据安全问题,比如更新丢失问题。

三、隐藏字段和undolog

mysql所对应的行记录除了我们自定义的字段之外,mysql会默认的添加一些隐藏字段,对于用户是不可见的。

DB_TRX_ID创建这条记录或者最后一次修改该记录的事务id
DB_ROLL_PTR回滚指针,指向这条记录的上一个历史版本
DB_ROW_ID隐藏主键,当表创建的时候没有设置主键,那么会生成一个6字节的rowid

(事务id:mysqlserver自动赋值,并且是递增的)

事务1新增一条记录:

nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
ABC101NULL1

undolog:回滚日志,表示在进行insert、delete、update操作的时候产生的方便回滚的事务。

事务2修改name=DEF:

nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
DEF1020x1231

此时undolog代码块:

 

nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
ABC101NULL1

事务2中的DB_ROLL_PTR 中的地址记录的是事务1版本的数据在undolog的数据。

事务3修改age=12:

nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
DEF1230x4561

此时undolog代码块:

 

nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
DEF1020x1231
                
nameageDB_TRX_IDDB_ROLL_PTRDB_ROW_ID
ABC101NULL1

事务3中的DB_ROLL_PTR 中的地址记录的是事务2版本的数据在undolog的数据,事务2中的DB_ROLL_PTR 中的地址记录的是事务1版本的数据在undolog的数据。

我们发现undolog最终会变成一个链表,链首表示的是最新的旧纪录,链尾表示的是最旧的旧纪录,undolog链表不会无限增加,后台有一个purge的线程来对undolog进行维护,当不需要的时候就会进行删除,在undolog删除的时候会分为两类,insert对应一类undolog,只要事务提交就可以删除,update、delete对应一类undolog,除了事务提交之后,还要保证mvcc不用才会删除。

相关文章:

MVCC:多版本并发控制案例分析(一)

(笔记总结自b站马士兵教育课程) 一、简介 MVCC:全称multi-version Concurency control,多版本并发控制,是为了解决并发读写问题存在的。MVCC的实现原理由三部分组成:隐藏字段、undolog、readview。 二、概…...

以数据为中心的安全市场快速增长

根据Adroit Market Research的数据,2021年全球以数据为中心的安全市场规模估计为27.6亿美元,预计到2030年将增长至393.48亿美元,2021年至2030年的复合年增长率为30.9%。 研究人员表示,以数据为中心的安全强调保护数据本身&#x…...

AUTOSAR汽车电子嵌入式编程精讲300篇-经典 AUTOSAR 安全防御能力的分析及改善(下)

目录 4.4.2 Security 攻击 4.4.3 Security 要求 4.4.4 SDSA 有效性验证 经典 AUTOSAR 安全防御能力分析...

AI绘图提示词Stable Diffusion Prompt 笔记

基础 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt),用来告诉AI哪些需要,哪些不需要词缀的权重默认值都是1,从左到右依次减弱,权重会影响画面生成结果。AI …...

xml元素值需要保留space

XmlReaderSettings.IgnoreWhitespace 属性 如果忽略空白,则为 true;否则为 false。 默认值为 false。 示例 下面创建一个设置对象,该对象可用于构造一个读取器,该读取器去除处理指令、注释和微不足道的空白。 StreamReader tex…...

Eclipse开源代码下载

当前插件开发,需要修改eclipse源码,如需要修改remote相关的代码,所以需要下载相关源码。网上大多资料都说的不清不楚的,也可能我太小白,不明白,反正就是折腾了一两天才感觉有点思路,改如何找源码…...

python多线程、进程

1、 并行和并发 (1)并发:一定周期内,多个任务来回切换执行,宏观上形成“该周期内有多个任务在同时进行”;但同一时间点,只有一个任务在执行。 举例: 你想在2小时内同时完成做饭、扫…...

Vue基础之模板语法介绍

前言 上篇我分享了关于Vue的入门,简单的入了个门。本篇文章将要分享的内容为Vue的模板语法。 一、插值 1.1、文本 1.2、html 1.3、属性 1.4、class、style绑定 1.5、表达式 在Vue的模板语法中,插值是一种常用的方式来动态地将数据渲染到视图中。Vue使用双…...

【SLAM】 前端-视觉里程计之特征点

前端-视觉里程计之特征点 参考资料: 以不变应万变:前端-视觉里程计之特征点 视觉SLAM——特征点法 task05 本次了解了特征点是由关键子和描述子组成,并且对比了SIFT、SURF等七种获取特征点的方法,同时对比了SIFT、SURF和ORB方法…...

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…...

【C++STL基础入门】list的运算符重载和关于list的算法

文章目录 前言一、list运算符1.1 逻辑运算符1.2 赋值运算符 二、list相关算法2.1 查找函数总结 前言 C标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了…...

查找内轮廓(孔洞)

一 说明 findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset=Point());参数列表中有个数据结构参数:hierarchy(译层次结构),hierarchy是一个向量,其元素个数与查找到的轮廓总数相同,每一个…...

Git(6)——GitHub

目录 一、简介 二、概要 三、注册 ​四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git(5)中,我们已经对Git分支的概念和用法有了一定了解,对于在本地进行代码版本管理,其实当前所学的东西基本已经…...

【RocketMQ专题】快速实战及集群架构原理详解

目录 课程内容一、MQ简介基本介绍*作用(解决什么问题) 二、RocketMQ产品特点2.1 RocketMQ介绍2.2 RocketMQ特点2.3 RocketMQ的运行架构 三、RocketMQ快速实战3.1 快速搭建RocketMQ服务3.2 快速实现消息收发3.3 搭建Maven客户端项目3.4 搭建RocketMQ可视化…...

[设计模式] 浅谈SOLID设计原则

目录 单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒转原则 SOLID是一个缩写词,代表以下五种设计原则 单一职责原则 Single Responsibility Principle, SRP开闭原则 Open-Closed Principle, OCP里氏替换原则 Liskov Substitution Principle, LSP接口隔离原则 …...

基于Java+SpringBoot+Vue的旧物置换网站设计和实现

基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步,旧物也成人们的烦恼,…...

Java基本语法2

目录 Java基本语法 第一个Java程序 基本语法 Java标识符 Java修饰符 Java变量 Java数组 Java枚举 Java关键字 Java注释 Java 空行 继承 接口 Java基本语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介…...

【数据结构】树的存储结构;树的遍历;哈夫曼树;并查集

欢~迎~光~临~^_^ 目录 1、树的存储结构 1.1双亲表示法 1.2孩子表示法 1.3孩子兄弟表示法 2、树与二叉树的转换 3、树和森林的遍历 3.1树的遍历 3.1.1先根遍历 3.1.2后根遍历 3.2森林的遍历 3.2.1先序遍历森林 3.2.2中序遍历森林 4、树与二叉树的应用 4.1哈夫曼树…...

CSS选择器练习小游戏

请结合CSS选择器练习小游戏进行阅读(网页的动态效果是没有办法通过静态图片展示的) 网址:请点击 有些题有多种答案,本文就不一一列出了 第一题 答案:plate第二题 答案:bento第三题 答案:#fa…...

Python运算符、函数与模块和程序控制结构

给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…...

Piccolo-FIM:DRAM细粒度访问优化技术解析

1. 现代DRAM架构的细粒度访问挑战在传统DRAM架构中,数据访问的最小单位通常是一个完整的行(Row),这种粗粒度的访问机制在处理图计算等不规则访问模式时暴露出了明显的效率问题。当需要随机访问内存中的离散数据时,系统…...

MCP图像生成服务器:在IDE中无缝集成AI绘图,提升开发与设计效率

1. 项目概述:一个能“听懂人话”的智能图像生成服务器 如果你和我一样,经常在 Cursor、Claude Code 这类 AI 编程工具里写代码、做设计,那你肯定遇到过这样的场景:脑子里有个很棒的视觉创意,比如“一个赛博朋克风格的…...

nlpcda高级配置:如何自定义词典和扩展同义词表

nlpcda高级配置:如何自定义词典和扩展同义词表 【免费下载链接】nlpcda 一键中文数据增强包 ; NLP数据增强、bert数据增强、EDA:pip install nlpcda 项目地址: https://gitcode.com/gh_mirrors/nl/nlpcda nlpcda是一款强大的中文数据增…...

招募Kiro大使!会员权益、内测资格等重磅福利等你领!

亚马逊云科技上线了Kiro社区中心与Kiro Labs,旨在为开发者打造一个发现资源、交流联结、共同成长的专属阵地。目前已有不少开发者主动向项目专区投稿作品、分享活动信息,与众多开发者互帮互助一同成长。现在,亚马逊云科技将社区建设再往前推进…...

审判直击:奥特曼与马斯克的控制权之争,谁在说谎?谁在惩罚谁?

审判中的奥特曼与马斯克 奥特曼表示,他们付出巨大努力创建的慈善机构不容窃取,还猜测马斯克两次试图搞垮它。在审判中,奥特曼展现出 "圣路易斯好小伙" 形象,一开始作证时有些紧张,后放松下来,其证…...

5分钟快速掌握:Sonar CNES Report代码质量报告生成终极指南

5分钟快速掌握:Sonar CNES Report代码质量报告生成终极指南 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 你是否曾为向团队展示代码质量数据而烦…...

开源AR虚拟试衣项目openclaw-genpark-ar-tryon核心技术解析与实践

1. 项目概述:当AR试衣遇见开源社区最近在逛GitHub的时候,偶然发现了一个挺有意思的项目,叫openclaw-genpark-ar-tryon。光看名字,一股浓浓的“开源”和“增强现实”味儿就扑面而来了。点进去一看,果然,这是…...

AI 重构泳装产业,先智先行如何破解行业痛点

春夏季泳装市场需求旺盛,但多数企业深陷效率与成本双重焦虑:设计周期冗长、打板损耗偏高、营销内容同质化严重,难以快速响应潮流变化。北京先智先行科技有限公司聚焦 AI 技术赋能,推出 “先知大模型”“先行 AI 商学院”“先知 AI…...

编程统计产品售后处理时长,客户满意度数据,优化售后流程,降低客户投诉率,提升企业职场服务口碑。

一、实际应用场景描述在制造、家电、消费电子、SaaS 等行业中,售后服务是客户体验的关键环节,典型流程包括:- 客户提交售后申请(报修、退换货、咨询)- 客服受理 → 技术/维修派单 → 上门/处理 → 完成 → 客户评价- 系…...

GDB调试实战:如何像本地变量一样轻松查看函数参数和结构体成员(附常用命令清单)

GDB调试实战:像本地变量一样高效查看函数参数与复杂数据结构 调试大型C/C项目时,最令人头疼的莫过于面对层层嵌套的函数调用和包含数十个成员的结构体。传统调试方式往往让我们陷入内存地址的泥潭,而GDB提供的诸多高级功能可以彻底改变这一局…...