HBase伪快速分页查询
来源:互联网 发布:程序员对象是什么职业 编辑:程序博客网 时间:2024/04/27 16:43
之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在mysql里面,后来里面数据上亿之后,就查不到了,而且数据还在以指数级增长方式上报,后来,这部分业务单独迁移到hbase集群去存放,之前页面的查询也改查hbase了。但是hbase对分页查询这种东西支持不好,如果按照以往查询mysql的思路,查询出一个总的count,再查询出这一页的数据,这种方式去查询hbase,那么如果你仔细去跟代码计算时间的话,你会发现hbase去查count,无论哪种方式,都会引起全表扫描,是非常慢的。整个页面加载出来,看了下响应事件,大概要45s,等的我都喝了两杯茶了。
so,我想了个比较伪的分页查询方法,去掉查询count操作,值查询一页数据:
public Page<BatteryData> findBatterHisData(BatteryHisDto dto)throws Exception { Page<BatteryData> dataPage=new Page<BatteryData>(); List<BatteryData> dataList=new ArrayList<>(); int totalSize=0; Table table=runner.getTable(tableName); Scan dataScan=new Scan(); ResultScanner dataScanner=null; List<Filter> dataFilters = new ArrayList<Filter>(); if(StringUtils.isNotBlank(dto.getBatteryNo())){//电池组编号过滤 Filter filter=new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(dto.getBatteryNo()+"_")); dataFilters.add(filter); } Filter pageFilter=new PageFilter(dto.getPage()+dto.getPageSize()); dataFilters.add(pageFilter); FilterList dataFilterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, dataFilters); dataScan.setFilter(dataFilterList); dataScanner=table.getScanner(dataScan); dataList= rsh.handle(tableName,dataScanner); if(dataList==null || dataList.size()<1){ dataPage.setTotalCount(0); dataPage.setResult(null); return dataPage; } int startNo = dto.getPage(); int endNo=startNo+dto.getPageSize(); dataPage.setTotalCount(dto.getPage()+dto.getPageSize()+1); dataPage.setResult(dataList.subList(startNo,endNo)); table.close(); return dataPage;}
因为用户关注的,通常是前几页的数据,所有我每次查询的时候,返回总页数,都返回个随便的数(跟前端的分页表格配合,实际上,我的前端只提供了上下分页,哈哈),然后查询有限条的数据,通常hbase表都是上亿甚至是百亿的,所以,用户时不太可能通过只点击上一页下一页,这样点到我最后一页的,可以放心了。最多他点个几千页,也就手疼到不行了。这样下来,响应速度控制在800ms内,无压力。
PS,看到很多网友通过rowkey去做分页,具体思路是,每次记录下起始的rowkey和结束的rowkey,然后根据rowkey搜索,这样也是很快的,个人认为,也ok。
阅读全文
0 0
- HBase伪快速分页查询
- hbase分页查询
- hbase实现分页查询
- hbase实现分页查询
- hbase分页查询
- hbase分页查询思路
- HBase快速查询原理
- HBase学习之二: hbase分页查询
- Hbase建表,查询(带分页)
- Hbase分页查询代码实现
- 为什么HBase数据查询快速
- 搜索,查询,伪静态分页,采集,展示
- SQL-借助伪列实现分页查询
- HBase分页查询性能测试ppt分享
- SQL on HBase -- phoenix 之分页查询
- Hbase 分布查询 - 应用后台程序控制分页
- Hbase查询结果分页(PageFilter)
- SQL on HBase -- phoenix 之分页查询
- HBase计算表的总count
- 面试总结
- SVN使用笔记
- 基础_输入输出的函数原型、(格式控制符)
- 命名空间,输入输出流,为什么支持重载,缺省,指针与引用
- HBase伪快速分页查询
- node.js的http模块
- 视图
- java反射
- SAP前端——使用SAPUI5来创建Web应用UI
- Maven中的dependencyManagement 意义
- 关于 类hashSet<E> hashSet 遍历 hashSet<String>和hashSet<Person>
- 自定义的CSDN样式
- 动态网页