对比三种引擎的实现:

hash存储引擎:哈希表持久化的实现,可以快速支持增删改查等随机操作,且时间复杂度为o(1),但是不支持顺序读取扫描,对应的存储系统为k-v存储系统的实现。

b树存储引擎是b树的持久化实现,不仅支持单条记录的增删改查操作,还支持顺序扫描,对应的存储系统就是mysql。

lsm树存储引擎和b树存储引擎,一样支持,增删改查,也支持顺序扫描操作。LSM牺牲了读性能,提高写性能。

LSM的原理:将对数据的修改增量保存在内存中,达到指定大小限制之后批量把数据flush到磁盘中,磁盘中树定期可以做merge操作,合并成一棵大树,以优化读性能。不过读取的时候稍微麻烦一些,读取时看这些数据在内存中,如果未能命中内存,则需要访问较多的磁盘文件。极端的说,基于LSM树实现的hbase写性能比mysql高了一个数量级,读性能却低了一个数量级。

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

以上就是hbase存储设计的重要思想,这里说明一下:

因为数据是先写到内存中,所以为了防止内存数据丢失,会先把数据写入hlog中,也符合了数据库中标准,先写日志,再写数据

memstore上的树达到一定大小之后,需要flush到磁盘中,然后再定期做合并,提高读取的性能;

关于LSM Tree,对于最简单的二层lsm而言。

lsm tree,理论上,可以是内存中树的一部分和磁盘中一层数做merge,对于磁盘中的树直接做update操作有可能会破坏物理block的连续性,在实际场景中,一般lsm有多层,当磁盘中的小树合并成为一个大树的时候,可以重新排好顺序,使block连续,优化读性能。

hbase在视线中,是把整个内存在一定阈值后,flush到disk中,形成一个hfile文件。这个file的存储也是一个小的b+树,因为hbase是存储在hdfs上,hdfs不支持更新操作,所以hbase的数据也是定期flush到磁盘中,而不是和文件中的hfile做合并操作。

mysql中lsm树_LSM树理解相关推荐

  1. mysql中condition的用法_理解Condition的用法

    packagelocks;importjava.util.Random;importjava.util.concurrent.locks.Condition;importjava.util.concu ...

  2. MySQL(四)InnoDB中一棵B+树能存多少行数据

    一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...

  3. MySQL中B+树索引,聚簇索引,二级索引,辅助索引,回表,索引生效条件

    对于MySQL,我们经常说调优有一个手段就是加索引,那么为什么加索引能够优化查询,是不是加了索引查询就快了 ? 在MySQL中,存储的单元并不是按照我们理解的一条一条记录,而是按照页来进行存储的,My ...

  4. mysql中b树索引_Mongo和Mysql中的B树索引

    为什么Mysql中Innodb的索引结构采取B+树? 回答这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种答法,自己就给自己 ...

  5. MySQL中一个B+树能存储多少数据

    MySQL聚簇索引的存储结构 MySQL中InnoDB页的大小默认是16k.也可以自己进行设置.(计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/ ...

  6. 轻松理解 MySQL InnoDB 索引、B+树索引、查询原理

    博主:爱码叔 个人博客站点: icodebook 公众号:爱码叔漫画软件设计(搜:爱码叔) 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间 ...

  7. Mysql中B树与B+树的区别

    一.B树 B树和B+树都是应用在数据库索引上,可以认为是m叉的多路平衡查找树,但是理论上讲,二叉树的查找速度和比较次数都更小,为什么不用二叉树呢? 这是因为我们要考虑磁盘IO的影响,它相对于内存来说是 ...

  8. 为什么MyISAM会比Innodb的查询速度快。 btree 和 lsm(hbase) ,cola 树(tokuDB)选型和原理

    父文章 如何成为一名架构师,架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客_架构师成长之路 相关文章 1.8 leveldb vs rocksdb 优劣分析 对 write stalli ...

  9. 面试必问:InnoDB 中一棵 B+ 树能存多少行数据?

    一.InnoDB一棵B+树可以存放多少行数据? InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万.为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB ...

最新文章

  1. 视窗宽高offset、client、scroll
  2. 一个很好的自学网站~推荐一下
  3. opencv方框内图像保存_opencv 图像滤波(均值,方框,高斯,中值)
  4. 面试经常问的:mybatis的执行流程(比较简洁)
  5. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
  6. eclipse经常出现弹窗Refreshing workspace
  7. 孔浩javacript基础笔记一
  8. norm函数-matlab
  9. 怎么把ide改成ahci_Win10系统无需重装,硬盘IDE改为AHCI模式的方法
  10. 选择阿里云数据库HBase版十大理由
  11. AVC/HEVC/VVC/AV1 帧间预测:运动估计、运动补偿
  12. Nginx 重定向所有子域名到www
  13. excel中输入身份证号后三位变成0怎么办
  14. mysql查询1999年后出生的_饭后笑笑 1999年出生的和2000年出生的秘密
  15. linux 利用缓存文件.swp恢复源文件
  16. 广义相对论与狭义相对论的区别
  17. 雅可比(Jacobi)及高斯-塞德尔(Gauss_Seidel)迭代法求解线性方程组的matlab现实
  18. 编程菜鸟到大鸟--代码积累
  19. 虚拟机关机出现shutting down... running guests on default URT
  20. apmserv中 php版本,APMServ5.2.6的PHP版本升级到5.3、5.4版本的方法

热门文章

  1. redis清理key
  2. 申请泛域名证书和自动续签(网站证书https)
  3. BCM VOIP 启动分析
  4. PHP源码1001PHP源码,某区块链养殖系统平台PHP源码无加密完整版,带充值接口+完整会员系统 可封装APP可二开...
  5. Linex新手常用命令
  6. Linux运维web运维 结合rewirte和location来进行匹配和网页重写跳转
  7. Typora最后一个免费版
  8. java开发操作系统:一个程序向另一个程序伸出的咸猪手
  9. 香港读书 – 香港签注延期办理流程(转载)
  10. GTD---时间管理 从现在开始