我会问HBase使用Table.get(List<Get> gets)
使用给定的gets列表执行批处理get时,它将使用rowkey作为每个get的索引吗?也就是说,它的速度与单个Get一样快。
我之所以这么问,是因为我考虑到了“扫描和过滤”,使用过滤器进行扫描但不使用startKey / endKey将扫描整个表。
答案 0 :(得分:1)
Scan
如果没有startRow
/ endRow
,即使使用过滤器,也确实会扫描整个表。如果您至少知道startRow
,则可以避免扫描表的其余部分,例如,通过设置数字行限制(这样它将确切知道从何处开始以及最多可以处理多少行)。但是,如果您不知道startRow
,那就不好了。重要的是,请记住这里不需要整个startRow
键。您可以做部分。例如,如果行键是GUID,则将startRow设置为'FF'时,它将跳过所有内容,并以'FF001 ...'开头。
通常,扫描更适合于获得一系列行。 Get<list>
似乎更适用于不相关/不连续的行的集合。
***更新:糟糕...
default Result[] get(List<Get> gets) throws IOException {
throw new NotImplementedException("Add an implementation!");
}
我以前从未使用过它,但这就是2.0版本的样子。
如果确实需要一次获取不连续的行的集合,在这种情况下,建议您将MultiRowRangeFilter
与Scan
一起使用。写出来有点麻烦,但我记得当我尝试使用它时效果很好。