b-tree和b+tree的实现原理

一:一棵m阶的B-Tree有如下特性: 
1. 每个节点最多有m个孩子。 
2. 除了根节点和叶子节点外,其它每个节点至少有Ceil(m/2)个孩子。 
3. 若根节点不是叶子节点,则至少有2个孩子 
4. 所有叶子节点都在同一层,且不包含其它关键字信息 
5. 每个非终端节点包含n个关键字信息(P0,P1,…Pn, k1,…kn) 
6. 关键字的个数n满足:ceil(m/2)-1 <= n <= m-1 
7. ki(i=1,…n)为关键字,且关键字升序排序。 
8. Pi(i=1,…n)为指向子树根节点的指针。P(i-1)指向的子树的所有节点关键字均小于ki,但都大于k(i-1)

二:每次从磁盘中取4k数据,每个key+value占用8个字节,那么每个节点(每次io保证可以读取一个完整节点,不然要io两次,所以一个节点就是一个磁盘块)可以存储512个关键字,可以往下分513路。

三:因为数据结构的原理,多路平衡查找树的每个节点的关键字个数n小于等于阶数m减一。当一个节点n等于m时会将次节点分页,使n小于等于m-1.

 

四:当删除某个关键字时,如果让多路平衡查找树不平衡了,那么会将把上一个节点的一个关键字下移,让b-tree平衡。不止是平衡而是要绝对平衡,因为b-tree是一个绝对平衡树。

 

 

五:绝对平衡树

任何时刻任意节点,左节点和右节点的层数都是一样的

 六:平衡的定义

七:为啥用b+树

 

 

 b+树的扫表能力更强,因为只需要扫叶子节点

b+树的磁盘读写能力更强,因为在非叶子节点上不会浪费磁盘空间。

posted @   人在代码在  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示