2022年3月12日记:Linux服务器开发,磁盘存储链式的B树与B+树

──────────────────────────────────────────────────────────────┌————————————┐
│▉▉♥♥♥♥♥♥♥♥ 99% │ ♥❤ 鱼沈雁杳天涯路,始信人间别离苦。
└————————————┘
对你的感情正在充电中,请稍侯…
──────────────────────────────────────────────────────────────

推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

──────────────────────────────────────────────────────────────

一、前言

首先,笔者对红黑树只知道个皮毛,这已经是漏了一节课,偷懒了,所以需要加倍的努力才能收获到本该有的知识。
B树和B+树适合用在内存中。大概了解了缺页的概念
通过汇编,cpu才有能力访问内存,但是通过什么方法才能访问磁盘呢?磁盘慢是因为寻址的过程比较慢,换句话说想要快起来加快就要增加寻址速度,21世纪都没有解决这个难题看样子寻址确实很难解决,这是计算机组成原理里讲的,虽然我没有听过但是感觉今天得到了这门课的精华**。访问磁盘慢是因为寻址慢造成的。**
1024个节点放在磁盘的红黑树中,最多需要寻址10次。很明显,降低层高可以减少寻址次数,多叉树这个概念在mysql的底层实现逻辑里提到高,一定不陌生吧。

B树是多叉树的一种更为自由的结构,自由的方面为并没有定义叉。没有定义就是没有定义,1024个叉也是允许,要不然设计者的位置岂不是很尴尬。

二、先有树还是先有的定义?

这无疑是先有的鸡先有的蛋,肯定先有的鸡,生活所迫嘛。
我第一反应就是先有的树,后有的定义。道理很简单,肯定是先发现有很多花草树木,然后人们才去定义这个花,这个是草,这个不难理解。版本多次迭代后,才有了这个约束定义。
先了解树,在慢慢的理解约束定义。如果三分钟给大家讲明白,这一定是开了个天大的国际玩笑。

  • 最大节点数+1=M阶,M就是一个节点有最大的子树。
  • 其余的情况,1分裂2个节点

三、B树的添加

一个节点分裂成三个节点,最后化成两个节点。换菊花说,先分裂再添加。自己认为是直接添加,也许这种方式太粗鲁,具体是如何分裂如何添加,这也许就是人生的真谛?
添加key分两种情况:

  • 只有根节点,1分分裂三个节点。
  • 建议M是偶数,key=M-1,便于分裂。

四、总结感悟

最大限度利用自己写的代码,看起来不起眼的一句话但是我真的放在心上了吗?
该如何做到呢?B树目测添加只需要两步,递归找到位置,添加F结束。
插入数据是插在叶子节点上,看样子很合理啊。
代码就先不晒了,感觉没有学明白。

四、背诵

一颗M阶B树T,满足一下条件。
1、每个节点至多拥有M棵子树
2、根节点至少拥有两个子树
3、除了子根结点以外,其余每个分支结点至少拥有M/2棵子树
4、所有的叶结点都在同一层
5、有K棵子树的分支结点则存在K-1个关键字,关键字按照递增顺序进行排序
6、关键字数两满足ceil(M/2)-1<=M-1

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屯门山鸡叫我小鸡

加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值