cmu15445课程

文章探讨了事务并发控制中的冲突类型,如RW、WR和WW冲突,并介绍了通过事务调整和依赖图判断串行等价性。然而,依赖图无法解决所有情况,二阶段锁作为一种解决方案,确保事务的等效串行化,防止并发冲突。在加锁和解锁的两个阶段中,避免环形依赖以实现无冲突执行。

事务的并发控制

如何判断是否等效

冲突操作

  1. 不同的操作事务
  2. 不同的任务操作的同样的数据,并且至少一个是写

冲突类型

  1. RW冲突:事务第一次读到第二次读的数据不同(其实就是不可重复读)
    在这里插入图片描述
  2. WR冲突:T1先写,但是未提交T2读取,导致读取到了脏数据
    在这里插入图片描述
  3. WW冲突:丢失修改,两个写同步进行,导致某些写被覆盖而丢失
    在这里插入图片描述

事务冲突的执行调整
对于事务之间并行执行的冲突,正常来讲就是通过一些调整,使其转换成为按照时间顺序的事务串行,达到并行的目的。但是有些事务调整之后也是冲突的,所以说并行也只是能够并行的执行不冲突的语句,对于冲突的语句还是需要等待提交来执行。

依赖图表示事务冲突
上文中的调整方法开销太大,并且算法不直观。可以通过图表示,箭头代表冲突依赖,起点需要在终点之前执行,判断方式:

  1. 图中有环就不能够串行等价
  2. 如果是可以拓扑解开,就代表可以按照这种拓扑顺序并发执行,等效于串行。
    在这里插入图片描述> 依赖图的局限性在于某些特殊的情况是可以等效串行化,但是依赖图是有环冲突的。例如下图中实际上就是T3最后W(A),T1,T2随意执行都可以,所以也是可以等效串行化的
    在这里插入图片描述
    分析
    串行化 < 等效串行化 < 观察等效串行化
    在这里插入图片描述
    总结
    在这里插入图片描述

两阶段锁

上一节讲到了串行化等效,但是这种判断需要事务中语句的执行时间来判断,也就是说其实事务是已经执行完提交了才判断的,那就算是错误的也提交了,只能回滚之类的处理

解决方案:加锁
在这里插入图片描述
锁的类型

lock是用来的数据,数据库抽象程度上锁,而latches是从物理层面,B+树节点上锁。
lock中的锁可以分成S(共享),X(排他)锁
在这里插入图片描述

问题

就算是遵循操作数据需要加锁,但是加了锁也并不是可串行化的。即图中还是冲突的,除非一直锁A,但是这样就没有意义了。
在这里插入图片描述

二阶段锁方案

分成加锁阶段和解锁阶段,也就是两个阶段都只能纯粹的其中一种。
在这里插入图片描述

例如下图中需要等到加锁阶段结束之后才能够解锁,这样就能保证冲突的等效串行化。依赖图中也绝对没有环。
在这里插入图片描述

### CMU 15445 课程环境配置指南 对于希望参与卡内基梅隆大学 (CMU) 的数据库系统实现入门课(即 CMU 15445)的学生来说,正确设置开发环境至关重要。虽然官方文档提供了详细的指导说明[^1],这里提供一个简化版本来帮助学生快速上手。 #### 安装依赖项 为了确保项目顺利运行,在开始之前需安装必要的软件包: ```bash sudo apt-y \ git cmake g++ libtbb-dev python3-pip valgrind clang-format-7 ``` 此命令会更新本地包列表并安装一系列必需工具,包括 Git 版本控制系统、CMake 构建管理器以及 C++ 编译器等[^2]。 #### 获取源码仓库 通过克隆 GitHub 上托管的教学材料库获取最新版教材和其他资源: ```bash git clone https://github.com/CMU-db/15445-fall2021-starter-code.git db_project cd db_project ``` 这一步骤创建了一个名为 `db_project` 的新目录用于存放整个项目的文件结构。 #### 配置构建脚本 进入刚刚建立的工作区之后,按照惯例先初始化子模块再执行常规编译流程: ```bash git submodule init && git submodule update --recursive mkdir build && cd build cmake .. make -j$(nproc) ``` 上述指令序列完成了从准备到最终生成可执行程序的过程;其中 `-j$(nproc)` 参数允许利用多核处理器加速编译速度。 #### 测试安装成果 最后验证一切正常运作的方法就是尝试启动测试套件看看能否成功完成一轮完整的迭代: ```bash ./testrunner.sh ``` 如果所有单元测试均能无误通过,则表明当前机器已经具备开展后续学习活动所需的一切条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值