gpt4 book ai didi

ruby - 如何在 Ruby pg gem 中使用 PG::Connection 类的 send_query?

转载 作者:行者123 更新时间:2023-11-29 14:23:40 26 4
gpt4 key购买 nike

如何在Ruby pg gem 中使用PG::Connection 类的公共(public)实例方法send_query

它可以帮助加快这样的程序的执行时间吗?

a = [1,2,3,4,5,6,...,100000]  # elements in no specific order
conn = PG.connect(OMITTED)
conn.transaction do |conn|
a.each do |i]
conn.exec("INSERT INTO numbers VALUES ($1)",[i])
end
end

假设:如果我不等待结果,那么我可以继续向 PostgreSQL 服务器发送查询并尽快完成。

实验:重写版本:

a = [1,2,3,4]
conn = PG.connect(OMITTED)
conn.setnonblocking(true)
conn.transaction do |conn|
a.each do |i]
conn.send_query("INSERT INTO numbers VALUES ($1)",[i])
end
end

结果:运行时间没有差异。

一些补充问题:

  • 我的假设正确吗?
  • 这一定是线程的工作吗?
  • 我应该以某种方式处理 exec 的输出吗?

最佳答案

您是否尝试过将所有 SQL 插入合并为一个?在我的实验中它更快:

require "rubygems"
require "pg"

a = (0...10000).sort_by(&:rand) # elements in no specific order
conn = PG.connect(:dbname => "numbers")
t = Time.now
conn.transaction do |conn|
a.each do |i|
conn.exec("INSERT INTO numbers VALUES ($1)",[i])
end
end
p Time.now - t

t = Time.now
conn.transaction do |conn|
conn.exec(
a.map { |i|
"INSERT INTO numbers VALUES (%d);" % i
}.join("")
)
end
p Time.now - t

#=> 2.658903, 0.572997

关于ruby - 如何在 Ruby pg gem 中使用 PG::Connection 类的 send_query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com