数据库必知词汇:平衡多路查找树B-Tree

简介: B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。B-Tree中的B代表平衡(balance),而不是二叉(binary),因为B-Tree树是从最早的平衡二叉树演化而来的。这个数据结构一般用于数据库的索引,综合效率较高。

B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。B-Tree中的B代表平衡(balance),而不是二叉(binary),因为B-Tree树是从最早的平衡二叉树演化而来的。这个数据结构一般用于数据库的索引,综合效率较高。

B-tree中,每个结点包含:

  1. 本结点所含关键字的个数;
  2. 指向父结点的指针;
  3. 关键字;
  4. 指向子结点的指针。

对于一棵m阶B-tree,每个结点至多可以拥有m个子结点。各结点的关键字和可以拥有的子结点数都有限制,规定m阶B-tree中,根结点至少有2个子结点,除非根结点为叶子节点,相应的,根结点中关键字的个数为1~m-1;非根结点至少有[m/2]([],向上取整)个子结点,相应的,关键字个数为[m/2]-1~m-1。
一棵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)
    B-tree有以下特性:
  9. 关键字集合分布在整棵树中;
  10. 任何一个关键字出现且只出现在一个结点中;
  11. 搜索有可能在非叶子结点结束;
  12. 其搜索性能等价于在关键字全集内做一次二分查找;
  13. 自动层次控制。

由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其最低搜索性能为:O(log2N)(N为关键字总数)。

所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并。

鉴于B-tree具有良好的定位特性,其常被用于对检索时间要求苛刻的场合,例如:

  1. B-tree索引是数据库中存取和查找文件(称为记录或键值)的一种方法。
  2. 硬盘中的结点也是B-tree结构的。与内存相比,硬盘必须花成倍的时间来存取一个数据元素,这是因为硬盘的机械部件读写数据的速度远远赶不上纯电子媒体的内存。与一个结点两个分支的二元树相比,B-tree利用多个分支(称为子树)的结点,减少获取记录时所经历的结点数,从而达到节省存取时间的目的。

资料来源:
B-Tree详解 https://www.cnblogs.com/qixinbo/p/11048269.html
深入理解索引的底层实现原理之BTree索引和B+Tree索引解析及区别 https://baijiahao.baidu.com/s?id=1635778645917488178&wfr=spider&for=pc
MySQL索引原理及BTree(B-/+Tree)结构详解 https://blog.csdn.net/u013967628/article/details/84305511

相关文章
|
9月前
|
存储 NoSQL 数据库
数据库从0到0.1 (一): LSM-Tree VS B-Tree
数据库从0到0.1 (一): LSM-Tree VS B-Tree
110 0
|
关系型数据库 数据库 索引
数据库系列课程(11)-MyISAM和InnoDB对B-Tree索引不同的实现方式
数据库系列课程(11)-MyISAM和InnoDB对B-Tree索引不同的实现方式
66 0
|
数据库 OceanBase
在OceanBase数据库中,可以通过以下方法来重新平衡主副本分布
在OceanBase数据库中,可以通过以下方法来重新平衡主副本分布
182 2
|
设计模式 存储 JSON
带你通关全栈树型结构设计:从数据库到前端
今天咱们要讨论的树,它不是现实结构的树,也不是数据结构要讨论的树,而是「从业务视角抽象出来的树形结构」。
922 0
|
存储 算法 Java
由树到数据库索引
二叉排序树(Binary Search Tree):又被称为二叉查找树或者二叉搜索树,当然首先是二叉树,另外特点如下: 1.若它的左子树不为空,则左子树的结点小于它根节点的值; 2.若它的右子树不为空,则右子树的结点大于它根节点的值; 3.它的左、右子树也分别为二叉排序树;
由树到数据库索引
|
数据库
LeetCode(数据库)- 树节点
LeetCode(数据库)- 树节点
103 0
|
存储 JSON NoSQL
数据库必知词汇:Cassandra
Apache Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案,线性可扩展性和在商用硬件或云基础架构上经过验证的容错能力使它成为关键任务数据的理想平台。
1034 0
|
分布式计算 负载均衡 算法
数据库必知词汇:Zookeeper
ZooKeeper是用于维护配置信息、命名、提供分布式同步以及提供组服务的集中式服务。ZooKeeper是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,构成一个高效可靠的原语集,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
402 0
|
SQL 存储 分布式计算
数据库必知词汇:Hive
Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Apache Hive数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。 可以将结构投影到已经存储的数据上。 提供了命令行工具和JDBC驱动程序以将用户连接到Hive。
896 0

热门文章

最新文章