云卷云舒【技术解析】:一条数据到底能不能看到——HaishanDB MVCC元组可见性判定
MVCC多版本并发控制是 PostgreSQL 系数据库并发能力的基石。但具体到「某个事务能不能看到某条数据」这个最基础的问题答案藏在元组版本链、事务快照和隔离级别的交叉判定逻辑里。本文完整拆解 HaishanDB 的元组可见性判定机制。HaishanDB 依靠元组多版本序列与当前事务快照两套数据结合事务隔离级别规则完成元组数据可见性判定。下面先交代核心数据来源和判定流程再逐一拆解所有场景。一、前置基础1. 核心数据来源每条逻辑数据会产生多条物理元组版本形成版本链表。例如数据项 Q 的版本序列 Q930、Q931、Q932、Q933、Q934其中数字 93* 代表生成该元组的事务 ID。可见性判定主要提取元组核心字段字段含义xmin创建该元组的事务 IDxmax删除/更新该元组的事务 IDcmin / cmax事务内的命令序号同时结合对应事务的提交、终止状态进行综合判断。事务快照snapshot是另一套关键数据。当前事务执行查询操作时会生成专属快照核心字段包括字段含义xmin快照中事务 ID 下限小于此值的事务均已提交xmax快照中事务 ID 上限大于等于此值的事务尚未开始xip活跃事务 ID 数组快照生成时正在运行的事务快照主要用于区分不同事务的执行时序、判定事务是否完成提交是多版本可见性比对的核心依据。2. 判定整体流程第一步提取目标数据的完整元组版本序列批量获取每条元组的 xmin、xmax、cmin、cmax 字段及对应事务运行状态。第二步获取当前事务的快照信息依托快照核心字段界定创建/修改元组的事务与当前事务的时序关系。第三步结合数据库不同事务隔离级别对应的可见性规则完成元组对当前事务是否可见的最终判定。3. 核心判定思路设定待判定元组为 tuple当前事务快照为 snapshot。整体判定逻辑基于元组自身 {xmin, xmax} 事务区间与快照 {xmin, xip, xmax} 事务区间进行范围匹配枚举所有可能的交集场景结合事务隔离级别规则逐一判定各场景下元组的可见性状态。二、分场景可见性判定完整规则以下将所有可能的可见性判定场景逐一展开每个场景给出判定结论和逻辑依据。场景 1xmin 事务未提交且异常终止元组对应的创建事务未正常完成提交数据有效性不成立。结论不可见。场景 2xmin 事务未提交且由当前事务/父子事务生成此场景下结合元组生成命令与快照生成的时序关系、元组 xmax 标记状态分为 6 个子场景。子场景 2.1生成元组的命令晚于快照生成当前事务生成快照时该元组尚未创建。结论不可见。子场景 2.2生成命令早于快照xmax 仅锁定、无更新当前事务可正常读取自身写入的未更新数据。结论可见。子场景 2.3生成命令早于快照xmax 标记多事务更新multi三种情况分别判定情况结论删除/更新事务不是当前事务可见规避脏读更新事务为当前事务且更新命令在快照生成后可见更新事务为当前事务且更新命令在快照生成前不可见子场景 2.4生成命令早于快照xmax 被非当前事务/异常父子事务删除终止状态的父子事务统一归类为非当前事务。删除事务已异常终止元组数据未被有效删除。结论可见。子场景 2.5生成命令早于快照xmax 被当前事务删除删除命令晚于快照生成快照生成时刻该元组尚未执行删除操作数据有效。结论可见。子场景 2.6生成命令早于快照xmax 被当前事务删除删除命令早于快照生成快照生成时刻该元组已完成删除操作数据失效。结论不可见。场景 3xmin 事务未提交非当前事务/父子事务创建外部未提交事务的 ID 必然大于快照 xmin。结合快照活跃事务状态分为两个子场景子场景 3.1xmin 存在于快照 xip 活跃事务数组受事务隔离级别约束当前事务无法读取其他事务未提交数据。结论不可见。子场景 3.2xmin 大于快照 xmax当前事务生成快照时该元组的创建事务尚未启动元组不存在。结论不可见。场景 4xmin 事务已提交xmin 快照 xmin元组创建事务已完成提交数据初始化有效。根据 xmax 标记的更新/删除事务状态细分为 5 个子场景。子场景 4.1xmax 无效无更新、无删除元组无任何后续修改、删除操作为当前有效最新版本。结论可见。子场景 4.2xmax 仅锁定、未执行更新元组仅被锁定无实际数据变更数据保持有效。结论可见。子场景 4.3xmax 标记多事务更新五种情况分别判定情况结论更新事务为当前事务更新命令在快照后可见更新事务为当前事务更新命令在快照前不可见更新事务非当前事务xmax 在快照 xip 内未提交可见更新事务非当前事务xmax 事务已提交不可见更新事务非当前事务xmax 事务异常终止可见子场景 4.4xmax 标记更新事务尚未提交四种情况分别判定情况结论更新事务为当前事务更新命令在快照后可见更新事务为当前事务更新命令在快照前不可见更新事务非当前事务xmax 在快照 xip 内未提交可见更新事务非当前事务xmax 事务未提交可见子场景 4.5xmax 标记更新事务已提交该元组已被其他事务更新并固化为有效数据当前元组为过期版本。结论不可见。总结HaishanDB 的 MVCC 元组可见性判定可以归纳为一套规则1.先看 xmin创建元组的事务是否已提交未提交且非当前事务 → 不可见2.再看 xmax是否有后续事务删除/更新了该元组无操作或仅锁定 → 可见3.交叉比对时序xmax 的更新事务与当前快照的时序关系决定了在「更新已发生但未提交」这类临界场景下的最终可见性这套判定逻辑覆盖了事务隔离级别的核心语义理解它才能真正搞懂 HaishanDB 的并发行为。 #haishanDB #海山数据库 #He3DB

