【数据库系列】存储引擎(二)B树概述

简介: 注:在本文中“结点”和“节点”同义,在B树部分,“节点”和“页”同义。 背景知识 很多数据库都是基于B树 传统树的特点回顾 由数据结构与算法的知识可知,BST(二叉搜索树)的左子树的值<根值<右子树的值。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

注:在本文中“结点”和“节点”同义,在B树部分,“节点”和“页”同义。

背景知识

很多数据库都是基于B树

传统树的特点回顾

由数据结构与算法的知识可知,BST(二叉搜索树)的左子树的值<根值<右子树的值。

有可能出现极端情况:子节点全在右子树,BST退化为链表。如图所示:

image.png

最差情况的时间复杂度为O(N)

为了使树保持平衡,就引入了AVL(平衡二叉树)的概念。具体操作为:在添加或删除结点后进行旋转。如下图所示:

image.png

最差情况的时间复杂度为O(Log2N)

为什么在磁盘上使用BST(或其变体)来存储不是一个最佳选择?

维护成本增加:由于扇出(每个节点允许拥有的最大子节点数)较低,必须频繁执行平衡操作、重定位节点、更新指针。

基于维护成本的考虑以及优化

如果想用BST,也不是不可以。需要考虑以下问题并作出优化:

  • 新创建的节点不一定在其父节点附近写入,因此,节点子指针可能跨越多个磁盘页。

改进方案:修改树的布局;使用分页二叉树

  • 二分树每个节点允许拥有的最大子节点数(概念回顾:扇出)为2,假设有N个结点,则树的高度为Log2N,这也是定位某元素的时间复杂度,同时更是磁盘传输的次数。这样的复杂度在外存中不实用。

什么类型的树适合磁盘实现?

  • 高扇出

(本文中第三次重复这个概念了噢,还没记得的小伙伴翻翻前面)

使得数据局部性更好。

  • 低高度

减少遍历时的寻道次数。

从树的整体规律可知,总结点相同,扇出高,必然导致高度低;反之亦然。所以这两种条件理论上是可以同时满足的。

B树

简介

其基于平衡搜索树实现,但具有更高的扇出和更低的高度。

以下是B树的表示:
(与其他树不同,这里把它的结点抽象为矩形结构可能更容易让人理解它的特性,尤其是高扇出)

image.png

高扇出可以均摊保持树平衡时所做更改的开销;低高度可以减少寻道次数。

何时会触发分裂与合并操作?

当节点已满或几乎为空时。

B+树

数据库系统中真正被广泛用的是B+树。

B树和B+树的区别?

我的理解:

B树是一个大类,B+就再细分一点点。但是很多时候直接用B树指代B+树。
image.png

  • B树在任意一层上都能存储值。
  • 而B+树中规定,仅在叶结点存值,内部节点仅用于存分割键

    • 值仅在叶节点上,所以crud仅影响到叶结点(例外:分裂和合并期会传播到上层)

B+树的一些特性

  • 下图展示了一些不等式关系:

image.png

(文字描述会显得很啰嗦,细细看图应该就懂了)

  • B树的构造过程是自下而上的
  • B树的查找复杂度一般记为Log2N。(N为B树中项的总数)。

参考资料

《Database Internals:A Deep dive into How Distributed Data Systems Work》

相关文章
|
3月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
17天前
|
存储 关系型数据库 MySQL
数据库引擎之InnoDB存储引擎
【10月更文挑战第29天】InnoDB存储引擎以其强大的事务处理能力、高效的索引结构、灵活的锁机制和良好的性能优化特性,成为了MySQL中最受欢迎的存储引擎之一。在实际应用中,根据具体的业务需求和性能要求,合理地使用和优化InnoDB存储引擎,可以有效地提高数据库系统的性能和可靠性。
35 5
|
5月前
|
存储 关系型数据库 MySQL
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
|
6月前
|
存储 关系型数据库 分布式数据库
数据库索引回表困难,揭秘PolarDB存储引擎优化技术
PolarDB分布式版存储引擎采用CSM方案均衡资源开销与可用性。
数据库索引回表困难,揭秘PolarDB存储引擎优化技术
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
47 5
|
5月前
|
存储 安全 关系型数据库
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
82 1
|
5月前
|
存储 关系型数据库 MySQL
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
深入OceanBase内部机制:高性能分布式(实时HTAP)关系数据库概述
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
MySQL数据库——锁-概述以及全局锁(介绍、语法、特点)
87 0
下一篇
无影云桌面