rails:1370
From: kAZUO tAKAYAMA <kazuot@m...>
Date: Fri, 21 Jul 2006 06:39:41 +0900
Subject: [rails:1370] バルクインサートの処理速度について
はじめまして高山と申します。 サーバにアップロードしたCSVファイルを読み込んでテーブルにインポートする処理を 下記のように書いたのですが、処理速度が遅くて困っています。1000件程度のデータ をインポートするのに20秒近くかかってしまいます。 _f = File.new("#{UPLOAD_PATH}/data.csv}",'r') while _line = _f.gets _cols = _line.split(/,/) _data = Uploaddata.new _data.col1 = _cols[0] _data.col2 = _cols[1] _data.col3 = _cols[2] : : if !_data.save then break; end end そこで、execute()を使うよう書き直してみたのですがスマートじゃないように思いま す。Railsでもexecute()は推奨されていないようだし、もう少しすっきり速くバルク インサートを実現する方法はないものでしょうか? 書き直した結果は約10秒程度でインポートできましたので効果はあったですが... # rails(1.1.4) # activerecord (1.14.3) # MySQL(5.0.18) です。 _f = File.new("#{UPLOAD_PATH}/data.csv}",'r') ActiveRecord::Base.connection.execute('set autocommit=0') ActiveRecord::Base.connection.execute('start transaction') while _line = _f.gets _cols = _line.split(/,/) _data = Uploaddata.new _data.col1 = _cols[0] _data.col2 = _cols[1] _data.col3 = _cols[2] : : #get_insert_query() はinsert into table(...) values(...)を返します ActiveRecord::Base.connection.execute("#{_data.get_insert_query}") end ActiveRecord::Base.connection.execute('commit') -- ML: rails@r... 使い方: http://QuickML.com/
-> 1370 2006-07-20 23:39 [kazuot@m... ] バルクインサートの処理速度について 1371 2006-07-21 00:22 ┣[walf443@g... ] 1372 2006-07-21 00:25 ┗[moriq@m... ] 1381 2006-07-21 13:36 ┗[kazuot@m... ]