[Database] 数据库B树
2015-10-31 20:02
295 查看
总结自《算法导论》
一、数据结构定义
二、操作
1、查找
2、插入
3、删除
一、B树是针对磁盘存储而设计的一种数据结构,在B树种一个node的大小一般就是一个磁盘页的大小,所以非常便于IO操作。
针对某个特定的B树都会定义一个t值,表示的意思是:除了根节点之外的内部节点最多有2*t个孩子,最少有t个孩子,相应的指针的数量为:2*t-1和t-1
任意叶子节点的高度是一样的
二、操作
1、查找
2、插入
一定会插入到叶子上。
从根节点依次往下递归,如果遇到一个满的节点,就将其分裂,从而保证在插入位置的node的父节点都不是慢的,便于后面的调整。
3、删除
3.1和插入类似也是从上往下的递归过程。在没有查到目标节点之前,如果当前node有t-1节点
3.1.1 如果node的某个兄弟节点有至少t个孩子,则进行平移一下
3.1.2 否则node和任意一个兄弟合并
3.2在到达关键字k
3.2.1叶子:直接删除
3.2.2 内部
若被删除的节点的某个孩子系欸但有至少t个孩子,则从那边借一个,取代被删除的节点
否则两个孩子合并,算法结束。
B+树相对于B树,为什么更加适合数据库和操作系统的文件系统?
答:主要有两个优点:
1、B+树的内部节点,并没有指向具体数据的指针,node更小,因此一个磁盘块能够容纳的关键字的个数也就越多,通过一次IO操作读入的关键字的个数也就越多,从而减少IO操作的次数
2、B+树由于内部节点不存储数据,因此每次查询都要查找到叶子节点,因此查询更加稳定一些。
[1] http://baike.baidu.com/link?url=xh9Y-HgqXf-o5b5HEw-2aDjfDkAOc9ecaRVtWE4MTbTG8EVwyjwt0iNzA34vgadIIU_oF_42HS2I4TwPkTGjrK
[2] http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
一、数据结构定义
二、操作
1、查找
2、插入
3、删除
一、B树是针对磁盘存储而设计的一种数据结构,在B树种一个node的大小一般就是一个磁盘页的大小,所以非常便于IO操作。
针对某个特定的B树都会定义一个t值,表示的意思是:除了根节点之外的内部节点最多有2*t个孩子,最少有t个孩子,相应的指针的数量为:2*t-1和t-1
任意叶子节点的高度是一样的
二、操作
1、查找
2、插入
一定会插入到叶子上。
从根节点依次往下递归,如果遇到一个满的节点,就将其分裂,从而保证在插入位置的node的父节点都不是慢的,便于后面的调整。
3、删除
3.1和插入类似也是从上往下的递归过程。在没有查到目标节点之前,如果当前node有t-1节点
3.1.1 如果node的某个兄弟节点有至少t个孩子,则进行平移一下
3.1.2 否则node和任意一个兄弟合并
3.2在到达关键字k
3.2.1叶子:直接删除
3.2.2 内部
若被删除的节点的某个孩子系欸但有至少t个孩子,则从那边借一个,取代被删除的节点
否则两个孩子合并,算法结束。
B+树相对于B树,为什么更加适合数据库和操作系统的文件系统?
答:主要有两个优点:
1、B+树的内部节点,并没有指向具体数据的指针,node更小,因此一个磁盘块能够容纳的关键字的个数也就越多,通过一次IO操作读入的关键字的个数也就越多,从而减少IO操作的次数
2、B+树由于内部节点不存储数据,因此每次查询都要查找到叶子节点,因此查询更加稳定一些。
[1] http://baike.baidu.com/link?url=xh9Y-HgqXf-o5b5HEw-2aDjfDkAOc9ecaRVtWE4MTbTG8EVwyjwt0iNzA34vgadIIU_oF_42HS2I4TwPkTGjrK
[2] http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
相关文章推荐
- [LeetCode] [SQL]: 182: Duplicate Emails
- SQL题
- Mysql在实际使用中的部署架构
- 数据库中的几个知识点
- 从Oracle中数据库中读取以Blob类型存储的图片显示在jsp页面中
- [转]SQL查询语句中的 limit offset
- [LeetCode] [SQL]: 181: Employees Earning More Than Their Managers
- Linux非法关机后重新开启MongoDB
- MySQL的体系结构概述
- 【MySQL】VS【SQLServer】
- PostgreSQL下迭代实现数据库递归查询
- 安装两次ORACLE客户端,PL-SQL登录报错 ORA-12154
- SQL处理非常见空串
- php 操作mongodb
- 存储过程与PL/SQL基本用法
- zendframwork2添加对mongodb的支持
- mysql explain 各列的含义
- PySqlite 学习笔记
- 创建数据库迁移
- mysql 绝对单词匹配