摘要:
关系型数据库常见并发冲突详解与总结 为什么会有冲突 为什么保证数据库的 AICD 特性, 通常数据库调度的时候希望事务的执行是一个串行调度, 但是实际中, 由于事务是并发执行的, 因此会出现各种冲突, 而事务的并发控制协议, 并发控制算法的目的则是处理并发事务中的冲突以实现并发冲突的可串行化. 并发 阅读全文
摘要:
Sort + Limit Executors + Window Functions + Top-N Optimization 这里的实现比较简单, 就不赘述了, 后续补充一下这部分的优先队列的使用, 以及选择的方式 Window Functions 窗口函数的实现才是这部分的重点 窗口函数介绍 My 阅读全文
摘要:
HashJoin Executor & Optimization HashJoin Executor 如果查询包含与两列之间单个或者多个等值条件的连接的连接, 则 DBMS 可以使用 HashJoinPlanNode (各个等式之间使用 AND 连接条件), 例如: 考虑以下示例查询: SELECT 阅读全文
摘要:
Aggregation & Join Executors 实现 AggregationExecutor 的实现 AggregationExecutor 的实现需要关注 AggregationExecutor.h 和 AggregationPlanNode, 以理解其支持的 SQL 语句及其执行方式. 阅读全文
摘要:
JVM 内存布局与 JNA 调用本地方法原理详解 JVM 内存布局详解 JVM 内存布局随着 JDK 版本不同而不同, 但是大致布局以及运行原理相同, 我们选择 JDK1.8 的内存布局解释. 下图是JDK 1.8 的内存布局的示意图: 程序计数器(PC) 这个是当前线程正在执行的字节码行号指示器, 阅读全文
摘要:
CPP虚函数详解与实例 在 CMU_15445 的Project3 中大量使用了虚函数,抽象类的方法 主要在 Expression(表达式) 以及 Executor(Plan_Node的执行) 中, 在完成 Part1 的时候仅关注了功能的实现, 还没有完全搞清楚为什么要使用虚函数以及抽象类, 以及 阅读全文
摘要:
CMU_15445_P3_Part1 这部分主要是实现一些基本的 Plan_Node 的 Executor, 我们可以首先通过一个列子来看, 就是 Projection Plan_Node 的例子. 我们使用一个简单的 EXPLAIN 的例子引入 PlanNode 的执行流程: -- 在控制台使用 阅读全文
摘要:
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 已经介绍过了, 这部分是前面部分的延申, 具 阅读全文