![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CMU 15-445
文章平均质量分 95
犬兄的海角
这个作者很懒,什么都没留下…
展开
-
CMU15-445 Project.4总结
我们利用 txn_set_ 表示所有已获得运行许可的线程节点集合,利用 safe_set_ 表示已经遍历完所有邻居节点的节点,利用 active_set_ 表示尚有邻居节点未遍历完的节点。若我们在遍历邻居节点时遍历到了 active_set_ 中的节点说明图中存在环,若为遍历到则递归调用函数并判断其邻居节点出发是否会出现环。我们按照 tid 从大到小的顺序来遍历每一个节点,这样就就能够确保当我们需要删除造成死锁的节点时,我们优先删除的是 tid 最大的事务,也就是最年轻的事务。通知正在阻塞的相关事务。原创 2023-03-09 23:43:23 · 751 阅读 · 1 评论 -
CMU15-445 Project.3总结
同时为了避免左子算子的结果可能与右子算子中的多个 tuple 相匹配的情况,我们在算子中暂存左子算子的结果并优先尝试进行匹配,此外我们还记录在右子算子的列表中上一次匹配的结果。若删除成功,我们需要遍历当前表中的所有索引,并在索引中删除对应的项。值得注意的是,在 Bustub 中,对于实现 Optimizer ,我们在遍历 Planner 生成的初步查询计划时,利用预先设定的规则实现对 PlanNode 的优化,如将 Limit + Sort 合并为 TopN ,这需要我们提前设定好规则;原创 2023-03-08 20:05:33 · 1826 阅读 · 1 评论 -
CMU15-445 Project.2总结
对于B+树而言,我们用作为其根节点的父节点;叶子节点的 MinSize 为,内部节点的 MinSize 为;对于B+树中的叶子节点和内部节点而言,必须满足 MinSize 的要求,但对于B+树的根节点而言可以不用满足以上要求。当根节点的子节点只有一个时,我们可以直接将子节点作为新的根节点。对于B+树种的内部节点而言,由于 K 个关键值将整个节点分成了 K+1 个区间,故其有 K+1 个 value ,而叶子节点中 key 与 value 的个数则相同。原创 2023-03-06 22:20:48 · 762 阅读 · 0 评论 -
CMU15-445 Project.1总结
考虑到多线程的使用,而且会有多个直线指向同一个bucket,我们使用make_shared指针;使用resize函数会同时增加容器的size和capacity,而使用reserve只增加capacity,需要继续添加元素以免出现内存泄漏;在判断已满的bucket中键值对应如何分配时,显然此时他们的末local depth都是相等的,我们可以直接根据末local depth+1位进行判断即可;考虑到多线程进行操作,我们使用智能锁进行处理。原创 2023-03-02 19:31:48 · 800 阅读 · 0 评论 -
CMU15-445 Project.0总结
移动构造函数的第一个参数一定是一个右值引用(&&),同时需要确保移动之后源对象是销毁无害的,这也是右值引用的一个特点。使用移动构造函数代替拷贝构造函数不需要分配内存,更能节省空间。C++11提供了两种智能指针shared_ptr和unique_ptr,其区别体现在shared_ptr允许多指针指向同一对象,unique_ptr则独占所指向的对象。原创 2023-02-26 01:28:43 · 773 阅读 · 0 评论