Concurrent Query Execution 加锁tip: 事务是数据库执行的最小单元,并发控制为事务并发提供可串行化的能力和隔离性。 可串行化:多个事务并发执行时,能找到一个顺序,使多个事务好像在串行执行。 隔离性:不同事务对外界的暴露程度。 在lab4中实现一个基于 2PL 的并发控制方式,自动为并发事务执行加锁解锁,提供可串行...
其实我个人感觉这里的实现可能有些问题,至少写出来挺丑陋的,大家可以实当参考。 4.3 Concurrent Query Execution Task 3是要将实现的并发控制应用在实际的Query查询执行中,只涉及SeqScan、Insert和Delete三种算子。 首先是SeqScan算子,需要根据不同的隔离级别不同考虑: 读未提交,不需要加锁; 读提交,先加意向表锁IS,...
经过前面两个实验的铺垫,终于到了给数据库系统添加执行查询计划功能的时候了。给定一条 SQL 语句,我们可以将其中的操作符组织为一棵树,树中的每一个父节点都能从子节点获取 tuple 并处理成操作符想要的样子,下图的根节点ππ会输出最终的查询结果。 对于这样一棵树,我们获取查询结果的方式有许多种,包括:迭代模型...
一、实验内容 P4要求完成事务间的并发控制,包括支持三种隔离事务的加解锁,以及一个死锁检测线程;适配之前实现的执行器,并且修改之前实现的算子实现对并发的支持。 Task #1 - Lock Manager Task #2 - Deadlock Detection Task #3 - Concurrent Query Execution 二、实验FAQ 1.加锁主流程 对于LockTable,按照以下伪...
查询引擎:Query Execution 并发控制:Concurrency Control 五个实验组成了一个用于教学的简单的关系型数据库 —— BusTub。实验方式基本都是实现一些规定的接口,跑通写好的测试用例。需要说明的是,代码中给的测试用例十分简单,基本只测试了一些主干路径,因此跑过了测试用例并不一定说明你代码写的没问题,这就要求在实现...
query plan(执行计划) operator execution(执行器) access method(访问方法) buffer pool(缓冲池) disk manager(磁盘管理) 以及其他的的一些组成部分,例如并发控制、分布式等。 这个课程系列将会自底向上逐一介绍。 首先来看看存储管理,通常来说,不同的存储介质,在存储容量和速度上存在较大的差异,容量越大的介质速度...
查询引擎:Query Execution 并发控制:Concurrency Control 五个实验组成了一个用于教学的简单的关系型数据库 —— BusTub。实验方式基本都是实现一些规定的接口,跑通写好的测试用例。需要说明的是,代码中给的测试用例十分简单,基本只测试了一些主干路径,因此跑过了测试用例并不一定说明你代码写的没问题,这就要求在实现...
query plan(执行计划) operator execution(执行器) access method(访问方法) buffer pool(缓冲池) disk manager(磁盘管理) 以及其他的的一些组成部分,例如并发控制、分布式等。这个课程系列将会自底向上逐一介绍。 首先来看看存储管理,通常来说,不同的存储介质,在存储容量和速度上存在较大的差异,容量越大的介质速度...
query plan(执行计划) operator execution(执行器) access method(访问方法) buffer pool(缓冲池) disk manager(磁盘管理) 以及其他的的一些组成部分,例如并发控制、分布式等。 这个课程系列将会自底向上逐一介绍。 首先来看看存储管理,通常来说,不同的存储介质,在存储容量和速度上存在较大的差异,容量越大的介质速度...
我们也可以借鉴学习 2022 年的是怎么写的。 Task #3 - Sort + Limit Executors and Top-N Optimization 这里的 sort 和 limit 应该是很简单了 而topn 需要对 C++ 的 prority_queue 有一定了解,它是一个大根堆,我们需要这样初始化它: std::priority_queue<Tuple,std::vector<Tuple>,CompareRule>topn_res(...