为何HBase速度很快?

2024-06-24 07:38
文章标签 hbase 很快 速度

本文主要是介绍为何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树呢?B树、B+树、LSM树以及其典型应用场景_惜暮-CSDN博客_lsm树和b+树
什么是LRU?LruCache算法(最近最少使用算法)_赵雷-CSDN博客
LRU最近最少使用算法 - YoZane - 博客园
可以去了解一下

举例:

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

<span style="color:#000000"><span style="background-color:#282c34"><code> 实时查询,即反应根据当前时间的数据,可以认为这些数据始终是在内存的,保证了数据的实时响应。</code></span></span>

 

这篇关于为何HBase速度很快?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089540

相关文章

高性能MYsql读书笔记-加快alter table操作的速度

alte tabe 会导致事务中断。 方法1  使用 alter column 代替 modify column  方法2  不推荐。。 ALTER TABLE      [  ALTER COLUMN    / MODIFY COLUMN  /  CHANGE COLUMN  ] ALTER TABLE sakila.film MODIFY COLUMN rental

redis增大查询速度(项目中实际应用举例)

1、关于保存User表的方案       1.1  使用Redis的Hash类型去保存关系型数据库的User表        1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid   value:json 数据 2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。 3

Hbase特性介绍

1、什么是Hbase。 是一个高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。 适合于存储非结构化数据,基于列的而不是基于行的模式 如图:Hadoop生态中HBase与其他部分的关系。 2、关系数据库已经流行很多年,并且Hadoop已经有了HDFS和MapReduce,为什么需要HBase? Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于Hadoo

什么是hbase Coprocessor

HBase客户端查询存在的问题 Scan 用Get/Scan查询数据,Filter 用Filter查询特定数据 以上情况只适合几千行数据以及不是很多的列的“小数据”。 当表扩展为亿万行及百万列时,在通过网络传递移动大量的数据导致网络拥堵,且客户端需要足够多内存来处理这么大量数据的计算操作,另外,客户端代码也会变的大而复杂。 解决方案 移动计算比移动数据更划算 Coprocessor将运

hbase中shell命令

HBase scan命令详解 - 简书https://www.jianshu.com/p/0ccfd59d73f4 Hbase中多版本(version)数据获取办法_牛奋lch-CSDN博客_hbase 多版本前言:本文介绍2种获取列的多版本数据的方式:shell和spring data hadoop一、hbase shell中如何获取    1、在shell端创建一个Hbase表create

hbase架构

本篇文章旨在针对初学者以我本人现阶段所掌握的知识就HBase的架构图中各模块作一个概念科普。不对文章内容的“绝对、完全正确性”负责。  1、开胃小菜   关于HBase的架构图,直接抓取网络上图片来分析就好了。它大概长成下面的样子: 图1 HBase架构图   从上图中可以很直观地看到整个HBase都是基于HDFS之上的。这个HDFS呢,它的全称是Hadoop distribut

hbase scan的java操作

public class HbaseTest {public static void main(String[] args) throws Exception {//构建基本信息String table = "t_userBehavior2";final TableName tableName = TableName.valueOf(table);final HTable hTable = new

如何关闭软件开机自启,提升电脑开机速度?

如何关闭软件开机自启,提升电脑开机速度?大家知道,很多软件在安装时默认都会设置为开机自动启动。但是,有很多软件在我们开机之后并不是马上需要用到的,开机启动的软件过多会导致电脑开机变慢。那么,如何关闭这些开机软件自启呢?我们可以按照以下步骤进行操作: 1.任务管理器设置方法 在任务栏上点击右键,然后选择“任务管理器”。在任务管理器弹出的窗口中,点击“启动”标签页,就可以看到开机启动项。

Chrome插件: Octotree让你GitHub代码浏览速度飙升

在GitHub上浏览和管理项目代码时,您是否曾为复杂的目录结构感到困惑?如果有一种工具能够让您轻松浏览项目的文件和目录,会不会大大提升您的工作效率?这正是Octotree浏览器插件所能做到的。   不过说实话,GitHub自带的代码浏览功能有时候真的是让人捉急,尤其是当代码库特别庞大的时候,找个文件就跟大海捞针一样。 为什么越来越多的开发者选择使用Octotree插件?它又是如何改变