Ruby:Cloud Spanner插入性能

时间:2017-09-01 21:35:42

标签: ruby google-cloud-platform google-cloud-spanner

我遇到了Ruby的google-cloud-spanner gem。

使用session.commit { |c| c.insert(table, row) }我可以轻松插入Cloud Spanner。

但是,我不能以这种方式每秒超过~200次插入(来自同一区域的计算实例)。 为了提高性能,我必须将一个行数组传递给insert方法:c.insert(table, [row, row, row,...])

为什么Cloud Spanner以这种方式工作?这可能是由于网络开销造成的吗?

在我的应用程序层上插入多个记录并不总是切实可行。

修改

显示创建扳手客户端等的完整示例:

spanner = Google::Cloud::Spanner.new(project: ..., keyfile: ...)
session = spanner.client(instance, database)

# Insert:
session.commit { |c| c.insert(table, row) }

1 个答案:

答案 0 :(得分:0)

您遇到的性能问题不是由ruby本身引起的,而仅仅是扳手的工作原理,

您在每次提交中提交每一行,这将需要很长时间 尝试以每500行为一个包的方式这样做,它将大大加快速度

并注意突变,通常您的程序需要计算它,否则 库将引发您达到上限的异常

我最近测试了像您一样将100mb /(11万行)csv文件加载到扳手中,这需要1h30min

当我重写代码以每3分钟提交一次500行结束加载时。

(阅读有关突变的信息,在我的情况下可以500行,在您的情况下可以不同)

该公式似乎是合法的:https://github.com/googleapis/google-cloud-go/issues/1721#issuecomment-572273387