谈一谈MVCC

一 MVCC的定义
MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统(DBMS)中的并发控制方法,它允许数据库读写操作不加锁地并发执行,从而提高了数据库系统的并发性能。MVCC 主要是通过维护数据的多个版本来实现这一点的,每个事务在执行时都会基于数据的某个版本进行操作,这样即使多个事务同时操作同一数据,也不会相互干扰。

二 MVCC 的主要特点
★非锁定读:在MVCC的支持下,读操作(SELECT)不会阻塞写操作(INSERT、UPDATE、DELETE),同时写操作也不会阻塞读操作。这是因为读操作可以读取数据的旧版本,而写操作则会在旧版本的基础上创建新版本。
★一致性读:事务在执行过程中,无论其他事务如何修改数据,该事务读取的数据版本都是一致的,即事务开始时数据的状态。这保证了事务的隔离性。
★写操作的可见性控制:写操作(更新或删除)会创建数据的新版本,并且这些新版本对其他事务的可见性受到事务隔离级别的控制。
三 MVCC 的实现机制
MVCC 的具体实现依赖于数据库的内部结构和事务管理策略,但通常包括以下几个关键组件:

★版本链:每个数据项(如表中的一行)都可能有多个版本,这些版本通过某种方式(如指针或时间戳)链接起来,形成版本链。
★隐藏列:在数据项中增加额外的隐藏列来存储版本信息,如创建时间戳、删除时间戳(对于已删除的数据项)等。
★读视图:每个事务在开始时都会创建一个读视图,该视图定义了事务可以看到的数据版本范围。事务只能看到在这个范围内创建或未删除的数据版本。
★事务ID和版本号:每个事务都有一个唯一的事务ID和版本号,用于标识事务的先后顺序和数据版本的新旧。

四 MVCC为数据库解决的问题
(一)数据库的三种并发场景
读读并发:不会产生并发问题,也不需要并发控制。
读写并发:会造成事务隔离性问题,脏读、幻读和不可重复读的问题。
写写并发:可能出现数据更新丢失的问题。

(二)MVCC可以为数据库解决以下三个方面的问题:

第一 并发读写数据。在并发读写数据库时,提高数据库的并发读写的处理能力,不用阻塞写操作;写操作也不用去阻塞读操作,从而去提高数据库的并发读写的处理能力。

第二:实现读一致性,解决脏读、幻读、不可重复读等事务隔离问题,但它不能解决数据更新的丢失问题。
第三:采用乐观锁或者悲观锁用来解决写和写的冲突,提高数据库的并发性能。

(三)MVCC机制下的数据库读写
在这里插入图片描述

五 MVCC 的优势与劣势
★优势:

提高并发性能:通过减少锁的使用,MVCC 可以显著提高数据库的并发处理能力。
简化事务管理:MVCC 使得事务的提交和回滚操作更加简单和高效。
★劣势:
存储空间占用:由于需要存储数据的多个版本,MVCC 会增加数据库的存储空间需求。
复杂性增加:MVCC 的实现相对复杂,需要数据库管理系统在内部进行更多的版本管理和可见性控制。
六 常见的MVCC数据库
1 PostgreSQL
2 MySQL(InnoDB存储引擎)
3 Oracle
4 SQL Server(在某些配置和版本下)

这些数据库系统通过不同的方式实现了MVCC,但基本原理是相似的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果手机突然黑屏打不开怎么办?

苹果手机作为市场上备受欢迎的智能手机之一,其稳定性和流畅性一直备受赞誉。然而,偶尔遇到手机突然黑屏无法打开的情况,也会让不少用户感到困扰。今天,我们就来详细探讨一下苹果手机突然黑屏打不开的解决方法,帮助大家…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务(安装后服务默认自启动) 三、安…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…

传输层协议UDP

本篇将主要介绍 UDP 协议&#xff0c;介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项&#xff0c;以及有关 UDP 的 Socket 编程程序&#xff0c;同时重点介绍了操作系统对于 UDP 协议报文的管理。 接着介绍了有关端口号的映射。 …

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信&#xff0c;引…

