[hbase]使用HBase的Java API查询HBase(2)
2015-12-18 16:28
344 查看
HBase数据库,数据量 613,428,000条
HBase表结构,为一表,一列族,一列,一值
表名dnslog,columnfamily为info,列为c1,value.
rowkey组成:账号+”_”+时间
大牛笔记
获取zywy这个账号,在2014-11-11 10:10:10秒 到 2014-12-11 10:10:10秒之间,最后发送的那条数据的内容。
执行速度上,在一秒内完成。如果要返回多个结果,需要将keyvalue的for循环,放到result的for循环内(执行时间,10秒左右)。
在速度上,还是可以接受的。这么快的原因主要在rowkey设计方面,设计的合理性会影响查询时速度。
ResultScanner,扫描表,获取最终结果。
下面就是定义一些filter的使用。
PrefixFilter,前缀的筛选,也就是筛选rowkey中,最前面字符为zywy的记录。
RowFilter,也是根据rowkey筛选定义记录的范围 minRowKey 和 maxRowKey之间的数据。
PageFilter,这里的pageFilter没用到,这个也是很好的一个类。分页时使用。
scan.setMaxVersions();选择最新版本的数据
scan.setStartRow(minRowKey.getBytes()) 和scan.setStopRow(maxRowKey.getBytes()) 就是设置rowkey的范围了。
Result lastR = null; 定义一个变量,用来存储最后一条记录。
HBase的RowKey是自动排好序的。rowkey是按照ascii码进行排序的。所以最先扫描到的,是最老的数据。但是需求要求返回最新的一条记录。
这里如果向MySql等关系型数据库那样,来一个order by rowkey desc 换个顺序就爽了。可惜HBase没有。官网说明
我所使用的HBase版本为hbase-0.94.18.tar.gz算是比较老的版本了。
由于没有排序的功能,所以只能是从前往后循环一遍,将最后的变量,存到lastR中。
如果要是支持orderby操作,那么我可以加上pagefilter
这样直接返回的就是最新的一条。
其实,在hbase-0.98+就支持了这个顺序反转的功能,通过添加如下代码,就可以实现了。官网说明
HBase表结构,为一表,一列族,一列,一值
表名dnslog,columnfamily为info,列为c1,value.
rowkey组成:账号+”_”+时间
大牛笔记
需求:
获取zywy这个账号,在2014-11-11 10:10:10秒 到 2014-12-11 10:10:10秒之间,最后发送的那条数据的内容。
先看代码:
结果:
执行速度上,在一秒内完成。如果要返回多个结果,需要将keyvalue的for循环,放到result的for循环内(执行时间,10秒左右)。在速度上,还是可以接受的。这么快的原因主要在rowkey设计方面,设计的合理性会影响查询时速度。
解释:
ResultScanner,扫描表,获取最终结果。下面就是定义一些filter的使用。
PrefixFilter,前缀的筛选,也就是筛选rowkey中,最前面字符为zywy的记录。
RowFilter,也是根据rowkey筛选定义记录的范围 minRowKey 和 maxRowKey之间的数据。
PageFilter,这里的pageFilter没用到,这个也是很好的一个类。分页时使用。
scan.setMaxVersions();选择最新版本的数据
scan.setStartRow(minRowKey.getBytes()) 和scan.setStopRow(maxRowKey.getBytes()) 就是设置rowkey的范围了。
Result lastR = null; 定义一个变量,用来存储最后一条记录。
HBase的RowKey是自动排好序的。rowkey是按照ascii码进行排序的。所以最先扫描到的,是最老的数据。但是需求要求返回最新的一条记录。
这里如果向MySql等关系型数据库那样,来一个order by rowkey desc 换个顺序就爽了。可惜HBase没有。官网说明
由于没有排序的功能,所以只能是从前往后循环一遍,将最后的变量,存到lastR中。
如果要是支持orderby操作,那么我可以加上pagefilter
其实,在hbase-0.98+就支持了这个顺序反转的功能,通过添加如下代码,就可以实现了。官网说明
相关文章推荐
- java提高篇(一)-----理解java的三大特性之封装
- Spring mvc中的登录界面
- 数据类型
- myEclipse运行很慢的原因
- Java中判断数字的奇偶性
- Java多线程编程介绍
- 如何将Android源码导入Eclipse中来查看(非常实用)
- java线程之多个生产者消费者
- Mybatis3源码分析(06)-加载Configuration-缓存配置加载
- Struts问题: IllegalArgumentException occurred while calling setter of com.zzuli.
- eclipse删除svn下载的文件后如何恢复
- nested exception is javax.validation.ValidationException错误解决思路
- java设计模式之工厂模式
- Eclipse快捷键 10个最有用的快捷键
- 学了Java 你未必知道这些
- Java:按值传递还是按引用传递详细解说
- 使用axis创建调用 wsdl 形式的 webservice的方法
- javaEE缓存error保存
- java web 基础
- java对象的强引用,软引用,弱引用和虚引用