如何提高HBase中的RowFilter性能?

时间:2017-03-21 14:00:33

标签: hbase rowfilter

就我而言,我使用rowfilter搜索HBase中的某些rowkeys。我想做模糊查询,所以我使用scan和rowfilter而不是使用'Get'。但是,例如,当我在HBase中存储了一千万个rowkeys时,扫描结果需要很长时间。那么如何才能提高rowfilter查询的性能呢?

try {

    for (String uid : uidsArr) {

        Scan scan = new Scan();
        Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(uid));
        scan.setFilter(filter1);
        scan.setMaxVersions(versions);


        ResultScanner scanner1 = table.getScanner(scan);
        Cell[] cells;
        for (Result res : scanner1) {
            cells = res.rawCells();
            list.addAll(getHBaseTableDataListFromCells(cells));

        }
    }

    return list;

} catch (Exception e) {
    e.printStackTrace();
}

2 个答案:

答案 0 :(得分:0)

要改进扫描,您必须指定开始/结束行键。否则,您的扫描必须考虑表中的所有键。这就是为什么需要花费很多时间的原因。

 new Scan().withStartRow(startRow).withStopRow(stopRow)

例如,如果要按值搜索,最好将其放在行键的开头。所以,搜索字符串应该是PREFIX。但是,它可能会导致热区问题。其他解决方案是,有额外的查找表。

答案 1 :(得分:0)

最好使用RowPrefixFilter而不是RowFilter。

val scan = new Scan()
scan.setRowPrefixFilter(yourKey)