レールで 100K 行の作成を最適化する方法はありますか? 私は現在使用しています:
hash_numbers = SomeModel.all.map {|number| {number: number}}
List.last.recipients.create hash_numbers
リストが長くなるにつれて、これは指数関数的に遅くなります。助言がありますか?
レールで 100K 行の作成を最適化する方法はありますか? 私は現在使用しています:
hash_numbers = SomeModel.all.map {|number| {number: number}}
List.last.recipients.create hash_numbers
リストが長くなるにつれて、これは指数関数的に遅くなります。助言がありますか?
バッチ メソッドのいずれかを試すことができます。find_in_batches
またはfind_each
、まだ長いプロセスになる可能性がありますが、メモリ上では簡単です。
または、各グループを使用してクエリを分割しlimit
、独自のバックグラウンド プロセスに投入する方法。
create
データベースがすべてのクエリを単一のトランザクションに挿入するように、トランザクションでラップしようとしましたか? 他のより良い解決策があるかもしれませんが、ActiveRecord を使用して一括挿入を行っているので、これも試してみてください。
ActiveRecord::Base.transaction do
1000.times { List.last.recipients.create hash_numbers }
end