hbase实现分页查询
[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实现分页查询相关推荐
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
准备工作 1.创建Java的Maven项目 创建好的目录结构如下: 另外注意junit的版本,最好不要太高,最开始笔者使用的junit4.12的,发现运行的时候会报错.最后把Junit的版本改成4.7 ...
- 记录一次HBase的scan的分页查询
修改前任bug,Hbase查询过于慢了,以至于都查不出来了,看了代码发现使用的Scan只设置了withStartRow.withEndRow.setCaching扫描,拿到全部数据后存入集合再subL ...
- hbase分页查询实现
Hbase本身是没有分页查询的,我在网上找了很多资料来实现一个分页功能,在这里做了一下记录,分享给大家,有什么不足之处,请尽管指出.废话不多说,看代码. import java.io.IOExcept ...
- HBase分页查询API
使用API对Hbase的存储的数据进行分页显示: 实现思路:把pageIndex转换成startRow.让每一页的最后一个rowkey往后挪动一点位置,但是又不会是下一页的startRow. 主程序代 ...
- Hbase的过滤器查询
hbase过滤器的比较运算符: LESS < LESS_OR_EQUAL <= EQUAL = NOT_EQUAL <> GREATER_OR_EQUAL >= GREA ...
- 基于Solr的HBase多条件查询测试
背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase ...
- es分页查询重复数据_ES优化 - 巨量数据如何提高查询性能
问题:如果数据量特别大,如何优化ES的查询性能? 可以从以下几个方面进行思考: File Cache可用的内存: ES的查询严重依赖OS的File Cache,所以说内存分配的内存肯定是越多越好.最理 ...
- [JAVA EE] JPA 查询用法:自定义查询,分页查询
项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...
- jpa分页查询_spring data jpa 居然提供了这么多查询方式!
spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...
最新文章
- 继承中多态的灵活使用及其分析图 第一个程序的升级版
- Micropython TPYBoard v102 自动浇花实验
- apache tomcat下32还是64_JDK和Tomcat安装和配置的图文教程
- [摘抄]一些软件设计的原则
- java编写单词数_JAVA flink小试——单词计数
- c语言 cstring “+”: 运算符不起任何作用;应输入带副作用的运算符_国家计算机二级考试C语言选择题高频考点汇总,干货满满...
- 爬出数据标注陷阱,半监督学习模型暗藏多少玄机?
- c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
- Alpine Linux:如何配置GUI的图形桌面环境:x Desktop Environment
- Sql 正确删除用户过期的数据
- Linux备份数据 结果为0 原因:mysqldump command not found
- python访问服务器注册表,使用Python的Windows注册表访问(Winreg)
- 小程序模仿通讯录制作
- echarts地图显示问题
- SSM+垃圾分类小助手 毕业设计-附源码191356
- 随滚动条移动的QQ在线客服代码
- 游戏版Linux :Ubuntu GamePack
- “互联网“各职位的简称
- mysql给所有表添加字段
- 你今天真好看中文扫描版