Google BigTable中的并行扫描提供了加速?

时间:2017-10-23 23:39:25

标签: google-cloud-bigtable

我正在尝试优化查询的扫描时间。该查询是一个没有过滤器的简单范围查询。当我运行查询时,通常需要大约10秒来对未加盐的时间序列数据执行扫描(大约180万行,每行包含32个字节值和40个字节键)。

如果我对数据进行加盐,那么我是否期望加速?然后并行运行扫描?

例如,我可以随机附加每行0,1,2,3,4,5。然后我可以有一个大小为6的线程池来并行执行6次单独的扫描。当我目前这样做时,我没有看到任何加速,这导致相信可能在幕后发生的事情会使并行扫描的任何好处无效。

关于此的文档非常少,因此非常感谢任何指导。

1 个答案:

答案 0 :(得分:0)

在检查了我的假设之后,我意识到我使用的VM只有两个VCPU。我将其增加到SALT_RANGE并获得预期的加速。所以基本上,确保CPU的数量可以处理负载。下面是缩写的Java代码(我正在处理我的数据的地图),用于并行运行扫描。

ForkJoinPool myPool = new ForkJoinPool(Config.SALT_RANGE);

results = myPool.submit(() -> 
        IntStream.range(0,Config.SALT_RANGE).parallel().mapToObj(salt -> {
                    Scan scan = buildMyScan();
                    Table t = agent.getTableMain();
                    out = performScan(scan);
                    return  out;
                }).map(Map::entrySet).flatMap(Collection::stream).collect(
                    Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> merger(a, b), TreeMap::new)))
            .get();