热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hbase查询优化Filter+Scan

HbaseFilterScan查询效率问题1.ScanHBase常用的查看数据方式有scan和get,get是一种特殊的scan,get是scan的

Hbase Filter+Scan 查询效率问题


1.Scan

HBase常用的查看数据方式有scan和get,get是一种特殊的scan,get是scan的startrow和endrow等于同一个值的特殊情况。

hbase的rowkey是按照B+树的形式存放的,所以查找一个具体的rowkey速度是非常快的,所以查询数据的时候一般都会设置scan的startrow和endrow,这样可以缩小查找的范围,所以rowkey的设计在hbase里面是极为重要的。

可以这样讲,hbase里面的查询数据只有scan一种形式,就是在B+树里面查找rowkey,而scan就是对rowkey的一种顺序”扫”。

查看一下scan里面对rowkey的条件筛选&#xff0c;只有startrow和endrow这一组&#xff0c;所以可以理解为sql条件里面的”>”和”<”。

hbase的rowkey是按照顺序排列的&#xff0c;所以在设计rowkey的时候尽量将业务查询需要的字段设计到rowkey里面&#xff0c;这样在查询的时候对rowkey加上一定范围的限制。

2.Filter

除了对rowkey的scan外&#xff0c;HBase为筛选数据提供了一组过滤器&#xff0c;通过这个过滤器可以在HBase中的数据的多个维度&#xff08;行&#xff0c;列&#xff0c;数据版本&#xff09;上进行对数据的筛选操作&#xff0c;也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上&#xff08;由行键&#xff0c;列明&#xff0c;时间戳定位&#xff09;。

filter并不能做到像rowkey那样快速定位到数据&#xff0c;他的作用仅仅是过滤&#xff0c;在scan的过程中对列族的某个字段进行一定条件的判断。

通常来讲&#xff0c;scan来定位查找的大概范围&#xff0c;fitler来过滤找到具体的值。

下面看看hbase里面都提供了哪些filter
参考&#xff1a;
https://vergil.blog.csdn.net/article/details/79232926?utm_medium&#61;distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id&#61;1328602.69596.16152730172366075&depth_1-utm_source&#61;distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

众所周知&#xff0c;Hbase利用filter过滤器查询时候会进行全表扫描&#xff0c;查询效率低下&#xff0c;如果没有二级索引&#xff0c;在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案&#xff0c;仅供参考&#xff0c;欢迎交流。

根据业务要求&#xff0c;作者需要根据时间范围搜索所需要的数据&#xff0c;所以作者设计的rowKey是以时间戳为起始字符串的。

正确尝试&#xff1a;
1.scan 设置 开始行和结束行

Scan scan &#61; new Scan();scan.setStartRow("startRowKey".getBytes());scan.setStopRow("stopRowKey".getBytes());

结论&#xff1a;查询效率明显提升

2.查询的数量越小越好

总数据量越大&#xff0c;查询越耗时&#xff0c;所以为保证效率&#xff0c;开始行和结束行之间需要遍历的数据总量越少越好。

需要说明的是&#xff0c;在filter 中RowFilter设置开始行&#xff08;前缀&#xff09;和结束行&#xff08;前缀&#xff09;
并不能提升查询效率&#xff0c;因为还是全表扫描。

FilterList filters &#61; new FilterList(FilterList.Operator.MUST_PASS_ALL);//开头大于等于starTm的行Filter starTime &#61; new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,new BinaryPrefixComparator(DateUtil.formatDate(starTime, "yyyyMMddHHmmssSSS").getBytes()));filters.addFilter(starTime);//开头小于等于endTime的行Filter endTime &#61; new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryPrefixComparator(DateUtil.formatDate(endTime, "yyyyMMddHHmmssSSS").getBytes()));filters.addFilter(endTime);

结论&#xff1a;利用san&#43;filter方式查询hbase时&#xff0c;一定要设置starRow 和stopRow
参考&#xff1a;https://blog.csdn.net/u013465194/article/details/83044910


推荐阅读
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了 Python 中的基本数据类型,包括不可变数据类型(数字、字符串、元组)和可变数据类型(列表、字典、集合),并详细解释了每种数据类型的使用方法和常见操作。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
author-avatar
mobiledu2502887403
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有