最近比较忙,隔了一段时间没有更新博客了。今天拿点时间来分享下关于hbase分页查询的实现思路,自己已经应用了该hbase分页查询。
从所周知,hbase通过scan来扫描表,通过startKey,stopKey来确定范围,hbase官方提供了一个PageFilter来支持一次scan可以返回多少条数据即每页的行数。假如一页是10条,这样是第一页还好,但是第二页呢,如果不改变PageFilter的pageSize,那返回的还是第一页的数据,如果改变pageSize为20,则返回了第一页10多余的数据,在客户端要过滤掉,性能不好。那怎么办呢,方法就是在查询下一页时,指定下一页的startKey,这样PageFilter每次就不会返回多余的记录,stopKey可以不用变,那现在问题是,怎么得到下一页的startKey(即下一页第一行的rowkey)呢?,有两种方法来取每一页的startKey
一 上一页的最后一行记录的rowkey作为下一页的startKey。
二 在每次scan时多取一条记录,即把下一页第一条行页取出来,把该行的rowkey做为下一页的startKey。
不管用一还是二,都要注意,hbase scan时是包含startKey的,如果是采用第一种,则要在记录多取一条,排除第一条。第二种页是多取一条,但是排除最后一条,用来做下一页的startKey。还有需要注意的是在计算是否有下一页时,可以根据返回的条数来判断。
startKey怎么取没有问题了。但是怎么存储呢,有同学可能会想到存到session,但是如果你的服务是rest api型的,就没有session的概念了。那还有两种选择:
一 是存到客户端,让客户端每次请求时把startKey再传回来,这样需要依赖客户端,如果客户端是远程,或者是开放平台的情况下,可能不合适。
二 存在服务端,存在服务端需要注意并发访问的情况。比如scan同一个表,一个访问第2页,一个访问第3页,服务端就需要对每一个table的scan 存每一页的startKey,需要为同一个查询条件包含pageSize,因为pageSize不一样,startKey也会不一样,
在服务crash情况下,从起后都从第一页开始。
我自己是采用第二种方案,存在服务端,需要代码的,可以给我留言,如果你有更好的方案的请分享出来。
注:hbase的分页一般只提供下一页,不提供直接最后一页,
由于网友的需要,现在把Hbase页面代码下载链接放上。
hbase分页源码
- 浏览: 91319 次
- 性别:
- 来自: 北京
最新评论
-
xindongwei:
你好 能不能给我一份解决这个问题的实例
log4j屏蔽system.out的方法 -
jerryhanwei:
select p.projectname,t.totalTim ...
一个sql的问题 -
yunmanfan:
有个思路,大家看看
select emp.Name,asito ...
一个sql的问题 -
sunlongfei:
为啥大家看了都浏览,不评价下呢。人家总结的很辛苦的
SQL优化34条 -
friendmine:
反编译,然后再编译一下就成了.
log4j屏蔽system.out的方法
相关推荐
hbase分页查询实现.pdf
hbase分页查询实现
hbase分页查询实现[归类].pdf
里面包括了特定场合下,HBase随机查询的一些性能指标参考以及调优策略
hbase查询分页分页
用户历史订单列表查询rowkey设计技巧 最左前缀原则
hbase java api 访问 查询、分页 详情请看:http://blog.csdn.net/wild46cat/article/details/53321409
实现sql查询Hbase,Phoenix 基于Hbase给面向业务的开发人员提供了以标准SQL的方式对Hbase进行查询操作,并支持标准SQL中大部分特性:条件运算,分组,分页,等高级查询语法。 这里提供两个版本: apache-phoenix-4.8.1...
java操作Hbase之Hbase专用过滤器PageFilter的使用源代码,附带全部所需源代码,欢迎下载学习。
hbase-page hbase 分页
hbase 利用pagefilter支持分页功能,可以显示总条目,指定每页个数,获取总页码。
hbase分页查询实现 1.封装查询条件 2.封装每行数据 3.根据ROW KEY集合获取GET对象集合 4.封装配置的所有字段列族
项目中自己用的,弄了很久,需要把数据从各种数据源导入到,我们的原始数据库,原始数据库采用hbase,来存储所有数据,那么这里就用的nifi,从其他数据源获取数据以后,然后导入到Hbase中去,这个是设计好的流程模板. ...
hbase 示例:订单设计&分页设计实效crud接口
NIFI模板PostGreSqlToHbaseByPhoenix-数据从PostGresql实时同步到Hbase-带分页.zip NIFI大数据处理模板,导入以后可以直接将数据从postgresql从通过phoenix拉取到Hbase中去,注意这里,需要自己配置一下phoenix连接...
数据查询结果的分页显示操作,并且对查询关键字高亮显示; 导出 表结构的导出; 表结构及数据的导出; 导入 文件批量put命令导入(支持中文) 批量put命令执行(支持中文) 非可视化界面的命令操作 HBase命令的执行 导入...
•过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符(QualifierFilter)或者数据值(ValueFilter) •过滤器允许对数据分页处理(PageFilter),限制扫描器返回行数 •Filter...
如果你也需要利用NIFI进行数据同步,并且你用到了Postgresql数据库,想从Postgresql数据库中去获取数据然后,把数据同步到Hbase中去,这里我们使用的大数据存储工具,Hbase来存储原始数据. 我们需要把所有的关系型数据,...
springboot整合mybties操作phoenix,连接池使用比较快的HikariCP,通过实体类对应的增删改查等方法操作hbase的表,使用分页,这个东西有点新,网上一直没找到,就自己写了一个
这里面编写了一个NIFI大数据传输流程,使用phoenix从hbase中去获取数据,带分页获取数据以后,然后把数据同步到指定的mysql数据库中去,实现数据的实时同步. 下载以后配置一下对应的数据库连接池,以及数据库的用户名...