Hbase正则查询效率提升100倍

star2017 1年前 ⋅ 524 阅读

发现问题

最近项目中接入了hbase,在做性能测试的时候,发现查询数据有问题,数据一直没有,然后去看日志,发现是查询hbase的时候超时了,导致数据查询失败。其中hbase的数据量大概在780万左右,批量查询500条,耗时大约在20s左右。

分析原因

代码是这样写的

//创建一个过滤器容器,并设置其关系(AND/OR)
FilterList fl = new FilterList(FilterList.Operator.MUST_PASS_ALL);
//正则比较器(GREATER_OR_EQUAL和EQUAL对正则比较器一样)
RegexStringComparator sc = new RegexStringComparator(regex);
//过滤器1 行过滤器,正则匹配行数
RowFilter rf = new RowFilter(CompareFilter.CompareOp.EQUAL, sc);
//过滤器2 分页过滤器,过滤获取的条数
Filter pageFilter = new PageFilter(pageSize);
//过滤器3 行过滤器,定位查询开始的节点,(注意此处比较器是GREATER,不包括起始节点rowkey)
Filter rowFilter = new RowFilter(CompareFilter.CompareOp.GREATER,
                    new BinaryComparator(Bytes.toBytes(startRowKey)));
Scan scan = new Scan();
scan.setStartRow(startRowKey.getBytes());
scan.setStopRow(endRowKey.getBytes());
fl.addFilter(pageFilter);
fl.addFilter(rf);
fl.addFilter(rowFilter);

这里用到了正则去查询,正则的表达式是:.*_%s

解决问题

怀疑是不是这个正则查询的效率太低了,进行了一定的优化,变为:20.*_%s

因为我们的rowkey都是20开头的,所有正则直接指定,查询速度直接降到200ms。

正则表达式的效率也是有很大差别的,如果能精确的一定要精确查询,这个查询速度不是一个档次的。

也可以关注我的公众号:程序之声
图片
关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: