HBase中row key用来检索表中的记录,支持以下三种方式:
- 通过单个row key访问:即按照某个row key键值进行get操作;
- 通过row key的range进行scan:即通过设置startRowKey和endRowKey,在这个范围内进行扫描;
- 全表扫描:即直接扫描整张表中所有行记录。
HBase中rowkey是根据字典表顺序排序的
过滤器、比较运算符、比较器
几个过滤器:
开头:new PrefixFilter(Bytes.toBytes(this.pid));
包含:new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(regex));
时间:new TimestampsFilter(ts);
KEY:new KeyOnlyFilter();
随机:new RandomRowFilter((float) 0.8);
。。。
分页:new PageFilter(pageInfo.getPageSize());
过滤器列表:
List<Filter> filterArrayList = new ArrayList<>();
filterArrayList.add(prefixFilter);
filterArrayList.add(rowFilter);
filterArrayList.add(pageFilter);
。。。
FilterList filterList = new FilterList(filterArrayList);
scan.setFilter(filterList);
scan设置timestamp范围
scan.setTimeRange(minStamp, maxStamp);
WAPGW日志入HBase如何设计rowkey,并要满足日志上报和查询的条件,如何性能优化
rowkey=pid=10:mdn=28772910006:srcIp=129.55.16.182:srcPort=22355:destIp=167.211.45.188:destPort=9805:url=11905.comrandom=9394:
这里pid使用PrefixFilter,扫描操作以字典序查找,当遇到比前缀大的行时,扫描操作就结束了。通过与起始行配合使用,过虑器的扫描性能大大提高,原因是当它发现后面的行不符合要求时会全部跳过。