1

レールで 100K 行の作成を最適化する方法はありますか? 私は現在使用しています:

hash_numbers = SomeModel.all.map {|number| {number: number}}  
List.last.recipients.create hash_numbers

リストが長くなるにつれて、これは指数関数的に遅くなります。助言がありますか?

4

2 に答える 2

2

バッチ メソッドのいずれかを試すことができます。find_in_batchesまたはfind_each、まだ長いプロセスになる可能性がありますが、メモリ上では簡単です。

または、各グループを使用してクエリを分割しlimit、独自のバックグラウンド プロセスに投入する方法。

于 2013-07-30T18:11:42.023 に答える
1

createデータベースがすべてのクエリを単一のトランザクションに挿入するように、トランザクションでラップしようとしましたか? 他のより良い解決策があるかもしれませんが、ActiveRecord を使用して一括挿入を行っているので、これも試してみてください。

ActiveRecord::Base.transaction do
  1000.times { List.last.recipients.create hash_numbers }
end
于 2013-07-30T18:12:20.503 に答える