1、B树的基本概念
我所理解的B树应该是一种适配与计算机存取的一种算法,由于我们现在的大规模存储数据还是在机械硬盘中,其实机械硬盘本身的存储速度并不慢,普通的机械硬盘在7200 r/s左右,也就是完成一个磁盘页的存取只需要9ms左右,加上磁头的移动4ms左右,本身的速度是并不慢的,但是相对于硅本身的存取速度就会显得捉襟见肘了,两者的差距可能在20背左右,所以将数据放到内存中来进行操作显然是十分高效的选择, 所以机械硬盘的存储速度就基本取决于IO存取速度。而B树以及B+树就是在这样的背景下孕育而生的。
我们希望在将硬盘中的数据分块的放到内存中进行查找(数据库最核心的部分也就是查找,所以我们已查找为中心来思考B树的结构),再考虑到树型结构查找的高效性,所以我们考虑到了每次IO存取的数据如果是刚好是磁盘的一个磁盘页,也就是说每次从磁盘中取出一页作为树的一个节点,考虑到要尽可能的减少IO次数,也就是说要尽可能的减少树的高度,所以我们需要一颗平衡的树。
顺着我们的思路走下来B树的结构也就显而易见了:
1、根节点至少有两个字节点
2、每个节点至少有m/2个子节点,最多有m个子节点(考虑到树的平衡)
3、所有的叶子节点都出现在同一层上,也就是最后一层上
ps:每个节点的节点信息都保存在当前节点上(与B+树的一个重要区别),每个节点的节点信息包含节点信息以及指向子节点的指针信息。
2、查找
如同上上面所说的,B树的结构很大一部分就是为了查找而考虑的,所以B树的查找是几个数据操作中最为简单明了的操作。
3、在m阶B树上进行插入
4、B树的删除数据
5、应用方面
6、一些需要知道的概念
一个磁面的读取时间大概为9ms、一页磁面的存储数据量大概为2的10次方个字节(8k左右),就是磁盘读取的最小单位就是一页的容量数。
6、自己的思考