我正在使用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)
我的问题是如何提高从行对象读取实际内容的速度(特别是在遍历行时)?
答案 0 :(得分:0)
此性能与您在桌面上进行单次扫描所能达到的效果相同。 FWIW,已经完成了缓存,Cloud Bigtable客户端忽略了HBase Scan对象的设置。
如果要加快性能,则必须在并行扫描中读取该表。您可以从RegionLocator获得有关密钥空间的一些提示。您可以通过调用Bytes.split()进一步拆分每个地区的范围。一旦有了这些范围,就可以构建并行读取。