1 B树

B树是一种平衡多路搜索树,B树与红黑树最大的不同在于,B树的结点可以有多个子女,从几个到几千个。那为什么又说B树与红黑树很相似呢?因为与红黑树一样,一棵含n个结点的B树的高度也为O(lgn),但可能比一棵红黑树的高度小许多,应为它的分支因子比较大。所以,B树可以在O(logn)时间内,实现各种如插入(insert),删除(delete)等动态集合操作。

B树的定义如下:

  • 根节点至少有两个子节点
  • 每个节点有M-1个key,并且以升序排列
  • 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
  • 其它节点至少有M/2个子节点
  • 所有叶子结点位于同一层;

2 B+树(读快写慢)

2.1 B+树和B-树比较

B+树是应文件系统所需而出的一种B树的变型树,B+树的差异在于:

  • 有n棵子树的结点中含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点
  • 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
  • 所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小)关键字,通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。

        B树和B+树总结

  • B树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中
  • B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中

2.2 B+树优缺点

  • 优点:

    • B+树的层级更少:相较于B树,B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快;

      B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定;

      B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。

      B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可,,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描。

  • 缺点:
    • 如果经常访问的数据离根节点很近,而B树非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快。
    • 当要修改数据时,就需要将新入数据下面的数据重新排位,特别是当写入的数据排在较高的位置时,需要大量的移位操作才能完成写入。

3 LSM树(读慢写快)

3.1 LSM树原理

LSM树的设计思想非常朴素:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。

LSM树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。

LSM树(Log-Structured Merge Tree)存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。

3.2 LSM树优缺点

  • 优点:底层用LSM树,顺序写入磁盘快
  • 缺点:数据未排序,随机读取数据很慢

3.3 LSM树的优化

LSM牺牲部分读性能,从而提高写性能:将数据分散到多个有序列表中,每个列表保存一部分数据,这样可以减少写入时间。但读取数据时,就需要先查找在哪个有序列表,再从这个列表中读取具体数据。

有2种方法优化读取时间:

  • Bloom filter : 使用布隆过滤器,就可以不用二分查找,而只需简单的计算几次就能知道数据是否在某个小集合里啦。效率得到了提升,但付出的是空间代价。
  • 小树合并为大树: 也就是大家经常看到的compact的过程,因为小树性能有问题,所以要有个进程不断地将小树合并到大树上,这样大部分的老数据查询也可以直接使用log2N的方式找到,不需要再进行(N/m)*log2n的查询了。

3.4 LSM树的应用

  • kafka
  • hbase
  • kudu

3.5 kudu对LSM的优化

3.5.1 DiskRowSet优化

kudu的memtable(在kudu中叫MemRowSet)还是同之前一样,只是SSTable(在kudu中叫DiskRowSet)改成了列式存储。对于列式存储,读取一个记录需要分别读每个字段,因此kudu精心设计了RowSet中的索引(针对并发访问等改进过的B树),加速这个过程。

3.5.2 RowSet优化

kudu保证一个key只可能出现在一个RowSet中,并记录了每个RowSet中key的最大值和最小值,加速数据的范围查找。这也意味着,对于数据更新,不能再像之前一样直接插入memtable即可。需要找到对应的RowSet去更新,为了保持写吞吐,kudu并不直接更新RowSet,而是又新建一个DeltaStore,专门记录数据的更新。所以,后台除了RowSet的compaction线程,还要对DeltaStore进行merge和apply。从权衡的角度考虑,kudu其实是牺牲了一点写效率,单记录查询效率,换取了批量查询效率。

参考

https://blog.csdn.net/mingyuezh/article/details/80839868

