我正在寻找使用最新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()
或其他限制措施
感谢您的反馈!
答案 0 :(得分:2)
您的过滤器似乎互相破坏(KeyOnlyFilter
会覆盖PageFilter
,您应该将它们包裹在MUST_PASS_ALL
FilterList
中。
PrefilterFilter
的主要原因是能够将其与FilterList
中的其他过滤器链接在一起。endRow
肯定没有任何缺点,但与此同时,我认为也没有太大的收获。