CMU 15445-2022 P3 Query Optimize 本文记录Leaderboard选做的3条query计划优化。 只是个人的优化方案,不一定是最优解。如有错误欢迎指正。 整个优化大概写了六百多行,六七个优化规则外加一些辅助函数。建议在阅读本文前先熟悉官方给… 阅读全文 CMU 15445-2022 P2 B+Tree Concurrent Control ...
认真阅读实验指导说明的ROAD MAP 官方B+树可视化:https://15445.courses.cs.cmu.edu/fall2022/bpt-printer/ 简要了解设计模式里的组合模式设计(源代码框架就采用了这样的设计) 调试工具GDB,并发调试工具perf 推荐参考: p3:本项目最大的亮点,2022年在迟先生的加持下,实现了整个SQL层。这个project有非常有趣和烧脑...
@@ -328,7 +328,9 @@ set(P3_FILES "src/include/execution/executors/sort_executor.h" "src/include/execution/executors/topn_executor.h" "src/include/execution/executors/update_executor.h" "src/include/execution/executors/window_aggregate_executor.h" "src/execution/aggregation_executor.cpp" "src...
p1rk=103,p2rk=86,p3rk=15,p4rk=19 课程评价 Andy Pavlo老师课讲的还可以,就是课太多了,笔者后来选择看朋友笔记快速过一遍内容 除了p0,后面每个project都是细节很多,非常折磨 p0要补好多的cpp知识,笔记写了176行 p1难在看懂可拓展哈希表的原理和LRU-k的原理,笔记写了82行 p2难在细节,当初好像是细节查了两...
当谓词为空时,和p3一样,下文讲述谓词不为空的情况 构造:迭代器置空 Init:和SeqScan一样加锁,拿到std::vector Next:和SeqScan一样加锁解锁 Optimizer 当上层FilterPlanNode谓词是column value=constant value,且下层是SeqScanPlanNode,且有对应的index,两节点合并成有谓词的IndexScanPlanNode ...
https://15445.courses.cs.cmu.edu/fall2022/slides/06-bufferpool.pdf Extendible Hash Table 这应该算是P1中最难的部分了,建议coding之前,先用笔和纸模拟几次插入的过程,会对后续的实现很有帮助。某些值的插入过程会使得整个数据结构非常地tricky,需要额外注意。
学习了gdb调试,第一节课,在Ubuntu虚拟机中配置好了环境(vscode编写代码,cmake编译,gdb调试,git本地版本控制(因为fall2022早就更新完了,所以没有在github新建仓库,直接在本地建立了一个仓库。),cppreference和effective cpp语法参考),准备第二天开始#p0。 day 2 2024.2.26: 完成了#p0,打了100分,算是有资格继续...
查找key = 3 , 在root page P8 找找到第一个大于3的 key 5,然后在它的前一个节点 value0 的子树中查找,定位到P3,再到P2等等。 总结一下 find_leaf_page 的伪代码 find_leaf_page(key v) -> page p if(empty()) return nullptr page P = rootpage ...
t1到达P2后,发现P2的删除是安全的,释放P3的写锁,开始删除操作。 同时,t2获取P3写锁,到达P1后,发现P1不安全,不释放P3写锁。 t2删除5后,触发合并P1与P2的合并。此时t1删除可能还没有完成,所以合并必须加写锁等待t1完成删除操作。 borrow时,兄弟节点的锁要在操作完成后立刻释放并且unpin。 3. 给sibling加锁会死...
把p3对应的说明看了,但还是一头雾水,要看懂一个算子是怎么运行的,首先得看以下几个类的源码(按照顺序) 相关类 schema: 表示一行信息的结构,由若干个coloum组成 Tuple: 存储每一条记录,需要一个对应的sechma表示这个tuple的结构,内部成员有RID(每个tuple的标识符,包括存储在哪个页面以及在页面上对应的slot编号) ...