Table.get(List <Get> gets)的行为

时间:2019-06-12 09:02:24

标签: hbase

我会问HBase使用Table.get(List<Get> gets)使用给定的gets列表执行批处理get时,它将使用rowkey作为每个get的索引吗?也就是说,它的速度与单个Get一样快。

我之所以这么问,是因为我考虑到了“扫描和过滤”,使用过滤器进行扫描但不使用startKey / endKey将扫描整个表。

1 个答案:

答案 0 :(得分:1)

Scan如果没有startRow / endRow,即使使用过滤器,也确实会扫描整个表。如果您至少知道startRow,则可以避免扫描表的其余部分,例如,通过设置数字行限制(这样它将确切知道从何处开始以及最多可以处理多少行)。但是,如果您不知道startRow,那就不好了。重要的是,请记住这里不需要整个startRow键。您可以做部分。例如,如果行键是GUID,则将startRow设置为'FF'时,它将跳过所有内容,并以'FF001 ...'开头。

通常,扫描更适合于获得一系列行。 Get<list>似乎更适用于不相关/不连续的行的集合。

***更新:糟糕...

https://github.com/apache/hbase/blob/branch-2.0/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java

  default Result[] get(List<Get> gets) throws IOException {
    throw new NotImplementedException("Add an implementation!");
  }

我以前从未使用过它,但这就是2.0版本的样子。

如果确实需要一次获取不连续的行的集合,在这种情况下,建议您将MultiRowRangeFilterScan一起使用。写出来有点麻烦,但我记得当我尝试使用它时效果很好。