【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形

给你一个 m x n 的二进制矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有…

ICLR2024: 大视觉语言模型中对象幻觉的分析和缓解

https://arxiv.org/pdf/2310.00754 https://github.com/YiyangZhou/LURE 背景 对象幻觉&#xff1a;生成包含图像中实际不存在的对象的描述 早期的工作试图通过跨不同模式执行细粒度对齐&#xff08;Biten et al.&#xff0c;2022&#xff09;或通过数据增强减少对象共现模…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月&#xff0c;2024 天池云原生编程挑战赛决赛名单公布&#xff01; 本届大赛规模创新高&#xff0c;参赛战队达 20000 支&#xff0c; 广覆盖国内外优秀高校和杰出企业&#xff01;吸引了来自北京大学、清华大学等 176 所国内外优秀高校&#xff0c;以及美团、米哈游…

2025年25届必看:如何用Java SpringBoot+Vue搭建大学生成绩量化管理系统?

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

青岛实训 8月21号 day33

1.设置主从从mysql57服务器 1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.g…

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…

jQuery入门(七)jQuery实现按钮分页

一、分页案例分析 功能分析&#xff1a;使用分页插件&#xff0c;实现分页&#xff0c;效果如下图&#xff1a; 二、实现思路和代码 2.1&#xff09;页面实现分析 1.引入分页插件的样式文件和 js 文件。 2. 定义当前页码和每页显示的条数。(分页必备信息) 3. 调用查询数据…

挂轨巡检机器人在发电厂与煤矿皮带机场景的应用

一、引言 在发电厂和煤矿等重工业领域&#xff0c;皮带机作为关键设备&#xff0c;其运行状态直接关系到生产效率和安全。然而&#xff0c;传统的人工巡检方式不仅效率低下&#xff0c;还存在安全隐患。随着智能巡检技术的不断发展&#xff0c;杭州旗晟智能科技有限公司推出的…

使用mobaxterm连接linux出现连接中断问题

1.问题描述 使用mobaxterm在连接到远程服务器时&#xff0c;如果隔一段时间不进行操作的话&#xff0c;会出现中断连接的现象。 2.解决 为了增强Linux系统的安全性&#xff0c;我们需要在用户输入空闲一段时间后自动断开&#xff0c;这个操作可以由设置TMOUT值来实现。将以下…

HTB-Pennyworth(cve查询 和 exp使用)

前言 各位师傅大家好&#xff0c;我是qmx_07,今天给大家讲解Pennyworth靶场 渗透过程 信息搜集 服务器端口开放了8080http端口 访问网站 服务器使用jenkins cms系统&#xff0c;版本是2.289.1 通过弱口令爆破&#xff0c;账户是root,密码是password 通过命令执行nday 连…

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题&#xff0c;如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选&#xff1a;文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像

vue 踩坑记录

本地开发没有cookie 解决方案 设置代理&#xff0c;并把changeOrigin设为true proxy的changeOrigin如果设置为false&#xff1a;请求头中host仍然是浏览器发送过来的host&#xff1b; 如果设置成true&#xff1a;发送请求头中host会设置成target。 允许axios请求携带cookie等凭…

自制深度学习推理框架之卷积和池化算子的设计与实现

文章目录 一、池化算子1.1 池化定义1.2 maxpooling实现1.2 1 Forward前向计算1.2.2 GetInstance实例化Layer1.2.3 LayerRegistererWrapper注册算子 二、卷积算子2.1 卷积定义2.2 Im2col优化卷积计算2.3 分组卷积2.4 Im2Col实现2.5 卷积算子实现2.5.1 GEMM实现2.5.2 卷积算子的实…

finalshell 4.5.x在m1mac闪退

使用过程中会出现突然闪退&#xff0c;尤其在定位生产打开一堆窗口的情况下&#xff0c;绝绝子 闪退崩溃日志&#xff1a; Thread 116 Crashed:: Java: pool-4-thread-28 0 libsystem_kernel.dylib 0x18e926600 __pthread_kill 8 1 libsystem_pthread.dyl…