B+树和LSM树对比相关推荐

  1. 数据密集型系统设计:索引及存储(B树、LSM树、OLTP及OLAP)

    1.数据索引结构 一个数据库在最基础的层次上需要完成两件事情:当你把数据交给数据库时,它应当把数据存储起来:而后当你向数据库要数据时,它应当把数据返回给你.世界上最简单的数据库可以用两个Bash函数实 ...

  2. B树、B+树、LSM树以及其典型应用场景

    前言 动态查找树主要有:二叉查找树.平衡二叉树.红黑树.B树.B+树.前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率.这时就提出了 ...

  3. 数据库关于B树、B+树、LSM树的简介

    B树 在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序.这种数据结构能够让查找数据.顺序访问.插入数据及删除的动作,都在对数时间内完成.B树,概括来说是一个一般化的二叉查找 ...

  4. 分布式存储引擎(B树、LSM树)原理

    分布式存储引擎(B树.LSM树)原理 B+树结构 Update-in-place 常见于传统关系型数据库(MySQL.Oracle),按key维护B+树,数据存放在叶子结点(每个页对应的节点可以有更高 ...

  5. 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! 前 ...

  6. 从B+树到LSM树,及LSM树在HBase中的应用

    前言 在有代表性的关系型数据库如MySQL.SQL Server.Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和B+树.而在一些主流的NoSQL数据库如HBase.Cassandra ...

  7. B+树 VS LSM树

    目录 B+树 LSM树 比较 总结 B+树 简介:为了改善数据访问特性,文件系统或数据库系统通常会对数据排序后存储,加快数据检索速度.传统关系数据库的做法是使用B+树,保证数据在不断更新.插入.删除后 ...

  8. B+树与LSM树的区别与联系

    首先来回答一个问题:为什么在磁盘中要使用b+树来进行文件存储呢? 原因还是因为树的高度低得缘故,磁盘本身是一个顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足一个最重要的条 ...

  9. 最容易理解的LSM树--以示例讲解合并查找过程

    关于LSM树 LSM树,即日志结构合并树(Log-Structured Merge-Tree).其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想.大多NoSQL数据库核心思想都是基于L ...

最新文章

  1. 如何通过 DJI SDK 控制无人机运动
  2. android ipc简单理解,Android IPC 机制【1】--简介
  3. 21秋期末考试建筑力学与结构10126k2
  4. [转]Global exception handling in Web API 2.1 and NLog
  5. 秒懂机器学习---当机器学习遇上决策树....
  6. 能用机器完成的,千万别堆工作量|持续集成中的性能自动化测试
  7. 为Apple Push开发的PHP PEAR 包:Services_Apple_PushNotification
  8. Java网络爬虫该如何学习
  9. Random()种子数
  10. 做品牌 在男人和女人之间玩转巧妙和平衡
  11. REHL5 mail不能自动外发邮件
  12. python3.6.5 安装第三方库
  13. SQL解析处理和扩展开发工具 Java
  14. java 医院病历号怎么生成_java病历管理系统
  15. 整理好全球半导体公司,看看哪些你的上下游厂家
  16. 21年大学统考计算机报名时间,2017年大学计算机基础试题题库及答案
  17. 第二章第一题(将摄氏温度转换为华氏温度)(Convert Celsius to Fahrenheit)
  18. 【语音增强论文解读 03】TCNN: TEMPORAL CONVOLUTIONAL NEURAL NETWORK FOR REAL-TIME SPEECHENHANCEMENT IN THE TIME
  19. 领导力21法则自测题
  20. pr 快捷键自我需要总结

热门文章

  1. 树莓派开发——串口通信
  2. Azure Kinect DK 在设备管理器找不到此设备
  3. updatePanel下使用uploadFile控件
  4. C语言程序:用栈实现四则运算
  5. [Mac经验] Mac远程链接Windows 共享文件夹
  6. android.9图(点九图)图例
  7. 【LM401】USART串口配置过程 uart.c 代码解析
  8. java 无锁栈_队列加锁无锁栈实现一例
  9. java计算机毕业设计圆梦酒店管理系统源码+mysql数据库+系统+lw文档+部署
  10. ConstraintLayout的崛起之路