各种树

2018-12-04  本文已影响0人  Ary_zz

2018-12-04

红黑树

image.png

查找效率最好情况下时间复杂度为O(logN),但在最坏情况下比AVL要差一些,但也远远好于二叉查找树。
  插入和删除操作改变树的平衡性的概率要远远小于AVL(RBT不是高度平衡的)。任何不平衡都会在3次旋转之内解决。这一点是AVL所不具备的。

B树

又叫平衡多路查找树。一棵m阶的B树 (m叉树)的特性如下:

B+树

image.png

1、B+树的磁盘读写代价更低
 磁盘是可以块存储的,也就是同一个磁道上同一盘块中的所有数据都可以一次全部读取。而B+树的内部结点并没有指向关键字具体信息的指针(比如文件内容的具体地址),因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。这样,一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
2、B+树的查询效率更加稳定。
 由于B+树非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须从根结点到叶子结点。所有关键字查询的路径长度相同,所以每一个数据的查询效率相当。

B+树最大的性能问题是会产生大量的随机IO,随着新数据的写入,叶子节点会慢慢分裂,逻辑上连续的叶子节点在物理上往往不连续,甚至分离的很远,但做范围查询时,会产生大量读随机IO。

LSM 树

把一颗大树拆分成N棵小树, 它首先写入到内存中,在内存中构建一颗有序小树,随着小树越来越大,内存的小树会flush到磁盘上,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。当读时,需要合并磁盘中历史数据和内存中最近修改操作,由于不知道数据在哪棵小树上,因此必须遍历所有的小树,但在每颗小树内部数据是有序的。


image.png

比较
1. B+树的特点决定了能够对主键进行高效的查找和删除,B+树能够提供高效的的范围扫描功能得益于相互连接且按主键有序,扫描时避免了耗时的遍历操作。
  LSM树在查找时先查找内存的存储,如果在内存中未命中就去磁盘文件中查找文件,找到key之后返回最新的版本。
  B树和LSM树最主要的区别在于他们的结构和如何利用硬件,特别是磁盘。

2. 在没有太多的修改时,B+树表现得很好,因为修改要求执行高代价的优化操作以保证查询能在有限的时间内完成。LSM以磁盘传输速率工作,并能较好地扩展以处理大量数据,他们使用日志文件和内存存储来将随机写转换成顺序写,因此也能够保证稳定的数据插入速率。由于读写分离,两个操作也不存在冲突的问题。

3. LSM树的主要目标是快速的建立索引,B树是建立索引的通用技术,但是在大并发插入数据的情况下,B树需要大量的随机IO,这些随机IO严重影响索引建立速度。LSM通过磁盘序列写,来达到最优的写性能,因为这个降低了磁盘的寻道次数,一次IO可以写入多个索引块。

上一篇 下一篇

猜你喜欢

热点阅读