相关新闻

为什么选择Air框架?5大核心优势让AI开发Web应用更高效

为什么选择Air框架?5大核心优势让AI开发Web应用更高效

为什么选择Air框架?5大核心优势让AI开发Web应用更高效 【免费下载链接】air The first web framework designed for AI to write. Built on Python, FastAPI, Pydantic, and HTMX. By the authors of Two Scoops of Django. 项目地址: https://gitcode.com/gh_mir…

2026/7/22 19:23:28阅读更多 →
揭秘visualstudio-colors-solarized生成器:轻松创建个性化主题文件

揭秘visualstudio-colors-solarized生成器:轻松创建个性化主题文件

揭秘visualstudio-colors-solarized生成器:轻松创建个性化主题文件 【免费下载链接】visualstudio-colors-solarized Visual Studio color schemes based on https://github.com/altercation/solarized 项目地址: https://gitcode.com/gh_mirrors/vi/visualstudio…

2026/7/22 19:23:28阅读更多 →
Jellium Desktop用户切换动画:自定义切换效果全指南

Jellium Desktop用户切换动画:自定义切换效果全指南

Jellium Desktop用户切换动画:自定义切换效果全指南 【免费下载链接】jellium-desktop An unofficial desktop client for Jellyfin 项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop Jellium Desktop作为一款非官方的Jellyfin桌面客户端&…

2026/7/22 19:23:28阅读更多 →
MaSIF-search震撼发布:超快速蛋白质表面指纹扫描助力复合物结构预测

MaSIF-search震撼发布:超快速蛋白质表面指纹扫描助力复合物结构预测

MaSIF-search震撼发布:超快速蛋白质表面指纹扫描助力复合物结构预测 【免费下载链接】masif MaSIF- Molecular surface interaction fingerprints. Geometric deep learning to decipher patterns in molecular surfaces. 项目地址: https://gitcode.com/gh_mirro…

2026/7/22 20:21:38阅读更多 →
gh_mirrors/dotfiles62/dotfiles中的NixOS模块:安全与自动化的完美结合

gh_mirrors/dotfiles62/dotfiles中的NixOS模块:安全与自动化的完美结合

gh_mirrors/dotfiles62/dotfiles中的NixOS模块:安全与自动化的完美结合 【免费下载链接】dotfiles My NixOS dotfiles 项目地址: https://gitcode.com/gh_mirrors/dotfiles62/dotfiles NixOS以其声明式配置和可重现性著称,而gh_mirrors/dotfiles6…

2026/7/22 20:21:38阅读更多 →
SVM算法详解与乳腺癌检测实战:DataAnalysisInAction项目代码指南

SVM算法详解与乳腺癌检测实战:DataAnalysisInAction项目代码指南

SVM算法详解与乳腺癌检测实战:DataAnalysisInAction项目代码指南 【免费下载链接】DataAnalysisInAction (Finished) Geek Time Data Analysis Practical 45 Lecture - Detailed notes containing markdown images mind map code data can be read directly code te…

2026/7/22 20:21:38阅读更多 →
AI古钱币智能查重系统软件开发

AI古钱币智能查重系统软件开发

古钱币智能查重系统开发要点编辑:araolin(私域邦网络土土哥)核心技术模块 利用深度学习中的卷积神经网络(CNN)提取古钱币图像特征,结合相似度算法(如余弦相似度)实现查重功能。系统架…

2026/7/22 20:21:38阅读更多 →
kernel

kernel

启动流程 启动概况 汇编建环境 → start_kernel → rest_init 拆线程 → initcall 探驱动 → mount root → exec init。 详细流程 阶段一:汇编入口 head.S uboot跳进内核后执行的第一段内核代码。 内核真实入口primary_entry 头部_head最先调用primary_entry。 pri…

2026/7/22 20:21:38阅读更多 →
nmap-formatter实战案例:使用Graphviz(DOT)可视化网络拓扑结构

nmap-formatter实战案例:使用Graphviz(DOT)可视化网络拓扑结构

nmap-formatter实战案例:使用Graphviz(DOT)可视化网络拓扑结构 【免费下载链接】nmap-formatter A tool that allows you to convert NMAP results to html, csv, json, markdown, graphviz (dot), sqlite, excel and d2-lang. Simply put its nmap converter. 项…

2026/7/22 20:19:38阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →