BigTable 数据加载模式优化
BigTable data load pattern optimization
我正在将数据加载到一个 BigTable 集群(目前是一个开发人员实例)。我正在使用 c++ 客户端放置数据,我看到两种不同的加载模式:
- 使用 Table class
的 Apply 方法一次发出一个单行突变
- 使用 Table class
的 BulkApply 方法一次发出多个突变
我希望#2 更有效率,至少在网络使用方面,但我不知道 BigTable 方面是否有其他优化可以实现更好的性能(例如更好的压缩,更少的 CPU/IO 压力)与选项 #1 相比。
毫无疑问,问题是:是否值得为 BigTable 客户端增加复杂性以执行批量变更,还是我应该立即触发每个变更而忘记任何其他客户端优化?
正如您所指出的,使用 BulkApply 可以节省网络资源。在客户端 cpu 方面也有节省,减少 request/response 工作,并且在 Bigtable serverm 中,将批量应用到同一行或连续行范围的突变。
这些节省在很大程度上取决于插入数据的分布,增加的复杂性还取决于应用程序的设计方式。 c++ 客户端提供了一个 BulkApply 方法,应该使它变得简单:
对于插入大量数据,Cloud Bigtable 用户发现批量应用是值得的,因为节点 cpu 节省和插入吞吐量更高。
我正在将数据加载到一个 BigTable 集群(目前是一个开发人员实例)。我正在使用 c++ 客户端放置数据,我看到两种不同的加载模式:
- 使用 Table class 的 Apply 方法一次发出一个单行突变
- 使用 Table class 的 BulkApply 方法一次发出多个突变
我希望#2 更有效率,至少在网络使用方面,但我不知道 BigTable 方面是否有其他优化可以实现更好的性能(例如更好的压缩,更少的 CPU/IO 压力)与选项 #1 相比。
毫无疑问,问题是:是否值得为 BigTable 客户端增加复杂性以执行批量变更,还是我应该立即触发每个变更而忘记任何其他客户端优化?
正如您所指出的,使用 BulkApply 可以节省网络资源。在客户端 cpu 方面也有节省,减少 request/response 工作,并且在 Bigtable serverm 中,将批量应用到同一行或连续行范围的突变。
这些节省在很大程度上取决于插入数据的分布,增加的复杂性还取决于应用程序的设计方式。 c++ 客户端提供了一个 BulkApply 方法,应该使它变得简单:
对于插入大量数据,Cloud Bigtable 用户发现批量应用是值得的,因为节点 cpu 节省和插入吞吐量更高。