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

数据库MVCC是什么

问题

数据库MVCC是什么

我的回答

MVCC,全称是"多版本并发控制"(Multi-Version Concurrency Control),是数据库管理系统中常用的一种并发控制技术。说白了,它就是通过维护数据的多个版本,让读操作不会被写操作阻塞,从而提高并发性能。

我觉得理解MVCC最好从它要解决的问题入手。在传统的加锁并发控制中,读会阻塞写,写也会阻塞读,这样并发性能就很差。MVCC巧妙地解决了这个问题,它的核心思想是:读不阻塞写,写也不阻塞读,每个事务看到的都是特定时间点的数据快照。

具体实现上,以MySQL的InnoDB为例,它是这样做的:

首先,InnoDB给每行数据都增加了两个隐藏字段:创建版本号(DB_TRX_ID)和删除版本号(DB_ROLL_PTR)。当事务开始时,会分配一个递增的事务ID。

当事务对数据进行修改时,实际上不会直接修改原数据,而是创建一个新版本,并用老版本构建一个回滚指针,形成一个版本链。原来的数据并不会立即删除,而是标记一个删除版本号。

读操作时,MVCC会根据事务隔离级别和事务ID,从版本链中选择合适的版本来读取。比如在"可重复读"隔离级别下,事务只能读到事务开始前已经提交的数据,以及自己修改但还未提交的数据。

这样设计的好处是显而易见的:读写不冲突,大大提高了并发性能;同时还能实现不同的事务隔离级别,比如"读已提交"、"可重复读"等。

当然,MVCC也有缺点,比如需要额外的存储空间来保存多版本数据,以及定期清理过期版本的开销。但总体来说,它是一种非常优秀的并发控制技术,被MySQL、PostgreSQL等主流数据库广泛采用。

http://www.dtcms.com/a/346957.html

相关文章:

  • 每日算法题【链表】:链表的中间节点、返回倒数第k个节点、合并两个有序链表
  • Git checkout 与 Git reset 核心区别解析(分支与版本关联逻辑)
  • C语言初学者笔记【动态内存管理】
  • 在WSL2 Ubuntu中部署FastDFS服务的完整指南
  • Elasticsearch底层存储原理
  • Codeforces Round 1043 (Div. 3)(A-E)
  • 数据库优化提速(三)JSON数据类型在酒店管理系统搜索—仙盟创梦IDE
  • jetson ubuntu 打不开 firefox和chromium浏览器
  • 非线性规划学习笔记
  • SpringBootWeb入门
  • 力扣(全排列)
  • 生成模型 | 扩散模型损失函数公式推导
  • Go语言数据结构与算法-基础数据结构
  • 《WinRAR》 [7.12] [x64] 烈火版 下载
  • 数据结构的线性表:顺序表
  • piecewise jerk算法介绍
  • 2025年音乐创作大模型有哪些?国内国外模型汇总以及优点分析
  • 高阶数据结构---ST表
  • 同类软件对比(一):Visual Studio(IDE) VS Visual Studio Code
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk
  • MySQL存储过程入门
  • OCR、文档解析工具合集(下)
  • MySQL InnoDB引擎
  • STM32F1 SysTick介绍及应用
  • Nacos-12--扩展:@RefreshScope和@ConfigurationProperties实现热更新的原理
  • PHP - 线程安全 - 疑问与答案
  • springboot 表现层消息一致性处理:前后端数据协议
  • SpringMVC相关自动配置
  • 第1篇:走进日志框架的世界 - 从HelloWorld到企业级应用
  • C++中, new对象时有哪几种情况会导致new失败