为什么Hbase能实现快速的查询

你的快速是指什么? 是根据亿级的记录中快速查询,还是说以实时的方式查询数据。

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

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

时间: 2025-01-07 02:32:20

为什么Hbase能实现快速的查询的相关文章

利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询

有个需求是纬度表需要秒出数据,首先表刚好也是1-1批对的情况,首先想到了利用hbase的索引机制.(表数据大概在4--30E之间) 虽然网上有很多直接建立hive表,自动创建hbase表的例子,但是这种情况不能进行hbase表的region预分区,导致热点问题比较严重.所以hive和hbase表要分开建立再关联起来. 1.建立hbase表 create 'xxxxx', {NAME => 'info',COMPRESSION => 'SNAPPY'},SPLITS => ['xxx|',

HBase多条件及分页查询的一些方法

HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式有着密切的关系,在逻辑上,HBase的表数据按RowKey进行字典排序, RowKey实际上是数据表的一级索引(Primary Index),由于HBase本身没有二级索引(Secondary Index)机制,基于索引检索数据只能单纯地依靠RowKey.也只有使用RowKey查询数据才能得到非常高

如何快速比较查询结果是否一致_转叶大侠

如何快速比较查询结果是否一致 如何快速比较查询结果是否一致 ([email protected]) [tom]> pager md5sum - PAGER set to 'md5sum -' ([email protected]) [tom]> select * from users; 6004a48a825ef527b3f090290ba9f0c0 - 1 row in set (0.00 sec) ([email protected]) [tom]> select * from us

Elasticsearch+Hbase实现海量数据秒回查询

---------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53966430作者:朱培      ID:sdksdk0 ------------------------------------------------------

HBASE+Solr实现详单查询--转

原文地址:https://mp.weixin.qq.com/s?srcid=0831kfMZgtx1sQbzulgeIETs&scene=23&mid=2663994161&sn=cee222a8534cbc6e28c401706e979dc0&idx=1&__biz=MzA3ODUxMzQxMA%3D%3D&chksm=847c675cb30bee4a5c4e9a03a41662ba6f312d4ba28407311a80c4a36f3f93a4bb624

HBase 二级索引和备用查询路径

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53319.html 你也可以将本文的标题理解为"如果我的表 rowkey 看起来像这样,但我也希望我的查询表这样." dist-list 上的一个常见示例是 row-key 格式为"user-timestamp"格式,但对于特定时间范围内的用户活动有报告要求.因此,用户选择容易,因为它处于密钥的主导位置,但时间不是. 没有一个最好的方法来解决这个问题的答案,因为它取决于:

算法模板——并查集 2(支持快速即时查询本连通块内容,纯原创!)

实现功能:输入N,现在有N个数:接下来输入任意行,如果是"1 x y"则表示把x和y所在的块合并:如果是"2 x"则表示输出x所在的块的全部内容 原理:其实主要是自己创造了一个可并链line,he表示链头,ta表示链尾,然后对于不同块之间的合并就是直接把两条链对接,也就是一个的尾巴接到另一个的头上,构成新链(由于是链的直接叠加,所以可以做到严格的O(1),并且输出时输出多少复杂度就是多少,完全不存在额外复杂度).然后同时用原本的普通数组并查集进行维护和追踪(理论值为

字典树 一种快速插入查询数据结构

定义 字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高. 解释 这个图片比较经典 就是在每一次边存的是字符,点标记着个点是否之前的边的字符都存在 如图存在的字符串有 abc abcd abd.... 代码 #include <cstdio> #include <cstring> #include &

Hbase根据rowkey利用scan查询

1.rowkey以某个内容开头 Filter filtet = new PrefixFilter("ooo".getBytes()); 2.rowkey字符串包含方式 Filter filter = new RowFilter(CompareOp.EQUAL,new SubstringComparator("xxx")); 3.rowkey匹配正则方式 Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQