CMU-15445 LAB2:实现一个支持并发操作的B+树

概述

经过几天鏖战终于完成了lab2,本lab实现一个支持并发操作的B+树。简直B格满满。

B+树

为什么需要B+树

B+树本质上是一个索引数据结构。比如我们要用某个给定的ID去检索某个student记录,如果没有索引的话,我们可能从第一条记录开始遍历每一个student记录,直到找到某个ID和我们给定的ID一致的记录。可想而知,这是非常耗时的。
如果我们已经维护了一个以ID为KEY的索引结构,我们可以向索引查询这个ID对应的记录所在的位置,然后直接从这个位置读取这个记录。从索引查询某个ID对应的位置,这个操作需要高效,B+树能保证以O(log n)的时间复杂度完成。

B+树的性质

B+树由叶子节点和内部节点组成,和其它树结构差不多,但是对(KEY, VALUE)的个数和排列顺序有要求。

叶子节点:

格式如下:

 *  ---------------------------------------------------------------------------
 * | HEADER | KEY(1) + RID(1) | KEY(2) + RID(2) | ... | KEY(n) + RID(n) 
 *  ---------------------------------------------------------------------------

假设叶子结点最多能容纳个n个(KEY, RID)对,那么该叶子节点任何时候都不能少于n/2向上取整个(KEY, RID)对。假设(KEY, RID)对个数为x,那么x必须满足:

ceil(n/2) <= x <= n

ceil表示向上取整,博客园不支持LaTeX o(╯□╰)o。
KEY是search key,RID是该KEY对应的记录的位置。(KEY, RID)对按照KEY的増序进行排列。
HEADER的结构如下:

 * ----------------------------------------------------------------------------------------
 * | PageType (4) | LSN (4) | CurrentSize (4) | MaxSize (4) | ParentPageId (4) | PageId(4) |
 * ---------------------------------------------------------------------------------------

ParentPageId指向父节点。

内部节点

 *  ----------------------------------------------------------------------------
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值