本文主要是介绍CMU-15445 2021 Project 3-Query Exection (请求执行),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CMU-15445 2021 Project 3-Query Exection (请求执行)
先贴结果图和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是基于单线程的
SEQUENTIAL SCAN
-
顺序扫描一张表, 每次调用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_
这篇关于CMU-15445 2021 Project 3-Query Exection (请求执行)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!