我遇到了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) }
答案 0 :(得分:0)
您遇到的性能问题不是由ruby本身引起的,而仅仅是扳手的工作原理,
您在每次提交中提交每一行,这将需要很长时间 尝试以每500行为一个包的方式这样做,它将大大加快速度
并注意突变,通常您的程序需要计算它,否则 库将引发您达到上限的异常
我最近测试了像您一样将100mb /(11万行)csv文件加载到扳手中,这需要1h30min
当我重写代码以每3分钟提交一次500行结束加载时。
(阅读有关突变的信息,在我的情况下可以500行,在您的情况下可以不同)
该公式似乎是合法的:https://github.com/googleapis/google-cloud-go/issues/1721#issuecomment-572273387