之前有两个功能,都是查询历史数据的一个分页查询,系统刚上线的时候,没有太多的数据,就一直扔在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伪快速分页查询相关推荐

  1. DataGrid基于Access的快速分页法

    DataGrid基于Access的快速分页法 撰文/ 黎波 DataGrid是一个功能非常强大的ASP.NET Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数 ...

  2. mybatis-plus分页查询_SpringBoot + MyBatisPlus 快速入门

    Hello,大家好!前面与大家分享了一次如何搭建Java项目脚手架,并且送给大家一个基础项目模板.那今天与大家分享如何使用这个基础项目,也就是快速上手 SpringBoots ➕ MyBatisPlu ...

  3. java oracle数据库高效分页查询_Oracle学习之分页查询数据

    Oracle的分页是不同于MySQL的,今天我们来讨论一下Oracle的分页,首先得知道两个概念 rowid和rownum 什么鬼?有鸟用啊? 我们从字面的英文翻译可以知道rowid是 "行 ...

  4. 实战 Java 第10天:商品分页查询

    实战 Java 第10天:商品分页查询 前言 一.添加pagehelper相关依赖 二.在 ProductService 类中添加接口 三.在 ProductMapper 类中添加接口 四.增加 sq ...

  5. java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示

    目录 1.题目说明 2.实验设计 2.1 表设计 2.2 工程结构 3.运行界面截图与说明 4.小结 附录:源代码 src/main/java src/main/java/bean Goods.jav ...

  6. java hbase 批量查询数据_HBase根据Rowkey批量查询数据JAVA API(一次查多条,返回多个记录)...

    最近在生产中遇到了一个需求,前台给我多个rowkey的List,要在hbase中查询多个记录(返回给前台list).在网上也查了很多,不过自己都不太满意,filter的功能有可能查询结果不是准确值,而 ...

  7. Java面试必问!mysql分页查询

    前言 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深度 ...

  8. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...

  9. springboot controller 分页查询_Spring Boot实战分页查询附近的人: Redis+GeoHash+Lua

    您的支持是我不断创作巨大动力 CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) 前言 最近在做社交的业务,用户进入首页后需要查询附近的人: 项目状况:前期尝 ...

  10. mybatis常用分页插件,快速分页处理

    在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程, ...

最新文章

  1. 想“看见”高性能计算嘛?戳这里开始
  2. c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)
  3. 第三方免费开放API 获取用户IP 并查询其地理位置
  4. [转]说说大型高并发高负载网站的系统架构
  5. 河南工业大学2017校赛题解
  6. qdu yzm10与大富翁的故事 (01背包+输出路径)
  7. python--step-01
  8. unity 生成和识别二维码
  9. Unity 灯光及光照烘焙
  10. mobi格式文件解压实践
  11. 1000元一根的Type C数据线
  12. 企业做CMMI认证有什么用?
  13. 2017年GitHub中最为流行的30个开源机器学习项目
  14. 『看球笔记』20140217 红军足总杯遭枪手2-1淘汰 ,胜负手在哪?
  15. 04-20.eri-test GKE(Google K8S Engine)上的Intellij远程调试Java应用程序
  16. 无懈可击的web设计
  17. U盘制作成启动盘后容量变小怎么恢复
  18. OPPO快应用小游戏 分包 静态方法报错is not a function问题解决
  19. Ubuntu开机自动加载驱动模块
  20. linux的资源管理器关进程,RHCSA 系列(五): RHEL7 中的进程管理:开机,关机

热门文章

  1. 寻找节点d=n的节点算法
  2. SENDMAIL引发的血案
  3. grdraw用法 lisp_AutoCAD 2000 Visual LISP开发
  4. python 螺旋数组_奇技淫巧 - Python绘制各种简单优美曲线
  5. git还原历史版本代码
  6. linux命令 选项,不点之Linux命令、选项及文件概念
  7. 午休,要有午休床,也要有毛毯
  8. 我设计的目录结构如此清楚,你为什么也会错
  9. Linux gcc编译时强制链接并依赖一个库(即使未使用)
  10. 液晶显示器模拟接口时,屏幕重影照片