Google Cloud Bigtable / HBase结果可重复使用

时间:2017-11-06 06:39:26

标签: google-cloud-bigtable

我正在使用Google Cloud Bigtable使用Java HBase API客户端测试具有10M行的表的性能。 对于以下命令,性能相对较快

Scan scan = new Scan()
ResultScanner scanner = table.getScanner(scan);

(1e-3,或1e-2秒范围)

但是,当我使用foreach循环从iterable中获取行的内容时:

for (Result row : scanner) {
    byte[] valueBytes = row.getRow();

(以上命令是通用的,因为我非常确定我使用了正确的rowkey过滤方法,以及区域/平板电脑的计算)

row.getRow()/ row.getValue()超快

但是,遍历ResultScanner的速度非常慢(例如> 30秒)

我一直在阅读文档中说使用setCaching()应该有助于加快速度,但是根据Google Cloud Bigtable文档,setCaching()没有实现。 从文档中可以看出:

忽略

org.apache.hadoop.hbase.client.Scan #setCaching(int caching)

我的问题是如何提高从行对象读取实际内容的速度(特别是在遍历行时)?

1 个答案:

答案 0 :(得分:0)

此性能与您在桌​​面上进行单次扫描所能达到的效果相同。 FWIW,已经完​​成了缓存,Cloud Bigtable客户端忽略了HBase Scan对象的设置。

如果要加快性能,则必须在并行扫描中读取该表。您可以从RegionLocator获得有关密钥空间的一些提示。您可以通过调用Bytes.split()进一步拆分每个地区的范围。一旦有了这些范围,就可以构建并行读取。