Clone()返回的是一个unique_ptr,该智能指针是独占所有权的,所以要其他的智能指针能访问其持有的对象,需要使用std::shared_ptr(std::move(ptr))转换所有权,同时,原unique_ptr的引用计数变为0,不要对其进行操作 在TrieNode的构造函数时,调用children_(std::move(children))和children_(children)是不一样的语义。...
前者几乎囊括了 C++11 的所有,后者可以更详细地了解右值、万能转发等概念。 如果你想速成这个 lab,就省略资料推荐,找个网课看或许速度更快。 二、四个Task Task #1 - Copy-On-Write Trie 2023年的 #project0 实现与往年不同,实现的是一棵可持久化的字典树。具体什么是可持久化的字典树,不建议上网搜索,网上...
在不上班的这段日子,我回顾了离职前完成的15445项目,作为对数据库领域学习的总结,以防遗忘。本篇不涉及lab4,将重点整理lab0-lab3的关键内容。lab0 此实验聚焦于C++11新特性的学习,包括智能指针和所有权概念的掌握。实验通过构建COW前缀树,以加深对这些概念的理解。Task1 设计并实现COW前缀树,此...
B站有一位up主“Moody-老师”,对着CMU15445的ppt按照自己的理解复现了每一次的讲座,链接如下:https://space.bilibili.com/23722270 Project #1 - Buffer Pool 总结 该模块是基于LRU-K Replacement Policy实现了一个内存池。简单来讲LRU-K Replacement Policy就是类似操作系统的内存页面置换。 P1模块实现的内存池,和L...
Project0-Concurrent Trie大致上比较简单,重点在两个细节。在Trie::Insert() 中// std::unique_ptr<TrieNode>* ptr; // TrieNode 转成 TrieNodeWithValue; /*先申请一块内存装有 TrieNodeWithValue 对象,此时原对象会移动到新内存 然后调用 std::unique_ptr.reset() 将新的内存绑定到 ptr 上 */ ...
CMU 15445 vscode/clion clang12 cmake环境配置 C++ 调试窗口显示“ for string variable 【CMU15-445数据库】bustub Project #0:Trie 树实现(C++ Primer) 2022 CMU15-445学习群 —— 152391370 前言 按照课程要求,本文并不会给出实现代码,可以当做是我遇到问题的总结,一些理解 & 解释,希望能帮助到需要的读者...
CMU 15445 第五讲 Hash Table 归属模块: Access Methods,一种我们用来对数据库数据进行读或写的方式。 之前讨论的page table和page directory就是一个hash table,传入pageid获得 frame 或对应磁盘上的位置。 关心的事: 数据结构是什么样的,我们需要知道该如何对我们存放再内存或磁盘中page上的这些元素进行表示。
CMU 15445 vscode/clion clang12 cmake环境配置 C++ 调试窗口显示“ for string variable 【CMU15-445数据库】bustub Project #0:Trie 树实现(C++ Primer) 前言 按照课程要求,本文并不会给出实现代码,可以当做是我遇到问题的总结,一些理解 & 解释,希望能帮助到需要的读者。
2、每次BPMGuard析构都要遍历整个list,这很浪费时间。 因此,这次optimize做以下改进: 1、定义Pager类,用于存储fetch到的page;行为类似shared_ptr。 2、BPMGuard改为PagerMaker类。用于把fetch到的页面转化为Pager对象。且内置静态成员std::unordered_set<page_id_t> del_map 用于存储要被删除的page_id。
cmu15445 lab2 索引 省略艰难的DBUG过程,仅记录实践与理论的联系以及一些实现细节。 我做的这一季索引为B+树 一、数据库索引以及查找过程 索引作为字典的头几页,要理解起来非常简单。所以着重描述索引的具体实现。 首先,一个文件,在磁盘上肯定是由块组成的,分别对应第一块的块地址addr[block1] 第二块的块地址...