Hbase scan 速度如何提升
现有一list,里面放的是20位的string ,要求查询rowkey是以list中的id为前缀的所有数据。
我的代码如下
Table table = hbaseConnection.getTable(TableName.valueOf(BigDataConstant.HBASE_YHPH_TABLE_NAME));
Scan scan = new Scan();
ResultScanner resultScanner;
String column;
String columnChild;
String columnValue;
String value;
List<Filter> filterlist = new ArrayList<>();
for (String id : idList) {
filterlist.add(new PrefixFilter(id.getBytes()));
}
Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ALL, filterlist);
// 模糊匹配 rowkey
scan.setFilter(filter);
scan.setCaching(500);
// scan.addFamily(HbaseColumnEnum.EMR_DATA.getName().getBytes());
// scan.addFamily(HbaseColumnEnum.LAB_REPORT.getName().getBytes());
scan.addColumn("a".getBytes(),"aa".getBytes());
scan.addColumn("b".getBytes(),"bb".getBytes());
scan.setBatch(2);
scan.setCacheBlocks(false);
LOGGER.debug("Start:[getScanner] ");
resultScanner = table.getScanner(scan);
LOGGER.debug("End:[getScanner] ");
LOGGER.debug("Start:[cycle resultScanner] ");
for (Result rs = resultScanner.next(); rs != null; rs=resultScanner.next()) {
for (Cell cell : rs.listCells()) {
//...
}
}
// Result[] rsList = resultScanner.next(1000);
// for (Result rs:rsList)
// {
// //...
// }
resultScanner.close();
table.close();
LOGGER.debug("End:[cycle resultScanner]");
现在查询耗时差不多要10-15秒
查询出来的结构大概在500条,数据库里数据》2000w
1、这要如何优化?
2、PrefixFilter做的是全盘扫描吗?