课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
存储功能是开发数据库的时候都会添加的一个功能,而今天我们就通过案例分析来了解一下,B+树技术在数据库中的应用表现。
B树在提高磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树是对B树的一种变形,本质还是多路平衡查找树。B+树只要遍历叶子节点就可以实现整棵树的遍历。而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作(或者说效率太低)。RDBMS需要B+树用以减少寻道时间,顺序访问较快。
B+树通常被用于数据库和操作系统的文件系统中。像NTFS,ReiserFS,NSS,XFS,JFS,ReFS和BFS等文件系统都在使用B+树作为元数据索引。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树元素为自底向上插入。
B+树上有两个头指针,一个指向根节点,另一个指向关键字小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对B+树进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。
与普通B-树相比,B+树的非叶子节点只有索引,所有关键字都位于叶子节点,这样会使树节点的度比较大,而树的高度就比较低,从而有利于提高查询效率。并且叶子节点上的数据会形成有序链表。
主要优点如下:
结构比较扁平,高度低(一般不超过4层),随机寻道次数少;
有n棵子树的结点中含有n个关键字,不用来保存数据,只用来索引。结点中仅含其子树(根结点)中的大(或小)关键字。
数据存储密度大,且都位于叶子节点,查询稳定,遍历方便;
叶子节点存放数值,按照值大小顺序排序,形成有序链表,区间查询转化为顺序读,效率高。且所有叶子节点与根节点的距离相同,因此任何查询效率都很相似。而B树则必须通过中序遍历才支持范围查询。
与二叉树不同,B+树的数据更新操作不从根节点开始,而从叶子节点开始,并且在更新过程中树能以比较小的代价实现自平衡。
B+树的缺点:
如果写入的数据比较离散,那么寻找写入位置时,子节点有很大可能性不会在内存中,终产生大量随机写,性能下降。下图说明了这一点。
B+树在查询过程中应该不会慢,但如B+树已运行很长时间,写入了很多数据,随着叶子节点分裂,其对应的块会不再顺序存储而变得分散,可能会导致逻辑上原本连续的数据实际上存放在不同的物理磁盘块位置上,这时执行范围查询也会变成随机读,会导致较高的磁盘IO,效率降低。
譬如:数据更新或者插入完全无序时,如先插入0,后80000,然后200,然后666666,这样跨度很大的数据时,由于不在一个磁盘块中,就需先去查找到这个数据。数据非常离散,就意味着每次查找时,它的叶子节点很可能都不在内存中,此时就会出现性能的瓶颈。并且随机写产生的子树的分裂等,产生很多的磁盘碎片,也是不太友好的一面。
可见B+树在多读少写(相对而言)的情境下比较有优势。当然,可用SSD来获得成倍提升的读写速率,但成本相对较高。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。