Ruby on Railsのプロジェクトで、大量のデータを更新しようとしたらメモリ不足でエラーとなったため、解決方法をメモ。
こんな感じで、データを更新しようとしていました。
Hoge.all.map do |hoge|
hoge.update(fuga: hoge.foo)
end
しかしデータが数十万件あり、メモリ不足で余裕で落ちました。
そんなときは in_batchesを使いましょう。
デフォルトでは1000件ずつ読み込んで処理してくれます。
Hoge.in_batches do |hoges|
hoges.map do |hoge|
hoge.update(fuga: hoge.foo)
end
end
無事解決!
どれくらいの量のデータが扱われるかは、常に意識しないといけないですね。