hbase 中的LSM树存储引擎
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树存储引擎相关推荐
- Hbase中的LSM树详解
一.前言 哈希存储引擎 是哈希表的持久化实现,支持增.删.改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统.对于key-value的插入以及查询,哈希表的复杂度都是O( ...
- HBase是如何应用LSM树存储思想的
前言 想了解HBase存储原理,最直观的方式是先了解它使用的存储思想,然后通过类比法,即可秒懂HBase为什么要这么设计了.所以再学习HBase如何实现存取的时候,最好先理解LSM树存储思想. 研究一 ...
- ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译]
参考文章: ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译] 原文 译文 操作 The new release of ArangoDB 3.2 is just around ...
- mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法
第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...
- mysql中最常用的存储引擎有_mysql常用的存储引擎有哪些
MySql中的存储引擎有MyISAM引擎,MyISAM Merge引擎, InnoDB引擎,memory(heap)引擎以及archive引擎 MySql中的存储引擎 MyISAM引擎 这种引擎是my ...
- Mysql中各种常见数据库存储引擎对比
转载于:https://www.cnblogs.com/Jasxu/p/mysql_data_engine.html
- B树、B+树、LSM树以及其典型应用场景
前言 动态查找树主要有:二叉查找树.平衡二叉树.红黑树.B树.B+树.前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率.这时就提出了 ...
- 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! 前 ...
- 从B+树到LSM树,及LSM树在HBase中的应用
前言 在有代表性的关系型数据库如MySQL.SQL Server.Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和B+树.而在一些主流的NoSQL数据库如HBase.Cassandra ...
最新文章
- jQuery 追加元素的方法如append、prepend、before
- java 实现斐波切纳数列,求解这个算斐波切纳兔子有关问题的算法错哪了(和stl迭代器貌似有点关系)...
- C++ Primer笔记 容器和算法(2)
- ubuntu 下review board一遍安装成功
- 【移植Linux 3.4.2内核第一步】之简单修改
- Mr.J-- jQuery学习笔记(二十五)--监听DOM加载
- 别在我的坟前哭 脏了我轮回的路
- 啦啦外卖独立版41.4+全插件+可运营版本+开源(亲测100%可用)
- 腾讯帮助警方破获 30+ 起吃鸡外挂案件;Java 领域的五大发展预测
- 中级职称的计算机考试题库,中级职称计算机考试模拟题库及答案
- win10 常用DOS命令
- 深度学习框架:动态图 vs 静态图
- python面向对象学习
- 2021.08.29_Android_各系统间换行符不同引起的无法执行shell脚本,提示no such file or directory
- 高德地图显示服务器加载失败,常见问题
- 【爬虫】王者荣耀爬取英雄高清4K图片
- php极简wiki,Wiki.js初体验
- Vim配置及使用技巧
- 自用 学习BCR 免疫组化
- 卸载wrapt_conda 安装与卸载cudnn
热门文章
- 剑指-利用树的前序遍历和中序遍历结果,输出树的原始结构
- 蓝桥杯 - 试题 H: 扫雷(思维)
- 牛客 - 焦糖布丁(线性基+博弈)
- CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)
- 洛谷 - P4012 深海机器人问题(最大费用最大流)
- uva437The Tower of Babylon
- 基于TCP的Socket通讯
- H.264码流结构解析
- Windows下编译和安装Boost库
- 给Source Insight做个外挂系列之五--Insight “TabSiPlus”