google-cloud-bigtable - 实现声明的 Cloud Bigtable 写入 QPS

标签 google-cloud-bigtable

我们已经设置了具有 5 个节点的 Bigtable 集群,GCP 控制台指出它应该支持 50K QPS @ 6ms 的读取和写入。

我们正在尝试加载一个大型数据集(约 8 亿条记录),其中约 50 个字段主要包含数字数据和一些短字符串。键是 11 位数字字符串。

当通过 HBase API 从 GCE 中的单个客户端虚拟机加载此数据集时,将每个字段放入单独的列时,我们观察到高达 4K QPS。我们使用单个 HBase 连接和多个线程(5-30)执行 10K 记录的批量放入。

将所有字段合并到单个列中(Avro 编码,每条记录约 250 字节)时,批量放入的写入性能可提高至 10K QPS。并发线程数似乎不影响QPS。当每个线程使用单独的 HBase 连接时,5 个线程的写入性能可提高至 20K QPS。

客户端虚拟机与 Bigtable 集群位于同一可用区,并且在负载期间几乎保持空闲状态,因此看起来瓶颈并不在客户端。

问题:

  1. 根据我们的测试,写入 QPS 会随着插入列数的增加而降低。这是预期的吗?如何量化这种关系? (顺便说一句,如果 Bigtable performance documentation 中提到了这一点,那就太好了)。
  2. 为了实现声明的写入 QPS,我们可能会缺少什么?我的理解是每个集群节点应该支持 10K 写入 QPS,但是看起来我们正在针对具有单个 HBase 连接的单个节点,并且仅针对具有多个 HBase 连接的 2 个节点。

最佳答案

使用 OpenSSL 和 Java8 的 0.2.3-SNAPSHOT 中的

BufferedMutator 在 4 CPU 计算机上为小 (1KB) 突变提供 22-23K QPS,在 32 CPU 计算机上提供高达 90K QPS。 0.2.2 提供了 10K-12K QPS。打开单个 HBase 连接以获得最佳性能。

注释 - 删除了有关 OpenSSL 的注释,因为它现在是默认值

参见https://github.com/GoogleCloudPlatform/cloud-bigtable-client了解更多信息。

关于google-cloud-bigtable - 实现声明的 Cloud Bigtable 写入 QPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34927309/

相关文章:

go - 如何处理每小时 Bigtable 连接关闭?

google-cloud-dataflow - 从 Dataflow 管道中间读取 Bigtable 数据

apache-spark - 如何在 PySpark 应用程序中读取和写入 Google Cloud Bigtable 中的数据?

google-cloud-dataflow - 使用 Dataflow 的 Bigtable 批量加载太慢

google-cloud-dataflow - 为什么 Dataflow-BigTable 连接器不支持增量?

python - 谷歌云平台: Pub/Sub to Bigtable

django - 如何扩展聊天应用程序数据库?

java - 在 Apache Beam 中将运行时参数与 BigtableIO 结合使用

csv - 从 Google Cloud Bigtable 到 AWS EMR (HBase)