注意这个task虽然有给你单元测试文件,但是运行肯定是不通过,因为问题答案并不在源码中,我们只能在gradescope才能检测自己做的是否正确。 (我所做的project所属课程是fall2023版本,如果是spring2023版本,task3在本地测试和gradescope上的测试可能会有区别,是随机数的问题,相关老师有在Discord上说明) Task4 - SQL String...
线上评测:15-445/645 (Non-CMU) Spring 2023 迟策:BusTub 养成记:从课程项目到 SQL 数据库 Leaderboard Task 在Spring 2023 的基础任务中,我们已经为优化器编写了 Nested Loop Join As Hash Join 与Sort Limit As Top-N 两条规则。正如 Andy 所说,查询优化是数据库最难的部分。优化通常包含两个阶段: 基于...
F2023 #01 - Relational Model & Algebra 1:16:44 F2023 #02 - Modern SQL 1:15:51 F2023 #03 - Database Storage Part 1 1:19:11 F2023 #04 - Database Storage Part 2 1:17:25 F2023 #05 - Storage Models & Database Compression 1:23:25 F2023 #06 - Database Memory & Disk I⧸...
F2023 #02 - Modern SQL 1:15:51 F2023 #03 - Database Storage Part 1 1:19:11 F2023 #04 - Database Storage Part 2 1:17:25 F2023 #05 - Storage Models & Database Compression 1:23:25 F2023 #06 - Database Memory & Disk I⧸O Management 1:22:45 F2023 #07 - Hash Tables 1...
优化后的结果在 Leaderboard 上排名第三(2023-07-17)明确优化目标与分析 Workload 理解 benchmark 的工作内容与计分机制,明确优化重点与优先级。BPM-Bench 通过 8 个扫描与 8 个获取线程进行并发读取和更新 BufferPool 中的页面,其中扫描顺序读写,获取基于 zipfian 分布的随机读写。硬盘模拟读写...
判断directory是否已满,即Size()>=MaxSize(),若是directory已满,则直接返回false,directory未满,接着执行步骤5。 增加全局深度 分裂bucket,具体分裂流程参照后面详细步骤 回到步骤1重新尝试插入 调用bucket的Insert方法将键值插入即可 分裂bucket流程 将bucket_idx对应的局部深度加一 ...
获取表堆中的元组,发现当前读取时间戳等于3,小于元组的时间戳5,那么表堆中的元组对于TX6是不可见的,需要扫描版本链表找到合适的版本。 扫描版本链表,链表中的第二个版本时间戳为3,小于等于TX6的读取时间戳,则该版本可见 获取所有的undo log, 根据表堆中的元组的值,构造出最终的结果即可 ...
最后一篇15445项目要求基于前两个项目实现MVCC并发控制。2023年秋季是首次引入MVCC,测试用例和框架有所简化。实现时,发现新框架中的陷阱很多,网上难以找到参考。强烈建议先过一遍讲座PPT。项目实现的存储模型类似于delta表,基本要求是实现SNAPSHOT ISOLATION,bonus部分要求实现SERIALIZABLE。由于时间紧迫,忙着...
2023-Spring-Project1简介 2023-Spring的Project1的主要目的是实现一个基于LRU-K算法的磁盘缓冲区管理系统,磁盘缓冲区的主要任务是把实现磁盘与内存的页面交换。 其中 Task1是实现LRUKReplacer类与LRUKNode类,这两个类构成了LRU-K算法的主体和所需元素 Task2是实现BufferPoolManager类,基于LRUKReplacer类去实现缓存...
在CMU 15-445的Spring 2023 Project 1中,我专注于Buffer Pool Manager的并发磁盘 I/O 优化,初始QPS提升至50000+,显示出显著效果。主要优化集中在两个方面:1. 并行 I/O 操作的改进原实施中,我在读写BPM(Buffer Pool Manager)时添加了全局锁。通过细化锁粒度,我避免了FetchPage等方法在写入前...