非常大的Bigtable表

时间:2018-01-04 17:59:25

标签: google-cloud-bigtable

我正在寻找使用最新JAVA API对非常大的Bigtable表执行行扫描的最快方法。我只需要根据部分行值进行扫描(不需要列/列族信息)。行值分布均匀,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()之外,还有更好的方法来限制结果吗?即怎么说“返回最多25行”

3:scan.setFilter(new PrefixFilter(rowKey))scan.setRowPrefixFilter(rowKey)

之间有什么区别

4:为扫描添加startRow参数的优势是非常清晰,但是放置endRow参数也有任何优势(或劣势) ?特别是如果您提供PageSize()或其他限制措施

感谢您的反馈!

1 个答案:

答案 0 :(得分:2)

您的过滤器似乎互相破坏(KeyOnlyFilter会覆盖PageFilter,您应该将它们包裹在MUST_PASS_ALL FilterList中。

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