像Git一样管理数据:深入解析数据库并发控制MVCC的实现

thbcm阅读(146)

如图所示,基础数据的版本为1,同时产生了两个事务:事务A与事务B。这两个事务都各自对数据进行了一些本地修改,这些修改只有事务自己可见,不影响真正的数据。之后事务A首先提交,生成数据版本2;基于数据版本2,又发起了事务C,事务C继续提交,生成了数据版本3;最后事务B提交,此时事务B的结果需要与事务C的结果合并,如果数据没有冲突,即事务B没有修改事务A与事务C修改过的变量,那么事务B可以提交,否则事务B提交失败。

事务在基于基础数据版本做本地修改时,为了不影响真正的数据,通常有两种做法。

1)将基础数据版本中的数据完全拷贝出来再修改;

2)每个事务中只记录更新操作,而不记录完整的数据,读取数据时再将更新操作应用到用基础版本的数据从而计算出结果。

MVCC的设计理念深受版本控制系统(如Git)的影响,其工作流程与版本控制系统的操作流程高度相似。在事务处理中,上述两种策略各有优势,完整拷贝策略简单直观,但可能占用较多存储空间;增量记录策略则更为高效,能有效减少存储开销。

MVCC的工作流程在很大程度上类似于版本控制系统(如Git)的操作流程,可以说,Git等版本控制系统的设计理念深受MVCC思想的影响。

Flink学习笔记:时间与Watermark

thbcm阅读(152)

首先来学习 Flink 的时间属性,作为流处理引擎,时间是实时数据处理的重要依赖,特别是在做时序分析或者特定时间段数据处理时,时间的概念更显得尤为重要。

Flask集成MCP的AI Agent

thbcm阅读(144)

本文使用的 LLM 是阿里的通义千问,需要自行申请 API Key。其他兼容 OpenAI SDK 的模型理论上也可使用。

AgileConfig-1.11.0 发布:增强的权限管理

thbcm阅读(140)

在开始介绍功能之前,我想聊一聊 AI 辅助编程这个话题。因为本次角色权限功能的开发,80%的编码任务是由 AI 完成的。我使用的模型是 OpenAI 的 codex。大家可能觉得 80% 这个数字非常亮眼,以为我因此少熬了几个夜,本来需要10天的工作,2天就完成了。但事实并非如此美好。AI 确实可以帮我生成基础的 CRUD 代码,但剩下的 20% 的代码却花了我 80% 的时间。

联系我们