【网站高性能 3】----B+树 vs LSM树


B+树  vs  LSM树

 

前言:

    在前面我们介绍到,性能优化之存储性能优化有将1)机械硬盘改成固态硬盘(2)磁盘阵列方式RAID  vs  HDFS ,今天小编和大家分享一个在存储过程,从数据结构方面来提升系统的性能,从数据结构B+树 vs  LSM树来对比了解。

 

什么是B+树?

  B+ 树是一种专门针对磁盘存储而优化的N叉排序树, 一树节点为单位存储在磁盘中。从根开始查找所需要数据所在的节点编号和磁盘位置,将其加载到内存张然后继续查找,直到找到所需要的数据。

 

 什么是LSM树?

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

 

   特点:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘


 

B+树原理:

    对于传统的极限磁盘有快速的顺序读写、慢速的随机读写的访问特性,这个特性对磁盘存储结构和算法的选择影响较大,为了改善数据访问特性,文件系统通常会对数据排序后进行存储,加快数据的检索速度,这就是要保证数据不断更新、插入、删除后依然有序,传统关系数据库的做法就是使用B+数:

                         


        目前数据库多是采用两级索引的B+数,最多三层。因此可能需要5次磁盘访问才能更新一次记录(3 次磁盘访问获得数据索引行及ID,然后1 数据库读取操作及一次数据文件写操作)。但是由于每次磁盘访问都是随机的,而传统机械磁盘在数据随机访问时性能较差,每次数据访问都需要多次访问磁盘,这就影响数据访问的性能,所以就有人改进了用NoSQL产品的LSM树如下:

 

                    

 

       LSM树可以看作是一个N阶合并树。数据写操作(包括插入、修改、删除)都在内存中进行,并且都会创建一个新记录(修改会记录新的数据值,而删除会记录一个删除标志),这些数据在内存中仍然还是一棵排序树,当数据量超过设定的内存l阂值后,会将这棵排序树和磁盘上最新的排序树合并。当这棵排序树的数据量也超过设定l阂值后,和磁盘_L下一级的排序树合并。合并过程中,会用最新更新的数据覆盖旧的数据(或者记录为不同版本)。

 

LSM树查找原理:

    在需要进行读操作时,LSM树总是从内存中的排序树开始搜索,如果没有找到,就从磁盘上的排序树顺序查找。

 

对比:

   1,在LSM树上进行一次数据更新不需要磁盘访问,在内存即可完成,速度远快于B+树。当数据访问以写操作为主,而读操作则集中在最近写入的数据上时,使用LSM树可以极大程度地减少磁盘的访问次数,加快访问速度。

 

2,当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。

 

        作为存储结构,B+树不是关系数据库所独有的,NoSQL数据库也可以使用B+树。同理,关系数据库也可以使用LSM,而且随着SSD硬盘的日趋成熟及大容带持久存储的内存技术的出现,相信B+树这一“古老”的存储结构会再次焕发青春。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
LSM(Log-Structured Merge Tree)是一种高效的存储引擎,它主要用于解决写入密集型场景下的数据存储和检索问题。LSM的实现方式与B+有所不同,主要表现在以下几个方面: 1. 结构不同 B+是一种平衡,它采用内存中的节点和磁盘中的节点相结合的方式来实现数据的存储和检索。而LSM则是一种基于日志的存储结构,它将所有的写入操作都记录在一个日志文件中,然后通过合并和压缩等方式来实现数据的存储和检索。 2. 写入性能不同 B+在写入时需要进行节点的分裂和合并等操作,因此写入性能相对较低。而LSM在写入时只需要将所有操作记录在日志文件中,不需要进行节点的操作,因此写入性能较高。 3. 读取性能不同 B+在读取时可以直接从内存中读取节点,因此读取性能比较高。而LSM则需要从磁盘中读取数据,因此读取性能相对较低。 4. 存储空间利用率不同 B+采用的是覆盖式写入,即每次写入都会覆盖原有的数据,因此会浪费一些存储空间。而LSM采用的是追加式写入,即每次写入都会添加到日志文件的末尾,不会覆盖原有的数据,因此可以更好地利用存储空间。 5. 数据一致性和可靠性不同 B+采用的是原地更新的方式,即更新后数据会直接写回到原有的节点中,因此可能会出现数据不一致的情况。而LSM采用的是追加式写入,即每次写入都会添加到日志文件的末尾,不会直接更新原有的数据,因此可以更好地保证数据的一致性和可靠性。 总的来说,LSM和B+在实现方式和性能上有所不同。LSM适用于写入密集型场景下的数据存储和检索,可以提高写入性能和存储空间利用率,但读取性能相对较低。而B+则适用于读取密集型场景下的数据存储和检索,可以提高读取性能和数据一致性,但写入性能相对较低。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值