如何提高hbase中rowfilter的性能?

eqfvzcg8  于 2021-06-10  发布在  Hbase
关注(0)|答案(2)|浏览(389)

在我的例子中,我使用rowfilter在hbase中搜索某些行键。我想做模糊查询,所以我用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();
}
z9gpfhce

z9gpfhce1#

最好使用rowprefixfilter而不是rowfilter。

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

zsbz8rwp2#

要改进扫描,必须指定开始/结束行键。否则,您的扫描必须查看表中的所有键。所以要花很多时间。

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

例如,如果要按值搜索,最好将其放在行键的开头。所以,搜索字符串应该是前缀。然而,它会引起热点地区的问题。另一个解决方案是增加查找表。

相关问题