Bootstrap

[Database] 数据库B树

总结自《算法导论》

  • 一、数据结构定义
  • 二、操作
    • 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

转载于:https://www.cnblogs.com/deepblueme/p/4926097.html

;