在这里我一直在考虑page的读写锁的作用,后来发现其实在这个project里面是不需要用到page的读写锁的。 flush + unpin,UnpinPage函数代码给的注释很少,我一开始被误导了,做到project 2后面才清楚unpin函数的作用,我最开始理解的是要强制将page的is dirty设为传入参数里面输入的is_dirty_,所以一直过不了测试。后来突然...
写在前面 Project 4需要我们为数据库实现MVOCC, 也就是基于时间戳的多版本并发控制(OCC + MVCC). 这是一种乐观的控制并发的手段,其原理类似CAS(Compare and Swap). 只不过在compare失败时,事务将被回滚。 Task 1…
任务四子任务 - 索引扫描、删除和更新:这部分是Project4中最难的部分,需要实现对索引结构的更新,还需考虑并发读写,几乎需要重写前面实现的Insert、Update、Delete算子。TA在discord上提供了关于并发控制的提示,强烈建议提前理解并设计好in_progress_在并发控制中的作用,避免多次返工修改。任务四子任务 -...
The fourth programming project is to implement a lock manager in your database system and then use it to supportconcurrent query execution. A lock manager is responsible for keeping track of the tuple-level locks issued to transactions and supporting shared & exclusive locks granted and released a...
CMU15445 2022fall project4 这个project整体难度稍微高于project3,主要难点在于task1。 Task1 这部分实现一个锁管理器处理事务对表和行的加锁解锁,是这个project中最复杂的部分。 问题: 关于为什么在各个隔离级别下,锁要设计成下面这样? REPEA
并发控制在数据库管理中扮演关键角色,旨在确保事务并发执行的正确性和数据一致性。文章探讨了CMU15445-2022fall-Project 4中的并发控制技术,特别是基于两阶段提交(2PL)的并发控制方式,以及在实现中涉及的锁管理、事务隔离级别、并发查询执行和优化策略。在并发控制机制中,事务被视为数据库操作的基本单位...
解锁操作相对简单,主要步骤包括检查表中是否存在行锁、表锁状态、以及事务是否持有该表锁。若满足条件,则从锁请求队列中删除锁记录,释放锁,并唤醒阻塞在该锁上的其他事务。两阶段锁(2PL)是一种并发控制协议,确保事务在运行时访问数据库对象时生成的调度是非循环的。它能避免级联中止问题,但在某些...
本文回顾了CMU15445课程的学习历程及项目进度。学习始于2023年7月9日,至2024年3月3日结束。作者以C++语言为主,学习过程较为吃力,特别是项目部分。课程涉及多个项目,从项目0到项目4,每一步都充满了挑战。项目0从2023年12月5日开始,至7日完成,此项目主要为补习C++基础,笔记长达176行。项目1从...
CMU 15445 2023fall #Project0 实现一个简单的k-v存储引擎 前言 实验要求网站 太吓人了,这甚至只是个课程入门实验,但是前两部分主要的内容差不多花了我一整天🥲🥲🥲(可能是我的C++基础太差了😥😥😥。 主要是考察一下对C++的熟练程度,比如智能指针、移动语义、并发控制,还有数据结构的基础。
面对课程的复杂性和深度,我感到有些措手不及,特别是对Lab1-Lab3的理解较为浅薄。在知乎上找到了胡神的文章,加入了他的15445交流群,一边参考大佬们的刷题文档,一边在群内交流学习,最终完成了Lab3。在第一学期末,我投入到研究生工作中,Lab4的进度因此被搁置。直到近期加入胡神15721群,为了...