【原创】HBase中查询优化小点
HBase过滤器(fliter)提供了非常强大的特性来帮助用户提高其处理表中数据的效率。用户不仅可以使用HBase中预定义好的过滤器,而且可以实现自定义的过滤器。
在对于HBase集群数据库的查询中即用到了以下几种过滤器:(行键:时间、监测点、车牌号)
(1)根据where中的时间条件限制,使用scan.setStartRow();scan.setStopRow();指定本次查询的起始行键范围;
这种方法的使用比下面同样是对于时间过滤的用法快好多好多,
List<Filter> filters = new ArrayList<Filter>(); //过滤器存放
Filter filter1 = new SingleColumnValueFilter(cfs[0].getNameAsString().getBytes(),
pojo.getRECORDTIME().getBytes(), CompareOp.GREATER_OR_EQUAL,
Bytes.toBytes(stime)); // 当列rTime的值为2012-12-16 00:00:10时进行查询
filters.add(filter1);
Filter filter2 = new SingleColumnValueFilter(cfs[0].getNameAsString().getBytes(),
pojo.getRECORDTIME().getBytes(), CompareOp.LESS_OR_EQUAL,
Bytes.toBytes(etime)); // 当列rTime的值为2012-12-16 00:00:10时进行查询
filters.add(filter2);
(2)用到了SingleColumnValueFilter用于实现对于记录中某一列中的过滤,即用一列的值决定是否一行数据被过滤;
(3)使用scan.addColumn获取结果记录中的某一列;
(4)为了满足使用多个过滤器共同限制返回到客户端的结果,使用FilterList(过滤器列表)实现组合多个过滤器的功能来实现某种效果。
(5)hbase.client.scanner.caching配置项可以设置HBase scanner一次从服务端抓取的数据条数,默认情况下一次一条。通过将其设置成一个合理的值,可以减少scan过程中next()的时间开销。数据管理平台中使用了scan.setCaching(1000),即当结果记录总数少于等于1000时一次返回,大于1000时一次返回1000。