dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

【ActiveRecord】ActiveModel::Model#allはやめておいた方が良い

要旨

find_each を使おう。 batch_size を指定すれば、一度に取得するレコード数を制限できる。

Model.find_each(batch_size: 100) do |model|
  ~~~
end

詳細

#all は、一度に全てのレコードを取得するので、まずデータベースに負荷がかかってしまう。さらにその結果を全てメモリ上に展開するので、Railsにも負荷がかかってしまう。

find_each を使えば、一度に取得してくるバッチサイズを指定することで、大量のレコードを取得してしまうことを防げる。

参考

railsguides.jp