BigTable 数据加载模式优化

BigTable data load pattern optimization

我正在将数据加载到一个 BigTable 集群(目前是一个开发人员实例)。我正在使用 c++ 客户端放置数据,我看到两种不同的加载模式:

  1. 使用 Table class
  2. 的 Apply 方法一次发出一个单行突变
  3. 使用 Table class
  4. 的 BulkApply 方法一次发出多个突变

我希望#2 更有效率,至少在网络使用方面,但我不知道 BigTable 方面是否有其他优化可以实现更好的性能(例如更好的压缩,更少的 CPU/IO 压力)与选项 #1 相比。

毫无疑问,问题是:是否值得为 BigTable 客户端增加复杂性以执行批量变更,还是我应该立即触发每个变更而忘记任何其他客户端优化?

正如您所指出的,使用 BulkApply 可以节省网络资源。在客户端 cpu 方面也有节省,减少 request/response 工作,并且在 Bigtable serverm 中,将批量应用到同一行或连续行范围的突变。

这些节省在很大程度上取决于插入数据的分布,增加的复杂性还取决于应用程序的设计方式。 c++ 客户端提供了一个 BulkApply 方法,应该使它变得简单:

https://github.com/googleapis/google-cloud-cpp/blob/master/google/cloud/bigtable/table_bulk_apply_test.cc#L59

对于插入大量数据,Cloud Bigtable 用户发现批量应用是值得的,因为节点 cpu 节省和插入吞吐量更高。