CMU15445-project3-满分收获总结

记录一下 CMU 15445 项目 CMU 15445 数据库课程,采用c++语言实现数据库存储引擎~ 阅读详情


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hvKz8Ot-1658066439309)(C:\Users\54351\Desktop\Mynotes\CMU15445\CMU15445-lab3.assets\image-20220717205747950.png)]

排名拉了,没精力优化了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uj80SfBS-1658066439311)(C:\Users\54351\Desktop\Mynotes\CMU15445\CMU15445-lab3.assets\image-20220717205854345.png)]

太折磨了太痛苦了,看代码的时间比写代码的时间还多,很多天都处于完全没法动键盘的状态。

感觉这个lab更像一个读代码任务,文档只讲了需要实现的笼统需求,大部分跟下手代码相关的信息全在代码里面,需要从测试文件,Executor的构造函数等地方延申读各种头文件,理解了之后才能拿来使用且完成任务,问题是还不一定能用对。

TASK #0 - BEFOR START
!!!gradescope究极大BUG!!!

上传评分的时候,自己的代码没有任何格式错误,也会在格式检查时失败:

在这里插入图片描述

仔细一看会发现不是自己文件的问题,官方给出的解决办法如下:

把最新的 src/include/storage/page/tmp_tuple_page.h 一起打包进提交文件即可

开始之前
value,tuple,table,column,schema

value就是最小单位,值

tuple相当于一行,存多个值

table是一张表,提供了迭代器去访问,迭代器按行(tuple)遍历

column是列的名字(抬头)

schema则存了一串column,表示这张表有哪些列

AbstractExecutor

SQL拆分成一棵执行树之后,其中的节点的功能承担者,也是这次实验主要要完成的部分。

构造执行树时不会构造Executor,而是用后面的AbstractPlanNode来构造树,只有在执行这棵树的时候会初始化对应的Executor来执行。

// 每个执行器需要初始化的东西都不一样,一般是初始化指向表头的迭代器指针,或者自己定义的一些辅助循环的值
// 拿seq_scan来说,就需要在这里将迭代器指针指向表头。
void Init()
    
// 需要做到调用一次next就输出且只输出一组tuple的功能,输出是通过赋值*tuple参数,并return true
// 如果没有能输出的了,return false
void Next(Tuple *tuple, RID *rid)
    
// Schema相当于存储了表的表头名字,OutputSchema用来指出此节点需要输出哪些列(哪些表头需要考虑在内)
virtual const Schema *GetOutputSchema() = 0;
ExecutorContext

(AbstractExecutor构造函数的参数之一)

上下文信息,也就是说这次执行所用到的一些关键信息

// 这个Catalog至关重要,存储了一个数据库的全部表格信息的索引,提供了对表格的操作。
// 只有这个Catalog是我们可能会用到的,比如在seq_scan中需要利用它获取目标表
Catalog *catalog_;
AbstractPlanNode

(AbstractExecutor构造函数参数之二)

用于存储节点有关的信息,AbstractExecutor利用用里面的信息来完成任务。

// Schema是表每列的表头名字,OutputSchema用来指出此节点需要输出哪些列
Schema *OutputSchema()

// 获取孩子节点(我们实现executor的时候用不上,在执行树的时候才用得上)
// 在一些需要从子节点获取tuple的操作用得上,比如 join
AbstractPlanNode *GetChildAt(uint32_t child_idx)
std::vector<AbstractPlanNode *> &GetChildren()

例子:SeqScanPlanNode成员函数,AbstractExecutor可以在这里获取TableOid和Predicate

// 这个在ExecutionEngine里面用于判断当前节点的类型
PlanType GetType()

// Predicate:谓词,返回值全是真值的表达式,AbstractExpression就是一颗表达式树。
AbstractExpression *GetPredicate() 
    
// 结合Catlog可以得到当前Executor需要的表格内容
table_oid_t GetTableOid() 
AbstractExpression

表达式类,一颗表达式树中的节点,比如比较,聚合,或者常量,column元素。其中column表达式也作为了column类的成员之一。

不同的表达式实现的功能差距交大,这个是非常重要的一个类,每一个executor的代码都会用到。

  • ComparisonExpression:用于比较,实例化后做为predicate_谓词(下面例子中的predicate就是此类的实例化),或者having(在aggregation中会用到)。

返回的是一个装载Value类中的bool值,需要用value.GetAs<bool>()得到这个值,用于判断是否满足比较的条件(比较的细节:比如是>还是<,就不用我们关心了,交给Evaluate函数就行)

 Value value = plan_->GetPredicate()->Evaluate(tuple, schema)
  • ColumnValueExpression:列元素的表达值,有一个很大的作用,它的Evaluate函数能返回当前tuple中哪一个value是对应这个column的。
 Value value = column.GetExpr()->Evaluate(tuple, schema);

