【发布时间】:2016-04-27 21:48:04
【问题描述】:
我们已经设置了 5 个节点的 Bigtable 集群,GCP 控制台声明它应该支持 50K QPS @ 6ms 的读写。
我们正在尝试加载一个包含约 50 个字段的大型数据集(约 8 亿条记录),其中主要包含数字数据和一些短字符串。键是 11 位数字字符串。
当通过 HBase API 从 GCE 中的单个客户端 VM 加载此数据集时,我们观察到在将每个字段放入单独的列时高达 4K QPS。我们使用单个 HBase 连接和多个线程 (5-30) 批量放置 10K 记录。
当将所有字段组合成一列(Avro 编码,每条记录约 250 字节)时,使用批量 put 的写入性能提高到 10K QPS。并发线程数似乎不会影响 QPS。当每个线程使用单独的 HBase 连接时,写入性能提高到 5 个线程的 20K QPS。
客户端 VM 与 Bigtable 集群位于同一可用区,并且在负载期间几乎保持空闲状态,因此看起来瓶颈不在客户端。
问题:
- 根据我们的测试,写入 QPS 似乎随着插入的列数而降低。这是预期的吗?如何量化这种关系? (顺便说一句,如果Bigtable performance documentation 中提到了这一点,那就太好了。
- 为了实现声明的写入 QPS,我们可能缺少什么?我的理解是每个集群节点都应该支持 10K 写入 QPS,但是我们似乎要针对具有单个 HBase 连接的单个节点,并且仅针对具有多个 HBase 连接的 2 个节点。
【问题讨论】: