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

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

简单来说:

在hbase的架构中:

以上就是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做合并操作。

对比三种引擎的实现:  

  • hash存储引擎:哈希表持久化的实现,可以快速支持增删改查等随机操作,且时间复杂度为o(1),但是不支持顺序读取扫描,对应的存储系统为k-v存储系统的实现。
  • b树存储引擎是b树的持久化实现,不仅支持单条记录的增删改查操作,还支持顺序扫描,对应的存储系统就是mysql。
  • lsm树存储引擎和b树存储引擎,一样支持,增删改查,也支持顺序扫描操作。LSM牺牲了读性能,提高写性能。

摘自:Mr.Yan

hbase 中的LSM树存储引擎相关推荐

  1. Hbase中的LSM树详解

    一.前言 哈希存储引擎 是哈希表的持久化实现,支持增.删.改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统.对于key-value的插入以及查询,哈希表的复杂度都是O( ...

  2. HBase是如何应用LSM树存储思想的

    前言 想了解HBase存储原理,最直观的方式是先了解它使用的存储思想,然后通过类比法,即可秒懂HBase为什么要这么设计了.所以再学习HBase如何实现存取的时候,最好先理解LSM树存储思想. 研究一 ...

  3. ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译]

    参考文章: ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译] 原文 译文 操作 The new release of ArangoDB 3.2 is just around ...

  4. mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法

    第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...

  5. mysql中最常用的存储引擎有_mysql常用的存储引擎有哪些

    MySql中的存储引擎有MyISAM引擎,MyISAM Merge引擎, InnoDB引擎,memory(heap)引擎以及archive引擎 MySql中的存储引擎 MyISAM引擎 这种引擎是my ...

  6. Mysql中各种常见数据库存储引擎对比

    转载于:https://www.cnblogs.com/Jasxu/p/mysql_data_engine.html

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

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

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

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

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

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

最新文章

  1. jQuery 追加元素的方法如append、prepend、before
  2. java 实现斐波切纳数列,求解这个算斐波切纳兔子有关问题的算法错哪了(和stl迭代器貌似有点关系)...
  3. C++ Primer笔记 容器和算法(2)
  4. ubuntu 下review board一遍安装成功
  5. 【移植Linux 3.4.2内核第一步】之简单修改
  6. Mr.J-- jQuery学习笔记(二十五)--监听DOM加载
  7. 别在我的坟前哭 脏了我轮回的路
  8. 啦啦外卖独立版41.4+全插件+可运营版本+开源(亲测100%可用)
  9. 腾讯帮助警方破获 30+ 起吃鸡外挂案件;Java 领域的五大发展预测
  10. 中级职称的计算机考试题库,中级职称计算机考试模拟题库及答案
  11. win10 常用DOS命令
  12. 深度学习框架:动态图 vs 静态图
  13. python面向对象学习
  14. 2021.08.29_Android_各系统间换行符不同引起的无法执行shell脚本,提示no such file or directory
  15. 高德地图显示服务器加载失败,常见问题
  16. 【爬虫】王者荣耀爬取英雄高清4K图片
  17. php极简wiki,Wiki.js初体验
  18. Vim配置及使用技巧
  19. 自用 学习BCR 免疫组化
  20. 卸载wrapt_conda 安装与卸载cudnn

热门文章

  1. 剑指-利用树的前序遍历和中序遍历结果,输出树的原始结构
  2. 蓝桥杯 - 试题 H: 扫雷(思维)
  3. 牛客 - 焦糖布丁(线性基+博弈)
  4. CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)
  5. 洛谷 - P4012 深海机器人问题(最大费用最大流)
  6. uva437The Tower of Babylon
  7. 基于TCP的Socket通讯
  8. H.264码流结构解析
  9. Windows下编译和安装Boost库
  10. 给Source Insight做个外挂系列之五--Insight “TabSiPlus”