推荐阅读
- 学习笔记 《 深入理解 Java 虚拟机》
- 学习笔记 《 后端架构设计》
- 学习笔记 《 Java 基础知识进阶》
- 学习笔记 《 Nginx 学习笔记》
- 学习笔记 《 前端开发杂记》
- 学习笔记 《 设计模式学习笔记》
- 学习笔记 《 DevOps 最佳实践指南》
- 学习笔记 《 Netty 入门与实战》
- 学习笔记 《 高性能MYSQL》
- 学习笔记 《 JavaEE 常用框架》
- 学习笔记 《 Java 并发编程学习笔记》
- 学习笔记 《 分布式系统》
- 学习笔记 《 数据结构与算法》
1. BTREE 数据结构
BTREE 又称之为多路平衡搜索树。
1.1 BTREE 结构的特点
BTREE 具有以下特点:
- 一个M叉的BTREE 数据结构,每个节点最多包含 m-1 个子节点
- 除了根节点和叶子节点外,每个节点至少有 [ceil(m/2)] 个子节点
- 如果根节点不是叶子节点,则其至少有两个分支
- 所有的叶子节点均处在同一层
- 每个非叶子节点由 N 个 Key 和 N+1 个指针组成,其中 N的取值范围是 [ceil(m/2) - 1] <= N <= M-1
1.2 BTREE 构造演示
插入数据 : C、N、G、A、H、E、K、Q、M、F、W、L、T、Z、D、P、R、X、Y、S
- 由于是5叉BTREE数,所以每个节点上最多只能保存4个数据。因此保存的是C、N、G、A。
- 继续插入 H的时候,根节点变为 A、C、G、H、N 突破了最大容量,因此中间节点G转化为 父节点
- 然后接着插入 E、K、Q结果如下所示
![image.png](https://img-blog.csdnimg.cn/img_convert/06d31247eb5940bde84477ca413f05d4.png#align=left&display=inline&height=111&name=image.png&originHeight=222&originWidth=680&size=16108&status=done&style=none&width=340)
- 在继续插入M的时候,因为大于G,所以会插入到右侧的分支,但是由于右侧节点新增M之后,节点数据超过5个,所以中间节点M升级为父节点和根节点G 合并,遗留的4个节点拆分为2个子节点
- 然后依次此操作,最后插入完成后得到下图结果
使用的绘图连接是 https://www.cs.usfca.edu/ 可以在此网站中学习先关的数据结构,其动画流程延时的效果很棒
2. BTREE+ 数据结构
- B+数的Key的数量最多是M个,而BTREE 最多是 M-1 个
- B+数所有的叶子节点中保存了所有的数据信息,非叶子结点仅仅起到索引的作用,所以所有的查询都会走到叶子节点,查询稳定性较高
- 在叶子节点之间增加了指针的目的是便于范围搜索,这也是相对于 BTREE 的优势