【问题标题】:BigTable data load pattern optimizationBigTable 数据加载模式优化
【发布时间】:2019-11-01 08:11:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: google-cloud-bigtable bigtable


    【解决方案1】:

    正如您所指出的,使用 BulkApply 可以节省网络。在客户端的 cpu 方面也有节省,请求/响应工作更少,并且在 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 和更高的插入吞吐量。

    【讨论】:

    • 您还应该考虑使用 MutationBatcher:github.com/googleapis/google-cloud-cpp/blob/…
    • +1 这符合我的预期。可能会在我的客户端中添加一个“突变累加器”,并每秒至少一次或两次触发所有突变(取决于负载)。但是,我希望得到一个对内部内容有更多见解的答案。已经研究了我可以在互联网上找到的所有关于 BigTable 的文档,但我仍然觉得我不了解“系统”。是的,我知道我可以信任 Google...
    猜你喜欢
    • 2019-01-24
    • 2020-02-01
    • 2018-04-30
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2012-12-31
    相关资源
    最近更新 更多