2010-11-10

大量のデータをActiveRecordで処理するとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Railsで大量のデータを処理するときです。

何も考えずに
User.find(:all,:conditions=>"age > 18").each do |u|
 #なんか処理
end
みたいなことをやっていました。

データが増えるとメモリがえらいことになってしまいました。

そんな時は、
User.find_each(:conditions=>"age > 18") do |u|
 #なんか処理
end
みたいにするとメモリの利用を削減できます。

以下が参考になります。
ここではRails3の説明となっていますが、2.3の新しいめのバージョンならば使えるようです。
http://wiki.usagee.co.jp/ruby/rails/RailsGuides%E3%82%92%E3%82%86%E3%81%A3%E3%81%8F%E3%82%8A%E5%92%8C%E8%A8%B3%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%82%88/Active%20Record%20Query%20Interface#i803e697
コメントを投稿