先贴结果图和LeaderBoard:
CMU禁止公开源代码哦~, 有问题欢迎私聊, 评论或者加群: 484589324交流~
这是我受益最大的一个Project, 本来还以为按照惯例实现三个算子即可, 结果只有一道题, 要求实现全部算子hh, 但是做完之后可以理解数据库增删改查分组筛选等所有操作的底层思想, 受益确实非常的大
比较坑的一点是GradeScope的GTEST更新后代码风格不满足clang-tidy要求的代码风格, 导致提交全0, github上有相关的issue, 但是已经被close了而且问题并没有解决, 我又重新提了issue, 希望早日修复~ 现在用的解决方案是比较蠢的, 看图
这个方案是有效的, 我帮大家整理成傻瓜式操作, 在打包成zip的提交的时候, 执行:
zip project3-submission.zip src/include/buffer/lru_replacer.h src/buffer/lru_replacer.cpp src/include/buffer/buffer_pool_manager_instance.h src/buffer/buffer_pool_manager_instance.cpp src/include/storage/page/hash_table_directory_page.h src/storage/page/hash_table_directory_page.cpp src/include/storage/page/hash_table_bucket_page.h src/storage/page/hash_table_bucket_page.cpp src/include/container/hash/extendible_hash_table.h src/container/hash/extendible_hash_table.cpp src/include/execution/execution_engine.h src/include/execution/executors/seq_scan_executor.h src/include/execution/executors/insert_executor.h src/include/execution/executors/update_executor.h src/include/execution/executors/delete_executor.h src/include/execution/executors/nested_loop_join_executor.h src/include/execution/executors/hash_join_executor.h src/include/execution/executors/aggregation_executor.h src/include/execution/executors/limit_executor.h src/include/execution/executors/distinct_executor.h src/execution/seq_scan_executor.cpp src/execution/insert_executor.cpp src/execution/update_executor.cpp src/execution/delete_executor.cpp src/execution/nested_loop_join_executor.cpp src/execution/hash_join_executor.cpp src/execution/aggregation_executor.cpp src/execution/limit_executor.cpp src/execution/distinct_executor.cpp src/include/storage/page/tmp_tuple_page.h
下面进入正题, 这次的Project算子们相对比较独立, 我们按照顺序一个个算子的实现即可
我们要实现的是火山 (volcano) 模型的算子, 也就是一个tuple一个tuple的返回结果, 而不是一次返回全部结果
注意, 不应该以任何手段缓存全部结果再一个一个的返回, 而是每次都要获取一个新结果返回, 否则不过是在自欺欺人罢了, 这样的东西不是火山模型
每个算子都要实现Init()
和 Next()
方法
你不需要在意任何并发问题, 这次的Project是基于单线程的
顺序扫描一张表, 每次调用Next()返回一个tuple即可
也许你需要这些成员变量来遍历表
// 要扫描的表的info
TableInfo *tb_info_;// 用来遍历表
TableIterator tb_iter_;
然后在Init时, 你需要初始化这些成员
// catalog记录了一些表和索引的元信息, 要获取表信息就得靠catalog
tb_info_ = exec_ctx_->GetCatalog()->GetTable(plan_->GetTableOid());// 表的迭代器肯定由table_info维护, 顺藤摸瓜摸出来即可
tb_iter_ = tb_info_->table_
本文发布于:2024-02-04 07:24:01,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170701979553531.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |