Hbase为什么这么快

为何HBase速度很快?

HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的, 即由LSM-Tree(Log-Structured Merge-Tree) + HTable(region分区) + Cache决定——客户端可以直接定位到要查数据所在的HRegion server服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的。

前面说过HBase会将数据保存到内存中,在内存中的数据是有序的,如果内存空间满了,会刷写到HFile中,而在HFile中保存的内容也是有序的。当数据写入HFile后,内存中的数据会被丢弃。

HFile文件为磁盘顺序读取做了优化,按页存储。下图展示了在内存中多个块存储并归并到磁盘的过程,合并写入会产生新的结果块,最终多个块被合并为更大块。
在这里插入图片描述

多次刷写后会产生很多小文件,后台线程会合并小文件组成大文件,这样磁盘查找会限制在少数几个数据存储文件中。HBase的写入速度快是因为它其实并不是真的立即写入文件中,而是先写入内存,随后异步刷入HFile。所以在客户端看来,写入速度很快。另外,写入时候将随机写入转换成顺序写,数据写入速度也很稳定。

而读取速度快是因为它使用了 LSM树型结构,而不是B或B+树。磁盘的顺序读取速度很快,但是相比而言,寻找磁道的速度就要慢很多。HBase的存储结构导致它需要磁盘寻道时间在可预测范围内,并且读取与所要查询的rowkey连续的任意数量的记录都不会引发额外的寻道开销。比如有5个存储文件,那么最多需要5次磁盘寻道就可以。而关系型数据库,即使有索引,也无法确定磁盘寻道次数。而且,HBase读取首先会在 缓存(BlockCache)中查找,它采用了 LRU(最近最少使用算法),如果缓存中没找到,会从内存中的MemStore中查找,只有这两个地方都找不到时,才会加载HFile中的内容,而上文也提到了读取HFile速度也会很快,因为节省了寻道开销。

什么是LSM树呢?https://blog.csdn.net/u010853261/article/details/78217823
什么是LRU?https://blog.csdn.net/qq_39238370/article/details/78067066
https://www.cnblogs.com/yuanzhenliu/p/5659397.html
可以去了解一下

举例:

A:如果快速查询(从磁盘读数据),hbase是根据rowkey查询的,只要能快速的定位rowkey, 就能实现快速的查询,主要是以下因素:
1、hbase是可划分成多个region,你可以简单的理解为关系型数据库的多个分区。
2、键是排好序了的
3、按列存储的

首先,能快速找到行所在的region(分区),假设表有10亿条记录,占空间1TB, 分列成了500个region, 1个region占2个G. 最多读取2G的记录,就能找到对应记录;

其次,是按列存储的,其实是列族,假设分为3个列族,每个列族就是666M, 如果要查询的东西在其中1个列族上,1个列族包含1个或者多个HStoreFile,假设一个HStoreFile是128M, 该列族包含5个HStoreFile在磁盘上. 剩下的在内存中。

再次,是排好序了的,你要的记录有可能在最前面,也有可能在最后面,假设在中间,我们只需遍历2.5个HStoreFile共300M

最后,每个HStoreFile(HFile的封装),是以键值对(key-value)方式存储,只要遍历一个个数据块中的key的位置,并判断符合条件可以了。 一般key是有限的长度,假设跟value是1:19(忽略HFile上其它块),最终只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。 加上块缓存机制(LRU原则),会取得更高的效率。

B:实时查询
实时查询,可以认为是从内存中查询,一般响应时间在1秒内。HBase的机制是数据先写入到内存中,当数据量达到一定的量(如128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。

 实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HBase可以存储海量的稀疏数据,主要是因为它采用了分布式存储的方式,并且数据是按照行存储的。这种存储方式可以让HBase在存储海量数据时,能够速地进行数据的读写操作,同时也能够保证数据的可靠性和安全性。此外,HBase还支持水平扩展,可以根据实际需要动态地增加或减少节点,从而满足不同规模的数据存储需求。这些特点使得HBase成为了处理海量稀疏数据的理想选择。 ### 回答2: HBase是一种基于分布式算法的应用程序,它使用Hadoop以及HDFS进行存储,因此可以存储海量的稀疏数据。下面我们来了解一下hbase为什么可以存储海量的稀疏数据。 1.稀疏数据的特点 稀疏数据指的是在一个很大的数据集中,只有很少一部分数据是有值的,其余的数据则为零。这种数据的特点就是数据集很大且大部分数据为空值,因此传统的关系型数据库模型会将这些数据都存储下来造成巨大的资源浪费。而HBase采用的是稀疏矩阵存储模型,对这种稀疏数据有很好的适应性。 2.稀疏矩阵存储模型 HBase采用的是稀疏矩阵存储模型,它只存储有值的数据,而没有值的数据则不会进行存储。在HBase中,每一行数据都对应一个行键,而列族和列限定符则指定了数据的集合,而值则存在于相应的列中。因此,稀疏的数据只会存储非零值的数据,大大减少了存储空间的使用,同时也提高了存取数据的效率。 3.水平扩展性 HBase是一种基于分布式算法的应用程序,它使用Hadoop以及HDFS进行分布存储和管理,因此可以随着数据量的增加水平扩展。同时,HBase还能够进行垂直扩展,实现更高的性能和更可靠的服务。这种水平扩展的特性为HBase存储海量的稀疏数据提供了支持。 总之,HBase采用的稀疏矩阵存储模型以及基于分布式算法的水平扩展性,为其存储海量的稀疏数据提供了强大的支持。在大数据时代的背景下,HBase的应用将会越来越广泛,为企业和机构存储与管理海量数据提供了有力的保障。 ### 回答3: Hbase是一种基于Hadoop分布式文件系统HDFS实现的开源列式数据库系统,可以用来搭建海量数据存储和处理平台。相较于传统的关系型数据库,Hbase支持海量数据的存储和访问,并且可以容易地扩展集群规模。那么,为什么Hbase可以存储海量稀疏数据呢? 首先,Hbase采用的是一种稀疏矩阵存储方式,即只存储非空值,这样可以极大地节约空间。这种存储方式适用于那些大部分数据为空、且数据结构比较简单的情况下。例如,在Web日志分析中,每个用户在某个页面上的点击情况是一种典型的稀疏数据结构,大部分用户的点击都是零,只有极少数用户点击了一些操作。 其次,Hbase具有高可扩展性,可以根据业务需求速扩展存储规模。Hbase采用了水平扩展的方式,可以通过添加更多的机器节点来增加存储容量。同时,Hbase还支持多个副本的配置,提高了数据的可靠性和可用性。 最后,Hbase提供了高效的数据访问能力。Hbase支持多维度的索引和速随机访问,用户可以通过行键和列族等多个维度进行数据的速定位和读取。同时,Hbase还支持批量操作和并行读写,能够更加高效地进行数据的处理和计算。 综上所述,Hbase作为一种专门针对大数据存储和处理的工具,采用了稀疏矩阵的存储方式,高可扩展性和高效的数据访问能力等特点,为海量稀疏数据的存储和使用提供了更好的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值