在Fall 2023中,我们实现的Extendible Hash Table不允许插入相同key值的k-v 为了解决hash冲突,Bucket Page存储k-v, 不只是存储value 关于成员函数:Task2需要实现的所有Hash Table Page结构,都禁止了构造,拷贝与移动相关成员函数。只暴露了Init接口用来对成员进行初始化,显然,我们无法正常地创建Hash Table Page的对象,...
Project #2: Extendible Hash Index 先记录完成的过程,然后再总结和思考 Due:四个星期左右(通过本地测试-4天左右+通过线上测试-一周左右,但由于中途有其他事情,时间跨度很大) 在开始完成该项目之前,首先确保两件事 确保Project#1的代码实现是正确的,最好多提交几次,因为测试用例可能会有不同 一定要先从原bustub...
在Project1 中实现的 BufferPoolManager,有一个缓冲区大小设置的参数。在 Project2 中的测试用例里,缓冲区大小限制为 3,所以如果进行 recursively merge 的时候不释放 PageGuard,将无法继续分配新的缓冲区。3 个缓冲区确实够用,因为在 header 中获取到 directory 的时候就已经可以释放锁了。
根节点为叶节点,最小的键值对数量是 2,所以删除之前需要键值对数量大于 2 才是安全的; 如果节点不是根节点,需要删除后仍处于半满状态才是安全的。 复制INDEX_TEMPLATE_ARGUMENTSboolBPLUSTREE_TYPE::IsPageSafe(BPlusTreePage *page, OperationType operation){autosize = page->GetSize();switch(operation) {case...
CMU 15445 2023fall #Project0 实现一个简单的k-v存储引擎 前言 实验要求网站 太吓人了,这甚至只是个课程入门实验,但是前两部分主要的内容差不多花了我一整天🥲🥲🥲(可能是我的C++基础太差了😥😥😥。 主要是考察一下对C++的熟练程度,比如智能指针、移动语义、并发控制,还有数据结构的基础。
解锁操作相对简单,主要步骤包括检查表中是否存在行锁、表锁状态、以及事务是否持有该表锁。若满足条件,则从锁请求队列中删除锁记录,释放锁,并唤醒阻塞在该锁上的其他事务。两阶段锁(2PL)是一种并发控制协议,确保事务在运行时访问数据库对象时生成的调度是非循环的。它能避免级联中止问题,但在某些...
并发控制在数据库管理中扮演关键角色,旨在确保事务并发执行的正确性和数据一致性。文章探讨了CMU15445-2022fall-Project 4中的并发控制技术,特别是基于两阶段提交(2PL)的并发控制方式,以及在实现中涉及的锁管理、事务隔离级别、并发查询执行和优化策略。在并发控制机制中,事务被视为数据库操作的基本单位...
CMU 15445 2023fall Project1 Buffer Pool Manager 前言 实验要求 通过本地测试大概花了三天,第一次提交线上测试只有45分😭😭😭。后来又陆陆续续修改,又花了两天时间终于过了。不过这个实现基本毫无性能可言,bpm的每个函数都是简单粗暴地直接上scope lock锁住整个函数作用域,所以QPS rank排在200靠后了,后面...
CMU 15 445 Fall 2023 project 0 cpp primer详细讲解 图宁完备· 4-16 6.7万34505:14:15 【2019年秋季版 CMU数据库15-445/645中文翻译版】 simviso官方· 2020-1-29 1.6万101:27 00_整体介绍 CMU 15445 数据库管理系统DBMS 郭郭wg· 2022-12-5 ...
在逻辑查询计划中,节点信息通过`AbstractExpression`(抽象表达式)来维护,它包含了子节点指针和节点值类型等信息。物理查询计划同样以树的形式呈现,节点为各种`Executor`(算子),它们负责执行具体的数据库操作。文中提到了`Factory method pattern`(工厂方法模式)在执行引擎中的应用,通过`ExcutionFactory...