磁盘数据库引擎
文章平均质量分 67
实现一个简易的磁盘的数据库引擎
刘小黑~
这个作者很懒,什么都没留下…
展开
-
实现执行引擎和执行器
执行引擎 我们使用迭代模型来实现执行引擎 ExecutionEngine, 该类最重要的方法就是 Execute, 包含执行的计划,需要返回的结果,事务,和执行上下文信息。该方法首先通过工厂方法来生产具体的执行器,然后不断调用Next方法获取执行的结果。 graph LR A[执行计划] ---> B{执行引擎} ---> C[查询结果] subgraph 执行 D ---> |返回数据| B B ---> |查询数据| D[(数据库)] e原创 2021-05-16 22:57:10 · 267 阅读 · 0 评论 -
并发索引
Latch 模式 读模式:多个线程在同一时间能够读取相同的对象;如果一个线程获持有一个处于读模式的latch,另一个线程也能够获取该处于读模式的latch。 写模式:只有一个线程能够获取该对象;如果有其他线程持有处于任意模式下的latch,则其他线程是不能够获得write latch的。 相容性矩阵: Latch的实现 Reader-Writer Locks Blocking OS Mutex Test-and-Set Spinlock ...原创 2021-05-06 10:07:08 · 623 阅读 · 0 评论 -
B+树索引
B+树的删除 删除算法:Remove 1. 如果当前的树为空,则立即返回: IsEmpty 2. 否则,找到待删除的key所在的叶子页面: FindLeafPage 3. 从叶子页面中删除对应的记录: RemoveAndDeleteRecord 4. 如果叶子页面中记录条数发生下溢,则需要进行合并或重分配操作: CoalesceOrRedistribute 合并或重分配操作: CoalesceOrRedistribute 1. 如果当前结点是根页面,则需要调整根:AdjustRoot 1.1 如果是从原创 2021-05-04 20:04:16 · 144 阅读 · 0 评论 -
索引迭代器
索引迭代器 重载解引用运算符 *, 自增运算符 ++(分为前置和后置版本,这里我们实现前置自增运算符), 比较运算符 != 和 ==。为了支持 for-each 循环需要实现 begin() 和 end() 函数, 这里的提供一个和 begin() 类似的 Begin()函数,Begin( const KeyType key)接受一个关键码参数 key,从大于等于该关键码 key 的键值对处开始。 重载自增运算符 ++ 迭代器中包含当前页面正在访问的键值对的数组下标 current_index_, 每次进行原创 2021-04-22 13:50:34 · 123 阅读 · 0 评论