Ruby pg gem でクラス のパブリック インスタンス メソッドsend_query
をどのように使用しますか?PG::Connection
このようなプログラムの実行時間を高速化するのに役立ちますか?
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 からの出力を処理することになっていますか?