讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来:
- 哈希存储引擎 是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作O(n)快,如果不需要有序的遍历数据,哈希表就是your Mr.Right
- B树存储引擎是B树(关于B树的由来,数据结构以及应用场景可以看之前一篇博文)的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等)。
- LSM树(Log-Structured Merge Tree)存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。
通过以上的分析,应该知道LSM树的由来了,LSM树的设计思想非常朴素:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。
LSM树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能。
以上这些大概就是HBase存储的设计主要思想,这里分别对应说明下:
- 因为小树先写到内存中,为了防止内存数据丢失,写内存的同时需要暂时持久化到磁盘,对应了HBase的MemStore和HLog
- MemStore上的树达到一定大小之后,需要flush到HRegion磁盘中(一般是Hadoop DataNode),这样MemStore就变成了DataNode上的磁盘文件StoreFile,定期HRegionServer对DataNode的数据做merge操作,彻底删除无效空间,多棵小树在这个时机合并成大树,来增强读性能。
关于LSM Tree,对于最简单的二层LSM Tree而言,内存中的数据和磁盘你中的数据merge操作,如下图
图来自lsm论文
lsm tree,理论上,可以是内存中树的一部分和磁盘中第一层树做merge,对于磁盘中的树直接做update操作有可能会破坏物理block的连续性,但是实际应用中,一般lsm有多层,当磁盘中的小树合并成一个大树的时候,可以重新排好顺序,使得block连续,优化读性能。
hbase在实现中,是把整个内存在一定阈值后,flush到disk中,形成一个file,这个file的存储也就是一个小的B+树,因为hbase一般是部署在hdfs上,hdfs不支持对文件的update操作,所以hbase这么整体内存flush,而不是和磁盘中的小树merge update,这个设计也就能讲通了。内存flush到磁盘上的小树,定期也会合并成一个大树。整体上hbase就是用了lsm tree的思路。
相关推荐
《HBase概述——HBase的存储模型》这篇文章深入解析了HBase的核心存储机制,即LSM树(Log-Structured Merge Tree)。LSM树是一种优化的存储结构,它旨在解决大数据场景下的高性能写入和读取需求。在HBase中,LSM树的...
HBase的LSM(Log-Structured Merge)树是一种优化的存储结构,将写入操作的增量存储在内存中,定期将这些小文件合并到磁盘上的大文件,以减少磁盘I/O。这种设计使得HBase在处理大量写入时仍然能保持高性能。 HBase...
总结来说,HBase数据读取流程主要包括以下步骤: 1. 客户端通过Zookeeper找到HBase:meta表的RegionServer。 2. 客户端缓存HBase:meta表。 3. 客户端定位目标rowkey所在的RegionServer。 4. 向RegionServer发送读取...
HBase的架构可以从物理结构和数据模型两个层面进行理解。物理结构包括日志文件、RegionServer的数据存储位置以及表的Region分布等。数据模型主要包括KeyValue、HFileBlock、HFile和HLog等关键组件。KeyValue是HBase...
标题《阿里的HBase业务和容灾实践》所涉及的知识点非常丰富,覆盖了...同时,也能够理解HBase在业务应用和容灾设计方面的考虑和实践。这些知识不仅对于了解HBase技术有帮助,而且对于实际业务部署和优化也非常有价值。
【HBase概述】 HBase是一种基于Google Bigtable理念设计的开源NoSQL数据库,它构建于Apache Hadoop文件系统(HDFS)之上,提供...理解HBase的工作原理、存储机制以及操作流程,对于开发高效的大数据应用程序至关重要。
通过以上详细的知识点分析,我们不仅对HBase有了更全面的理解,还掌握了如何安装配置并有效利用HBase来处理大规模数据集的方法。这对于从事大数据处理工作的专业人士来说,具有非常重要的参考价值。
了解HBase中的In-Memory Compaction,首先需要理解几个关键概念: 1. LSM树(Log-Structured-Merge Tree):一种用于存储系统中用来提升写性能的数据结构。LSM树将所有的修改操作保存在内存中,之后批量地顺序写入...
【大数据技术基础培训-HBase技术介绍】 HBase是一种开源的分布式NoSQL数据库,设计用于处理大...通过理解HBase的基本概念和工作原理,开发者可以更好地利用它来构建大规模分布式应用,以应对日益增长的数据处理挑战。
HBase的存储引擎基于LSM-Like树,这使得一次范围查询可能涉及到多个Region(分片)、BlockCache(内存缓存)以及多个HFile(数据存储文件)。在读取过程中,HBase不仅要处理多版本的数据,还要处理已标记为删除但未...
LSM Tree,全称为Log-Structured Merge Tree,是一种优化过的数据结构,主要应用于高性能的数据库系统,例如Google的levelDB、Facebook的RocksDB以及Apache的HBase等。相较于传统的B+树,LSM Tree的设计目标是提高...
【标题】"DB总结"涉及的是数据库相关的知识,特别是与大数据处理和分布式系统相关的技术。在这一主题下,我们可以深入探讨以下几个重要的知识点: 1. **Hadoop HA(高可用性)概述**: Hadoop HA是Hadoop生态系统...
Hadoop题库 本资源摘要信息涵盖了Hadoop题库的主要知识点,包括Hadoop的运行模式、Hadoop的作者、...通过本资源摘要信息,您可以更好地理解Hadoop和HBase的知识点,并且能够更好地应用这些知识点在实际工作中。
在HBase数据库系统中,数据读取流程比写入更为复杂,主要由于其存储引擎基于LSM-Like树结构,以及更新和删除操作的特殊处理方式。本文将重点解析HBase数据读取中的scanner体系构建。 首先,HBase的读取流程需要处理...
21. LSM含义:LSM(Log-Structured Merge Tree)是一种日志结构合并树,常用于键值存储系统,如HBase,优化写入性能。 22. LSM描述:LSM树通过顺序写入磁盘,然后定期合并数据来优化写入性能,读取操作可能需要合并...
snapshot是很多存储系统和数据库系统都支持的功能。一个snapshot是一个全部文件系统、或者某个目录在某一时刻的镜像。实现数据文件镜像最简单粗暴的方式是...在HBase这种LSM类型系统结构下是比较容易理解的,我们知道HB
布隆过滤器是一种高效的空间节约型数据结构,用于判断一个元素是否可能存在于一个大型集合中。它由布隆于1970年提出,主要利用了...理解其原理并根据实际需求选择合适的参数,可以在节省空间和保证性能之间找到平衡。
【Hadoop核心知识点详解】 1. **Hadoop运行模式**: - Hadoop有三种运行模式:单机(本地)模式、伪分布式模式和分布式模式。单机模式主要用于测试和学习...了解这些内容对于理解和使用Hadoop及其生态系统至关重要。