hbase java 分页查询_HBase伪快速分页查询
之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在mysql里面,后来里面数据上亿之后,就查不到了,而且数据还在以指数级增长方式上报,后来,这部分业务单独迁移到hbase集群去存放,之前页面的查询也改查hbase了。但是hbase对分页查询这种东西支持不好,如果按照以往查询mysql的思路,查询出一个总的count,再查询出这一页的数据,这种方式去查询hbase,那么如果你仔细去跟代码计算时间的话,你会发现hbase去查count,无论哪种方式,都会引起全表扫描,是非常慢的。整个页面加载出来,看了下响应事件,大概要45s,等的我都喝了两杯茶了。
so,我想了个比较伪的分页查询方法,去掉查询count操作,值查询一页数据:
public Page findBatterHisData(BatteryHisDto dto)throws Exception {
Page dataPage=new Page();
List dataList=new ArrayList<>();
int totalSize=0;
Table table=runner.getTable(tableName);
Scan dataScan=new Scan();
ResultScanner dataScanner=null;
List dataFilters = new ArrayList();
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。
hbase java 分页查询_HBase伪快速分页查询相关推荐
- DataGrid基于Access的快速分页法
DataGrid基于Access的快速分页法 撰文/ 黎波 DataGrid是一个功能非常强大的ASP.NET Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数 ...
- mybatis-plus分页查询_SpringBoot + MyBatisPlus 快速入门
Hello,大家好!前面与大家分享了一次如何搭建Java项目脚手架,并且送给大家一个基础项目模板.那今天与大家分享如何使用这个基础项目,也就是快速上手 SpringBoots ➕ MyBatisPlu ...
- java oracle数据库高效分页查询_Oracle学习之分页查询数据
Oracle的分页是不同于MySQL的,今天我们来讨论一下Oracle的分页,首先得知道两个概念 rowid和rownum 什么鬼?有鸟用啊? 我们从字面的英文翻译可以知道rowid是 "行 ...
- 实战 Java 第10天:商品分页查询
实战 Java 第10天:商品分页查询 前言 一.添加pagehelper相关依赖 二.在 ProductService 类中添加接口 三.在 ProductMapper 类中添加接口 四.增加 sq ...
- java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示
目录 1.题目说明 2.实验设计 2.1 表设计 2.2 工程结构 3.运行界面截图与说明 4.小结 附录:源代码 src/main/java src/main/java/bean Goods.jav ...
- java hbase 批量查询数据_HBase根据Rowkey批量查询数据JAVA API(一次查多条,返回多个记录)...
最近在生产中遇到了一个需求,前台给我多个rowkey的List,要在hbase中查询多个记录(返回给前台list).在网上也查了很多,不过自己都不太满意,filter的功能有可能查询结果不是准确值,而 ...
- Java面试必问!mysql分页查询
前言 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深度 ...
- mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...
- springboot controller 分页查询_Spring Boot实战分页查询附近的人: Redis+GeoHash+Lua
您的支持是我不断创作巨大动力 CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) 前言 最近在做社交的业务,用户进入首页后需要查询附近的人: 项目状况:前期尝 ...
- mybatis常用分页插件,快速分页处理
在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程, ...
最新文章
- 想“看见”高性能计算嘛?戳这里开始
- c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)
- 第三方免费开放API 获取用户IP 并查询其地理位置
- [转]说说大型高并发高负载网站的系统架构
- 河南工业大学2017校赛题解
- qdu yzm10与大富翁的故事 (01背包+输出路径)
- python--step-01
- unity 生成和识别二维码
- Unity 灯光及光照烘焙
- mobi格式文件解压实践
- 1000元一根的Type C数据线
- 企业做CMMI认证有什么用?
- 2017年GitHub中最为流行的30个开源机器学习项目
- 『看球笔记』20140217 红军足总杯遭枪手2-1淘汰 ,胜负手在哪?
- 04-20.eri-test GKE(Google K8S Engine)上的Intellij远程调试Java应用程序
- 无懈可击的web设计
- U盘制作成启动盘后容量变小怎么恢复
- OPPO快应用小游戏 分包 静态方法报错is not a function问题解决
- Ubuntu开机自动加载驱动模块
- linux的资源管理器关进程,RHCSA 系列(五): RHEL7 中的进程管理:开机,关机