Rails创建100k行

时间:2013-07-30 18:06:25

标签: ruby-on-rails

有没有办法优化轨道中100K行的创建?我目前正在使用:

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

随着列表变长,指数会逐渐变慢。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试其中一种批处理方法find_in_batchesfind_each,可能仍然是一个漫长的过程,但内存更容易。

或者使用limit分割查询并将每个组投入到自己的后台进程中的一些方法。

答案 1 :(得分:1)

您是否尝试在事务中包装create,以便db在单个事务中插入所有查询?可能还有其他更好的解决方案,但是,由于您使用ActiveRecord进行批量插入,请尝试一下:

ActiveRecord::Base.transaction do
  1000.times { List.last.recipients.create hash_numbers }
end