// 或者判断当前join是左连接还是右链接,并根据传入的左右俩tuple返回连接对应的值
 Value value = plan_->OutputSchema()->GetColumn(i).GetExpr()->EvaluateJoin(
     &left_tuple_, 
     plan_->GetLeftPlan()->OutputSchema(), 
     &right_tuple_,
     plan_->GetRightPlan()->OutputSchema());
  • ConstantValueExpression:常数表达式,返回值永远是一个常数,没用过。

  • AggregateValueExpression:在AggregateExecutor中用到,作用和ColumnValueExpression类似,用于找出属于当前column的这个值。(AggregateExecutor的测试函数在传入output

【CMU15-445数据库】bustub 项目介绍及环境配置 突然想起来之前一直想做的 CMU 15-445 课程的 2022 Fall 学期开课了,所以决定把 Pintos 项目先放一放,开个新坑跟着 CMU 同步把这个项目做了。 阅读详情

相关推荐

CMU 15445 P3 Query Execution

CMU 15445 2023spring Project3 Query Execution

laiyuhua120的博客 2764

CMU15445-project1-满分收获总结

0.0 关于线上测试的天坑 在gradescope上测试代码时,没有通过的案例如果显示的是超时,那不一定是因为死锁或者死循环!1.1线程安全 要求了线程安全但又没有说具体怎么做,以至于在最后才回来考虑上锁的问题。其实很简单,在头文件内声明一个锁。在实现的每个函数开头上锁,结尾释放就行。 注意事项: 1.每个return之前都要记得释放锁 2.关于死锁,如果都是开头上锁结尾解锁,根本不会有产生死锁的条件(请求并保持)。 3.如果在一个函数里调用了另一个使用lock的函数,百分百会卡死,因为这个函数的lock还

Kprogram的博客 2361

CMU15445-project2-满分收获总结

用来存储键值对的page,利用readable_[]判断当前index是否存有数据,occupied判断当前index是否装过数据(按道理这玩意儿没啥用)。而数组就用来存储键值对。 :其实可以看作是HashTable的信息存储地,因为需要并发控制以及保存关键信息,故直接利用一个page来存储这些信息,每次使用的时候提取该page出来就行。这里没有同以往的 TASK文档一样,明确告知我需要实现的文件在哪里,需要从最后面的测试需要提交的文件列表里面去找,但文档出现了...............

Kprogram的博客 1638

CMU15-445 Project1总结2021年

本篇博客是对CMU15-445课程project1的总结,代码的实现借鉴了一些其他前辈的代码,因为自己的C++实在是小白水平,对数据库的实现理解的也不够透彻,就抄了大家的代码,然后理解这些代码之后,再作此篇总结,加深对知识点的理解。 这里附上借鉴的博客:[已满分]CMU数据库(15-445)实验1-BufferPoolManager。 本次实验的原文要求在这里PROJECT #1 - BUFFER POOL 关于本门课程的知识点总结我推荐[CMU-15445] 总述 Project1要求我们实现一个数据库的

沈子鸣 4776

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 482

基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程

地下车库 Cartongrapher 3D建图

yhy_yhy13053117的博客 3936

一文搞懂 RC Correlation Scale Factor 的生成与应用

pre-route 用的是统计估算模型,post-route 用的是详细布线提取,signoff 用的是第三方 QRC 或 StarRC——三个工具,三套参数体系,结果自然天差地别。不同 RC corner(rc_worst/rc_best/rc_typical)对应不同的工艺角和温度环境,每个 corner 的 R/C 偏差比例不同,必须分别生成和应用各自的 scale factor。别被名字骗了,这个工具专门干一件事——统计拟合两组 SPEF 之间的偏差,自动推荐最优 scaling factor。

weixin_47770727的博客 549

别再傻傻分不清!Synopsys DC综合中link/target/symbol/synthetic四大库的保姆级配置指南

本文详细解析了Synopsys DC综合中link_library、target_library、symbol_library和synthetic_library四大库的配置方法,帮助工程师避免常见错误。通过实战示例和调试技巧,指导如何正确设置工艺库与IP库,提升数字芯片设计效率。

weixin_42562079的博客 423

《C/C++等级考试(1~8级)历届真题解析》专栏总目录

中国电子学会《全国青少年软件编程等级考试》C/C++编程(1~8级)历届真题解析。订阅后可阅读专栏内所有真题解析,真题持续更新中!

人生就是一个不断学习的过程 2万+

【用ArcGIS制作一张好看的中国月度气温图

要最后选中那个事先调整好的那个数据框,这样其他两个数据框才能和其大小一致。

J_Giser的博客 1017

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

CoreLink NI-700的ASNI(AXI系统网络接口)完成者单元负责接收并处理来自AXI请求者设备的请求。这些单元将事务打包成根据NI-700通用传输(GT)协议的Flits,并将GT响应Flits解包成AXI响应。AXI与GT协议之间的请求、数据和响应事务的转换:确保AXI事务可以被NI-700网络正确处理,并将GT协议的响应正确转换回AXI响应。入站事务的突发拆分。

CodingCos的博客 1322

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: CMU15445-project2-满分收获总结
下一篇: 超详细的cmake入门教程【转载】
Korpse
博客等级 码龄9年 115粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值