【发布时间】:2017-09-01 21:35:42
【问题描述】:
我发现了用于 Ruby 的 google-cloud-spanner gem。
使用session.commit { |c| c.insert(table, row) },我可以轻松插入 Cloud Spanner。
但是,通过这种方式(来自同一区域的计算实例),我每秒不能超过 ~200 次插入。
为了提高性能,我必须将一个行数组传递给插入方法:c.insert(table, [row, row, row,...])。
为什么 Cloud Spanner 会以这种方式工作?这可能是由于网络开销造成的吗?
在我的应用程序层上将多条记录一起插入并不总是可行的。
编辑:
显示创建 spanner 客户端等的完整示例:
spanner = Google::Cloud::Spanner.new(project: ..., keyfile: ...)
session = spanner.client(instance, database)
# Insert:
session.commit { |c| c.insert(table, row) }
【问题讨论】:
-
您能否使用更多代码更新您的问题,以显示您正在做什么以每分钟仅获得约 200 次插入?什么类型的对象是会话?我们通常会看到更高的性能。
-
您是否为每个插入创建一个新的扳手客户端对象?或者您是否在一分钟内对所有 200 次插入使用相同的扳手客户端对象?
-
嗨,首先每分钟 ~200 次插入是一个错字,我的意思是每秒 ~200 次插入。不过,我认为它有点慢。当我将一个行数组传递给插入方法时,我每秒可以实现数千条记录。我更新了我的帖子,展示了我如何创建扳手并连接到数据库。我没有为每个插入创建一个新的扳手客户端,但我为每个插入做一个
session.commit { ... } -
每秒 200 笔交易绝对比一分钟 200 笔要好! :) 您是否尝试过调整最大会话池大小以查看这是否有助于提高吞吐量? googlecloudplatform.github.io/google-cloud-ruby/#/docs/…你在用线程吗?
标签: ruby google-cloud-platform google-cloud-spanner