at posts/single.html

Rails + sqlite3 の落とし穴 (2) - ActiveRecord に大量データインポート

昨日の日記に関連して。 いや、落とし穴じゃなくて僕が無知なだけなんだけど。

元祖 サトシのブログ : SQLite の INSERT は遅いのか?より。

SQLite の処理は トランザクション の中でないと著しく遅い

ということで、 Rails で比較してみた。 1000件のデータを INSERT する処理を、トランザクションの有無で比べてみる。

$ script/performance/benchmarker \
'1000.times{|i| Item.create(:name => "test#{i}") }' \
'Area.transaction{ 1000.times{|i| Item.create(:name => "test#{i}") } }'
            user     system      total        real
#1      3.330000   0.360000   3.690000 ( 30.918976)
#2      3.530000   0.180000   3.710000 (  3.829850)

トランザクション無しで30.9秒、有りで3.8秒。ほぼ1/10か。 ちなみに、 Rails のログには BEGIN TRANSACTION / COMMIT は残らないのね。 そういうもの?

関連する日記