面对百亿数据,HBase为什么查询速度依然非常快?

  • 查询过程
      • 第1步:
      • 第2步:
      • 第3步:
      • 第4步:
    • 总结

HBase适合存储PB级别的海量数据(百亿千亿量级条记录),如果根据记录主键Rowkey来查询,能在几十到百毫秒内返回数据。
那么HBase是如何做到的呢?
接下来,简单阐述一下数据的查询思路和过程。

查询过程

第1步:

项目有100亿业务数据,存储在一个HBase集群上(由多个服务器数据节点构成),每个数据节点上有若干个Region(区域),每个Region实际上就是HBase中一批数据的集合(一段连续范围rowkey的数据)。

我们现在开始根据主键RowKey来查询对应的记录,通过meta表可以帮我们迅速定位到该记录所在的数据节点,以及数据节点中的Region,目前我们有100亿条记录,占空间10TB。所有记录被切分成5000个Region,那么现在,每个Region就是2G。

由于记录在1个Region中,所以现在我们只要查询这2G的记录文件,就能找到对应记录。

第2步:

由于HBase存储数据是按照列族存储的。比如一条记录有400个字段,前100个字段是人员信息相关,这是一个列簇(列的集合);中间100个字段是公司信息相关,是一个列簇。另外100个字段是人员交易信息相关,也是一个列簇;最后还有100个字段是其他信息,也是一个列簇

这四个列簇是分开存储的,这时,假设2G的Region文件中,分为4个列族,那么每个列族就是500M。

到这里,我们只需要遍历这500M的列簇就可以找到对应的记录。

第3步:

如果要查询的记录在其中1个列族上,1个列族在HDFS中会包含1个或者多个HFile。

如果一个HFile一般的大小为100M,那么该列族包含5个HFile在磁盘上或内存中。

由于HBase的内存进而磁盘中的数据是排好序的,要查询的记录有可能在最前面,也有可能在最后面,按平均来算,我们只需遍历2.5个HFile共250M,即可找到对应的记录。

第4步:

每个HFile中,是以键值对(key/value)方式存储,只要遍历文件中的key位置即可,并判断符合条件可以了。

一般key是有限的长度,假设key/value比是1:24,最终只需要10M的数据量,就可获取的对应的记录。

如果数据在机械磁盘上,按其访问速度100M/S,只需0.1秒即可查到。

如果是SSD的话,0.01秒即可查到。

当然,扫描HFile时还可以通过布隆过滤器快速定位到对应的HFile,以及HBase是有内存缓存机制的,如果数据在内存中,效率会更高。

总结

正因为以上大致的查询思路,保证了HBase即使随着数据量的剧增,也不会导致查询性能的下降。

同时,HBase是一个面向列存储的数据库(列簇机制),当表字段非常多时,可以把其中一些字段独立出来放在一部分机器上,而另外一些字段放到另一部分机器上,分散存储,分散列查询。

正由于这样复杂的存储结构和分布式的存储方式,保证了HBase海量数据下的查询效率。

面对百亿数据,HBase为什么查询速度依然非常快?相关推荐

  1. 日增百亿数据,查询结果秒出, Apache Doris 在 360商业化的统一 OLAP 应用实践

    导读: 360商业化为助力业务团队更好推进商业化增长,实时数仓共经历了三种模式的演进,分别是 Storm + Druid + MySQL 模式.Flink + Druid + TIDB 的模式 以及 ...

  2. 支持百亿数据场景,海量高性能列式数据库HiStore技术架构解析

    支持百亿数据场景,海量高性能列式数据库HiStore技术架构解析 HiStore介绍 HiStore是阿里中间件团队研发的数据库产品,是一款基于独特的知识网格技术的列式数据库,定位于海量数据高压缩比列 ...

  3. 现身说法:实际业务出发分析百亿数据量下的多表查询优化

    今天给大家带来的讨论主题是通过实战经验来对百亿数据量下的多表数据查询进行优化,俗话说的好,一切脱离业务的架构都是耍流氓,接下来我就整理一下今天早上微信群里石头哥给大家分享的百亿数据量多表查询架构以及优 ...

  4. 基于Flink百亿数据实时去重

    基于传统的Set方法去重,以及弊端 去重处理方法: 需要一个全局 set集合来维护历史所有数据的主键.当处理新日志时,需要拿到当前日志的主键与历史数据的 set 集合按照规则进行比较,若 set集合中 ...

  5. 千万数据去重_基于 Flink 的百亿数据去重实践

    在工作中经常会遇到去重的场景,例如基于 App 的用户行为日志分析系统,用户的行为日志从手机客户端上报到 Nginx 服务端,通过 Logstash.Flume 或其他工具将日志从 Nginx 写入到 ...

  6. Redis基本使用及百亿数据量中的使用技巧分享

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 作者:大石头 时间:2018-11-10 晚上20:00 地点:钉钉群(组织代码B ...

  7. Google面试题:找几百亿数据的中值

    Google面试题:找几百亿数据的中值 http://blog.csdn.net/jiyanfeng1/article/details/8088237 有几百亿的整数,分布的存储到几百台通过网络连接的 ...

  8. 面对百亿用户数据,日均亿次请求,携程应用架构如何涅槃?

    https://www.infoq.cn/article/ctrip-big-data-high-concurrency-applications-architecture?utm_campaign= ...

  9. PostgreSQL 百亿数据 秒级响应 正则及模糊查询

    原文: https://yq.aliyun.com/articles/7444?spm=5176.blog7549.yqblogcon1.6.2wcXO2 摘要: 正则匹配和模糊匹配通常是搜索引擎的特 ...

最新文章

  1. POJO、VO、PO、FormBean区别:
  2. 【iCore2双核心板】SRAM 读写实验(基于Verilog语言)
  3. img超出div width时, jQuery动态改变图片显示大小
  4. 网络工程师之广域网必胜篇一
  5. shell字符串是否以a-zA-Z字母开头
  6. 主域无法开机,备份域升级成主域操作
  7. webstorm护眼绿柔主题分享(JetBrains都可用)
  8. VC6中编译器/zm问题
  9. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十五)网络通讯指令SEND,RECV,CMND...
  10. 电脑计算机配置应用程序兼容性,软件和系统不兼容怎么办 电脑禁用程序兼容助手服务的操作方法...
  11. 全国计算机等级考试怎么保存,全国计算机等级考试一级备考:Word文档保存为PDF文件...
  12. XML数据结构 SAX 解析
  13. c语言中val是什么函数,val(val是什么意思)
  14. 如何使用 Podman 签署和分发容器镜像
  15. 向程序发送命令时出现错误
  16. 网易我的世界服务器清除TNT,以及圈地领地,命令方块使用
  17. 新浪导航(html+css)
  18. vue 手机移动端预览pdf
  19. Modelsim基础使用一
  20. pyspark开发趣味题1-求共同好友

热门文章

  1. vue +高德地图 绘制围栏
  2. 李飞飞:我怎样走上AI研究之路
  3. 国科大学习资料--最优化计算方法(王晓)--第五次作业答案
  4. 为啥现在还有人相信5G辐射危害健康?
  5. Win10多版本CUDA和CUDNN安装
  6. 卷积神经网络系列之softmax loss对输入的求导推导
  7. 【艾兰岛建筑】系列1—五大实用绝招!教你场景建造又快又美!
  8. EMC常见术语-dB、dBm、dBw以及如何计算
  9. 使用python3完成英文词频统计
  10. 电子设计教程12:Buck降压电路