快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3234 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

47|多路查找树:B树在数据库中的应用

你好,我是王健伟。
这节课我们来谈一谈多路查找树。传统的、用来搜索的二叉查找树有很多,比如平衡二叉树、红黑树等。
虽然通常情况下它们的查询性能很不错,但当数据量非常大的时候,它们却无能为力。因为当数据量非常大时,内存是很有限的,不可能把所有数据全部加载到内存中,大部分数据只能存放到磁盘上,只有需要的数据才会被加载到内存中。
通常来讲,计算机访问内存的速度要远远快于访问磁盘的速度,那么程序大部分的时间就会阻塞在磁盘 IO 上。所以尽量减少对磁盘的访问次数就是提高程序性能的关键。
那么,如何组织数据才能达到尽量减少对磁盘的访问次数的效果呢?一起来看一看 B 树。

B 树的基本概念、定义及基础实现代码

B 树也被称为多路平衡查找树,也称为 B- 树,这里的 - 并不是减号而是一个连字符。这里的多路可以理解为相对于二叉树而言,二叉树是二路查找树,因为最多只有两个子节点,所以查找时最多只有两条路。而 B 树有多条路(至少 3 条路),也就是说,B 树的节点可以有多个子节点。
B 树是一种组织和维护外存(磁盘上的文件)系统非常有效的数据结构,常用在数据库里,引入 B 树的主要目的就是减少磁盘的 I/O 操作。
因为平衡二叉树、红黑树等最小高度保持在 附近,这意味着大部分针对平衡二叉树、红黑树的操作(查找、插入、删除等)的时间复杂度为 O(),如果树中的节点数据很多都是保存在磁盘上的,那么这里就可以将 O() 理解成对磁盘的访问次数。显然,减少对磁盘的访问次数这件事就变得极其重要。对比来看,B 树的高度不是 ,而是一个可以控制的高度,一般这个高度会远小于 ,这意味着使用 B 树可以极大地减少对磁盘的访问次数。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

B树是一种多路平衡查找树,适用于大数据量的情况,尤其在数据库中有着广泛的应用。相比传统的二叉查找树,B树的节点可以有多个子节点,从而减少对磁盘的访问次数,提高程序性能。B树的性质包括节点个数、数据和叶子节点的规则,以及最小和最大高度的计算。通过控制节点的数据数量,B树的高度可以被有效地控制在一个较小的范围内,从而减少对磁盘的访问次数。因此,B树在数据库系统中的应用具有重要意义,能够有效提高数据的检索效率。 文章通过理论介绍、代码实现和可视化演示,全面而深入地介绍了B树的特点和操作,为读者提供了全面的学习和理解B树的机会。文章还详细介绍了B树的删除操作,包括删除数据位于终端节点和非终端节点的情况,以及兄弟节点数据个数超过和不超过2的情况下的处理方法。通过实例和代码演示,读者可以深入理解B树的删除操作。整体而言,本文内容丰富,涵盖了B树的基本概念、操作方法和实现代码,对于想要深入了解B树的读者来说,是一份很有价值的资料。 B树是一种组织和维护外存(磁盘上的文件)系统非常有效的数据结构,常用在数据库中,引入B树的主要目的是减少磁盘的I/O操作。B树是一种多叉树,其节点可以有许多孩子,从几个到数千个。 由此,我们引出了B树的性质,理解即可。文章还详细描述了B树的插入和删除操作并提供了相关的实现代码。B树的插入操作主要是要处理好节点的拆分问题,删除操作是插入操作的逆向操作,主要是要处理好节点的合并操作。 总之,本文通过深入介绍B树的特点、操作方法和实现代码,为读者提供了全面的学习和理解B树的机会。同时,文章还提供了B树与红黑树的异同分析和适用场合,以及绘制了一棵高度为3的5阶B树,为读者提供了更多的思考和交流空间。对于想要深入了解B树的读者来说,本文是一份很有价值的资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • Tiger
    老师您好,按照B树的定义,M阶的B树每个节点至多有M个子节点,每个节点至多有M-1个关键字,所以在节点的定义中,childs数组的大小应该是M,data数组的大小应该是M-1
    2023-10-10归属地:北京
    1
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部