HBase查询

HBase key设置加快查询速度小谈

喜你入骨 提交于 2019-12-04 19:44:17
最近做一个基于HBase 的大日志存储,分析系统。 在key的设置上有一些心得,拿出来大家共享。 我们这个日志系统有个需求,就是根据某个操作找出整个会话的所有操作,按一般的做法就是根据SID(会话Id)字段来扫描全表,返回所有该会话SID的记录。代码如下: Scan scan = new Scan(); FilterList filterList = new FilterList(); filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes("CF"), Bytes.toBytes("SID"), op, Bytes.toBytes("10000000"))); scan.setFilter(filterList); ResultScanner rs = currentTable.getScanner(scan); 由于hbase 是key ,value存储系统,因此对基于V的条件查询都是全表扫描,对于小数据量没问题,但是一旦数据量大到百万,千万级(我们这里是一天就千万级)那就会无法接受,会非常非常非常慢。 。 但是我们知道Key是是顺序排列的,基于key的访问就会非常快。因此我们在设计Key的时候加点小小技巧就可以让你轻松快速查找到相同SID的操作。 具体:KEY = DATETIME +SID+SEQ

HBase–常用过滤器篇

℡╲_俬逩灬. 提交于 2019-11-30 14:02:18
1. 比较过滤器 (1) 比较过滤器的操作符 LESS < LESS_OR_EQUAL <= EQUAL = NOT_EQUAL <> GREATER_OR_EQUAL >= GREATER > NO_OP 排除所有 (2) 常用比较过滤器的比较器 BinaryComparator 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[]) BinaryPrefixComparator 跟前面相同,只是比较左端的数据是否相同 NullComparator 判断给定的是否为空 BitComparator 按位比较 RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非EQUAL SubstringComparator 判断提供的子串是否出现在value中 (3) 比较过滤器的实际应用 3-1) 行键过滤器 RowFilter Filter filter = new RowFilter(CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-22"))); scan.setFilter(filter); Filter filter1 = new RowFilter(CompareOp.EQUAL, new SubstringComparator("-5")