Hbase存取速度为啥快---第二弹

Posted coeus-p

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbase存取速度为啥快---第二弹相关的知识,希望对你有一定的参考价值。

版权声明:本文为CSDN博主「九品下」的原创文章 原文链接:https://blog.csdn.net/w892824196/article/

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速度也会很快,因为节省了寻道开销。

举例:

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的高性能。

实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。





以上是关于Hbase存取速度为啥快---第二弹的主要内容,如果未能解决你的问题,请参考以下文章

Eigen的速度为啥这么快

为啥 GPU 做矩阵乘法的速度比 CPU 快?

写入 Linux 管道的速度比文件快,但在内核级别,为啥?

为啥在这段代码中 CPU 运行速度比 GPU 快?

为啥这个 Jinja2 模板的渲染速度不比 Django 快?

Google Colab 运行速度比 Jupyterlab 快,Google Colab 为啥以及如何运行?