摘要:
BUSTUB中SQL语句的Plan Execution 导读 Project3 中主要讲述的是SQL语言的Query Executor过程, 实际步骤中包含Query Optimization的过程, 下图是一个 Query 在数据库中 Execute 的整体流程. 在 关系数据库 Query Ex 阅读全文
摘要:
CMU_15445_P3_bustub_事务并发控制算法(MVCC) BUSTUB 数据库引擎采用多版本并发控制协议 multi-version concurrency control (MVOCC) 来实现事务的并发控制管理. 数据引擎的并发控制 从数据库引擎的角度应该如何看待以及处理事务呢? 事 阅读全文
摘要:
数据库在内存的存储形式 我们将从小到大介绍一下在 bustub 框架中数据库在内存中的存储形式. 在 bustub 中所有数据的存储单元是 Page, 而管理内存中的 Page 的是 BufferPoolManager, 这部分在前面的 Project1 已经介绍过了, 这部分是前面部分的延申, 具 阅读全文
摘要:
关系数据库 Query Execution 的流程 你是否也和我一样很好奇, 当我们在数据库的控制台输入一条 SQL 语句的时候, 后台发生了哪些事情呢, DBMS 就像 OS 一样, 只是 DBMS 是对数据操作的抽象, 不像操作系统, 是对整个计算机的抽象. DBMS Query Executi 阅读全文
摘要:
CMU_15445_P2_PageGuard 我将页面守护部分与多线程调用部分放在一起写在这篇博客中了, 页面守卫的本质是更加优雅方便的使用内存中的页(Pages). 我们知道Buffer_Pool_Manager实际上是管理页面, BPM 管理的是页面在内存中的组织形式与磁盘交互等, PageGu 阅读全文
摘要:
到Project2, 我们依然在处理数据库存储相关的部分, 从 Project1 中我们应该Get到两个概念: 数据库底层数据操作的基本单元是 Page. buffer_pool_manager 是管理以及组织数据单元Page的工具, 在Project2的第一部分, 我们还新增了页面守护(PageG 阅读全文
摘要:
移动构造与移动赋值 拷贝构造函数与移动赋值的重载 C++允许通过拷贝的方式来构造一个新的对象, 也允许通过移动赋值的方式构造一个新的对象. 在C++中新建一个类的时候, 默认的构造函数与移动赋值运算符都是基于浅拷贝执行的. 这个浅拷贝的构造函数与移动赋值运算符支持重载, 我们要说的就是重载这两个部分 阅读全文
摘要:
Exception specifications and noexcept in CPP Looking at a typical function declaration, it is not possible to determine whether a function might throw 阅读全文
摘要:
Shallow copying Because C++ does not know much about your class, the default copy constructor and default assignment operators it provides use a copyi 阅读全文
摘要:
上一篇中我们讲述了红黑树的插入, 以及删除时需要进行的各种调整的情况, 根据这些情况, 我们可以用代码实现红黑树的插入与删除操作. 节点的定义 一颗红黑树的定义如下: // 定义颜色枚举类型 enum Color { RED, BLACK }; template <class T> struct R 阅读全文