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

Read View 在 MVCC 里如何工作的?

把数据库想象成一间“时间照相馆”。  
每当你开启一个事务,前台就给你拍一张“快照门票”(Read View),上面写了三行关键信息:

1. 此刻正在活跃(还没提交)的所有事务 ID 列表  
(仍在暗房里洗照片的客人名单)  
2. 下一个将分配的事务 ID(下一位客人的号码)  
3. 你自己的事务 ID(你的号码)

拿着这张门票,你可以随便翻阅整本相册(数据所有历史版本),但只看**符合规则的旧照片**——这就是 MVCC 的魔法。

------------------------------------------------
一条顺口溜:  
“号码比我小,且不在黑名单,才给我看;否则往前翻更早的照片。”

------------------------------------------------
直观三步:

1. 每行数据自带两个隐藏列:  
`created_by` = 拍这张照片的事务号  
`deleted_by` = 撕掉这张照片的事务号(没撕就是空)

2. 你拿着门票比对:  
• 如果 `created_by` ≥ 我的「下一位号码」→ 这张照片是未来人拍的,跳过。  
• 如果 `created_by` 在我的活跃名单里 → 拍照的人还没结账,跳过。  
• 如果 `deleted_by` 存在且 ≤ 我的事务号 → 这张照片已被我或更早的人撕掉,跳过。  

   只有通过全部过滤的那一张,才是你在当前快照里能看到的版本。

3. 不同隔离级别换门票:  
• Read Committed:每次查询都重新拍一张门票(读取最新已提交)。  
• Repeatable Read:整个事务只用最开始的门票(保证可重复读)。

------------------------------------------------
一页图就记住:

```
门票(Read View)
┌────────┬────────────┐
│ 我的ID │   100      │
│ 活跃ID │ 97 98 99   │
│ 下一ID │   101      │
└────────┴────────────┘

数据行各版本
┌─数据值─┬created_by┬deleted_by┐
│  Alice │    96    │   —      │ ← 给你看(96 < 100 且不在活跃)
│  Bob   │    98    │   —      │ ← 不给你看(98 在活跃)
│  Carol │    95    │   99     │ ← 不给你看(被 99 撕了)
└────────┴──────────┴──────────┘
```

就这么简单:Read View 就是一张“时间过滤门票”,MVCC 靠它让你看到过去某一瞬间的一致世界。

http://www.xdnf.cn/news/18111.html

相关文章:

  • 下载大模型经常遇到的报错Still waiting to acquire lock on Wan2.1-VACE-14B/.cache与解决办法
  • Linux系统WireShark抓取本地网卡报文
  • 发布npmjs组件库
  • 套接字超时控制与服务器调度策略
  • 多台服务器批量发布arcgisserver服务并缓存切片
  • 开发指南133-设定列表分页的初始默认每页行数
  • vue从入门到精通:搭建第一个vue项目
  • 【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
  • Rust学习笔记(六)|Rust 中的常用集合(Vector、String、HashMap)
  • Rust 异步中的 Waker
  • Linux权限的学习
  • 概率论基础教程第4章 随机变量(三)
  • 【opencv-Python学习笔记(7):图像平滑处理】
  • IntelliJ IDEA 开发配置教程
  • 独立看门狗(IWDG)
  • 决策树简单实战
  • 「数据获取」《防城港市统计年鉴》(2014-2020)(获取方式看绑定的资源)
  • 图像分类精度评价的方法——误差矩阵、总体精度、用户精度、生产者精度、Kappa 系数
  • 详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
  • 一套GoldenGate → Kafka → Flink → MySQL 的端到端增量同步方案
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • 3D检测笔记:基础坐标系与标注框介绍
  • 深层语义知识图谱:提升NLP文本预处理效果的关键技术
  • 【P18 3-10】OpenCV Python—— 鼠标控制,鼠标回调函数(鼠标移动、按下、。。。),鼠标绘制基本图形(直线、圆、矩形)
  • 在 PyCharm Notebook 中安装 YOLO
  • Jupyter 中实现交互式图表:ipywidgets 从入门到部署
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 01数据结构-交换排序
  • AWS Neptune:图数据库的强大潜力
  • Spring AI RAG 检索增强 应用