2017-03-21 60 views
0

對我而言,我使用rowfilter在HBase中搜索某些rowkeys。我想做模糊查詢,所以我使用scan和rowfilter而不是使用'Get'。但是,例如,當我有一千萬行rowkeys存儲在HBase中時,掃描結果需要非常長的時間。那麼如何提高rowfilter查詢的性能呢?如何提高HBase中的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(); 
} 

回答

0

爲了提高掃描速度,你必須指定開始/結束行鍵。否則,您的掃描必須考慮表中的所有鍵。這就是爲什麼它需要很多時間。

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

例如,如果您要按值搜索,最好將它放在行鍵的起始位置。所以,搜索字符串應該是PREFIX。但是,它可能會導致炎熱地區的問題。其他解決方案是有額外的查找表。

0

最好使用RowPrefixFilter而不是RowFilter。

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