我们已经设置了 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 性能文档中提到了这一点,那就太好了)。
- 为了实现声明的写入 QPS,我们可能缺少什么?我的理解是每个集群节点都应该支持 10K 写入 QPS,但是似乎我们要针对具有单个 HBase 连接的单个节点,并且仅针对具有多个 HBase 连接的 2 个节点。