hbase分页查询
来源:互联网 发布:java条件查询 编辑:程序博客网 时间:2024/05/08 03:27
此文原创,转载请说明出处:http://ronxin999.blog.163.com/blog/static/422179202013621111545534/
最近比较忙,隔了一段时间没有更新博客了。今天拿点时间来分享下关于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的分页一般只提供下一页,不提供直接最后一页,
代码后面放上。
也可以关注我的新浪微博:http://weibo.com/jamvp ,方便交流。。。。
- hbase分页查询
- hbase实现分页查询
- hbase实现分页查询
- hbase分页查询
- hbase分页查询思路
- HBase学习之二: hbase分页查询
- Hbase建表,查询(带分页)
- Hbase分页查询代码实现
- HBase伪快速分页查询
- HBase分页查询性能测试ppt分享
- SQL on HBase -- phoenix 之分页查询
- Hbase 分布查询 - 应用后台程序控制分页
- Hbase查询结果分页(PageFilter)
- SQL on HBase -- phoenix 之分页查询
- scala实现hbase的分页查询,并封装PageInfo
- 多节点读取hbase表:支持分页查询的思考
- hbase分页
- Hbase查询
- 区间k大数查询 java
- 动易SiteFactoryCMS 网站配置保存不了问题
- uml符号意思
- 判断两个矩形是否重叠/相交
- 【Apache HBase系列】HBASE之RowKey排序解析
- hbase分页查询
- 无线数据传输技术的比较
- 数据库Clob类型转String类型
- oracle中如何批量编译视图和存储过程
- python面向对象(一)
- Hadoop基本知识,(以及MR编程原理)
- java List 排序 Collections.sort() 对 List 排序
- 框架常见错误(一)
- CreateProcess执行一个控制台程序,隐藏窗口