非常大的 Bigtable table 的最有效 RowScan

Most efficient RowScan of very large Bigtable table

我正在寻找使用最新的 JAVA API 对非常大的 Bigtable 表执行行扫描的最快方法。我只需要根据部分行值进行扫描(不需要 column/column 系列信息)。行值分布良好,Bigtable 的词典排序非常适合此用例。

这些年来,关于这个主题的答案有很多,但其中一些对于旧版本来说已经过时,其中一些似乎是 HBase 特定的,或者 shell 特定的。我特别需要 Cloud Bigtable 和 JAVA API.

的最新版本

目前,根据我自己的测试,我认为这是最好的方法:

Scan s = new Scan();
s.setStartRow(startRowKey); // this can also be passed to constructor
s.setStopRow(stopRowKey); // this can also be passed to constructor
s.setRowPrefixFilter(key.getBytes());
s.setFilter(new PageFilter(MaxResult));
s.setFilter(new KeyOnlyFilter());

但我的问题是:

1:有什么我不知道应该做的事情来提高速度吗?

2:有没有比PageFilter()更好的方法来限制结果? IE。我怎么说 "return max 25 rows"

3:scan.setFilter(new PrefixFilter(rowKey))scan.setRowPrefixFilter(rowKey)有什么区别

4:扫描参数放startRow的好处很清楚,但是放[=16有什么好处(或坏处)吗=] 参数也是如此?特别是如果您提供 PageSize() 或其他限制措施

感谢任何反馈!

您的过滤器似乎相互干扰(KeyOnlyFilter 将覆盖 PageFilter,您应该将它们包装在 MUST_PASS_ALL FilterList.

  1. 除了我上面提到的错误,我想不出任何其他优化。
  2. 我不相信 HBase API 提供了另一种指定行限制的方法。
  3. 你的情况不多。使用 PrefilterFilter 的主要原因是能够将它与 FilterList.
  4. 中的其他过滤器链接在一起
  5. 加一个endRow肯定没有坏处,但同时我觉得也没有太大的收获。