[Author]: kwu

hbase实现分页查询,实现按时间查询最新的15条,hbase的查询主要是通过rowkey来进行的,保证查询的高效。column的filter查询效率较低。

1、rowkey的设计

以时间的倒序进行查询,如20150818_152130来看,设计rowkey

20150818的hash64值+(999999-152130)。

1)MurmurHash的64的冲突非常小,并实现rowkey的散列。

2)日分秒与999999的差值,可以实现逆序

2、插入数据的操作

String[] splited = jsData.split("`");SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
String format = sdf.format(date);String dateday = format.substring(0, 8);
String datehour = format.substring(8, 10);
String dateMin = format.substring(10, 12);
String dateSec = format.substring(12, 14);int datehourSub = 99 - new Integer(datehour);
int dateMinSub = 99 - new Integer(dateMin);
int dateSecSub = 99 - new Integer(dateSec);String dateHash = MurmurHash.hash64(dateday) + "_" + datehourSub  + dateMinSub  + dateSecSub;Put put = new Put((dateHash + "_" + splited[0]).getBytes());
put.add("cf1".getBytes(), "bdcCookieId".getBytes(), splited[0].getBytes());
put.add("cf1".getBytes(), "pcScreenRatio".getBytes(), splited[1].getBytes());
put.add("cf1".getBytes(), "objClassName".getBytes(), splited[2].getBytes());
put.add("cf1".getBytes(), "pageOpenTime".getBytes(), splited[3].getBytes());
put.add("cf1".getBytes(), "pageLoadCompleteTime".getBytes(), splited[4].getBytes());
put.add("cf1".getBytes(), "pageCloseTime".getBytes(), splited[5].getBytes());
put.add("cf1".getBytes(), "category".getBytes(), splited[6].getBytes());
put.add("cf1".getBytes(), "browserVersion".getBytes(), splited[7].getBytes());
put.add("cf1".getBytes(), "currentURL".getBytes(), splited[8].getBytes());
put.add("cf1".getBytes(), "targetParentURL".getBytes(), splited[9].getBytes());
put.add("cf1".getBytes(), "referrer".getBytes(), splited[10].getBytes());
put.add("cf1".getBytes(), "clickX".getBytes(), splited[11].getBytes());
put.add("cf1".getBytes(), "clickY".getBytes(), splited[12].getBytes());
put.add("cf1".getBytes(), "targetURL".getBytes(), splited[13].getBytes());
put.add("cf1".getBytes(), "objID".getBytes(), splited[14].getBytes());
put.add("cf1".getBytes(), "objName".getBytes(), splited[15].getBytes());
put.add("cf1".getBytes(), "objValue".getBytes(), objValue.getBytes());
put.add("cf1".getBytes(), "siteCookieId".getBytes(), splited[17].getBytes());
put.add("cf1".getBytes(), "scrollValue".getBytes(), splited[18].getBytes());
put.add("cf1".getBytes(), "sessionId".getBytes(), splited[19].getBytes());
put.add("cf1".getBytes(), "ip".getBytes(), splited[20].getBytes());
put.add("cf1".getBytes(), "macAdress".getBytes(), splited[21].getBytes());
put.add("cf1".getBytes(), "gaId".getBytes(), splited[22].getBytes());
put.add("cf1".getBytes(), "baiduId".getBytes(), splited[23].getBytes());
put.add("cf1".getBytes(), "activeTime".getBytes(), splited[24].getBytes());
put.add("cf1".getBytes(), "status".getBytes(), splited[25].getBytes());
put.add("cf1".getBytes(), "triggertime".getBytes(), splited[26].getBytes());List<Put> list = new ArrayList<Put>();
list.add(put);HTable table = new HTable(configuration, "jsActionPage");
table.put(list);table.close();

3、查询 利用scan 时间倒序

