【问题标题】:Google Cloud BigTable Scanning SpeedsGoogle Cloud BigTable 扫描速度
【发布时间】:2018-04-05 15:20:43
【问题描述】:

我正在使用带有 Python 客户端 google-cloud-happybase 包的 Google Cloud Bigtable 开发实例。

出于开发目的: -我的表有 56.5k 行,18 列。

-我的表有 1 个列族

-每个行元素的平均大小为 9.5 字节。

-行键平均约为 35 个字节

-行键是平衡的。

当我在我的表上使用 scan() 函数时,我得到了一个生成器,可用于获取每个行键的内容。每当我从生成器中读取内容时,我都没有时序一致性,例如:

samp = table.scan(columns = ['sample_family:ContactId'])
for i in range(56547):
    start_time = timeit.default_timer()
    samp.next()
    elapsed = timeit.default_timer() - start_time
    append_list.append(elapsed)

-调用next()的中位时间是4.05e-06秒

-调用 next() 的最长时间为 0.404 秒,多次调用至少需要 0.1 秒。

-由于异常值,对生成器中的所有元素调用 next() 的总时间为 2.173 秒,考虑到时间分布,理想情况下需要 (4.05e-06)* 56,547 ~ .229 秒正态分布。

显然有几个异常值会影响性能。

我的问题是为什么我会看到这种类型的性能,因为它与此处找到的指标不一致: https://cloud.google.com/bigtable/docs/performance

我的想法是,由于工作负载明显小于

此外,即使我的 Development 实例使用 1 个节点,大小为 17.1MB,我觉得这应该不是问题。

-我想知道是否有人可以让我了解遇到的问题/问题以及解决这种情况的可能步骤。

【问题讨论】:

    标签: google-cloud-bigtable


    【解决方案1】:

    Cloud Bigtable 的读取 API 是一种流式 API。流中的每个响应都是一组行。有时,您需要等待下一个响应,但大多数时候您会得到已经在内存中的行。以下是一些需要考虑的其他事项

    • 第一个响应总是很慢,因为服务器端正在批量响应。

    • API 按顺序读取行。您可以通过并行化请求来提高性能。在 Java 中,我会让这些区域确定应该为一组扫描使用哪些开始/停止键。不幸的是,Table.region() 目前在 Python 中不可用,所以我 raised a bug 来解决这个问题。

    • 仅供参考,我是 Cloud Bigtable Java 客户端的作者。我添加了一些性能优化来预取额外的响应。我们需要比较 python 客户端的速度和 Java 客户端的速度。如果您对 Java 感到满意,请考虑使用该客户端进行相同的测试以比较性能。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-14
      • 2018-11-03
      • 1970-01-01
      • 2017-04-08
      • 2019-01-26
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多