HTable table = new HTable(configuration, "jsActionPage");
Scan scan = new Scan();
scan.setStartRow(startRow.getBytes());
scan.setStopRow(stopRow.getBytes());JSONObject resultJson = new JSONObject();JSONObject temp = null;
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {JSONArray jsonArray = new JSONArray();String rowkey = "";for (KeyValue keyValue : result.raw()) {byte[] row = keyValue.getRow();rowkey = new String(row);String qualifier = new String(keyValue.getQualifier());String value = new String(keyValue.getValue());temp = new JSONObject();temp.put(qualifier, value);jsonArray.add(temp);}resultJson.put(rowkey, jsonArray);
}table.close();

最后返回json的数据格式

hbase实现分页查询相关推荐

  1. Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash

    准备工作 1.创建Java的Maven项目 创建好的目录结构如下: 另外注意junit的版本,最好不要太高,最开始笔者使用的junit4.12的,发现运行的时候会报错.最后把Junit的版本改成4.7 ...

  2. 记录一次HBase的scan的分页查询

    修改前任bug,Hbase查询过于慢了,以至于都查不出来了,看了代码发现使用的Scan只设置了withStartRow.withEndRow.setCaching扫描,拿到全部数据后存入集合再subL ...

  3. hbase分页查询实现

    Hbase本身是没有分页查询的,我在网上找了很多资料来实现一个分页功能,在这里做了一下记录,分享给大家,有什么不足之处,请尽管指出.废话不多说,看代码. import java.io.IOExcept ...

  4. HBase分页查询API

    使用API对Hbase的存储的数据进行分页显示: 实现思路:把pageIndex转换成startRow.让每一页的最后一个rowkey往后挪动一点位置,但是又不会是下一页的startRow. 主程序代 ...

  5. Hbase的过滤器查询

    hbase过滤器的比较运算符: LESS < LESS_OR_EQUAL <= EQUAL = NOT_EQUAL <> GREATER_OR_EQUAL >= GREA ...

  6. 基于Solr的HBase多条件查询测试

    背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase ...

  7. es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能

    问题:如果数据量特别大,如何优化ES的查询性能? 可以从以下几个方面进行思考: File Cache可用的内存: ES的查询严重依赖OS的File Cache,所以说内存分配的内存肯定是越多越好.最理 ...

  8. [JAVA EE] JPA 查询用法:自定义查询,分页查询

    项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...

  9. jpa分页查询_spring data jpa 居然提供了这么多查询方式!

    spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...

最新文章

  1. 继承中多态的灵活使用及其分析图 第一个程序的升级版
  2. Micropython TPYBoard v102 自动浇花实验
  3. apache tomcat下32还是64_JDK和Tomcat安装和配置的图文教程
  4. [摘抄]一些软件设计的原则
  5. java编写单词数_JAVA flink小试——单词计数
  6. c语言 cstring “+”: 运算符不起任何作用;应输入带副作用的运算符_国家计算机二级考试C语言选择题高频考点汇总,干货满满...
  7. 爬出数据标注陷阱,半监督学习模型暗藏多少玄机?
  8. c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
  9. Alpine Linux:如何配置GUI的图形桌面环境:x Desktop Environment
  10. Sql 正确删除用户过期的数据
  11. Linux备份数据 结果为0 原因:mysqldump command not found
  12. python访问服务器注册表,使用Python的Windows注册表访问(Winreg)
  13. 小程序模仿通讯录制作
  14. echarts地图显示问题
  15. SSM+垃圾分类小助手 毕业设计-附源码191356
  16. 随滚动条移动的QQ在线客服代码
  17. 游戏版Linux :Ubuntu GamePack
  18. “互联网“各职位的简称
  19. mysql给所有表添加字段
  20. 你今天真好看中文扫描版

热门文章

  1. DA转换器是什么?快来一起学习一下吧
  2. office 2003/2007/2010卸载干净 注册表强力清理
  3. java8新特性lambda表达式概述
  4. leetcode 1523. 在区间范围内统计奇数数目
  5. 用tf.one_hot函数写任一坐标为1的二维张量
  6. 软件著作权登记申请分公司可以作为著作权人申请软件著作权登记证书吗??怎么申请呢?需要提供资料?
  7. Linux课程报告总结
  8. web前端开发做项目,前端开发学习教程
  9. 机箱前置音频插口没声音的解决
  10. 解决IE自动关闭故障一例(转)