我正在使用Rails 4.0.0和
Ruby 2.0.0.我的帖子(如在博客帖子中)模型与用户的user_name,first_name,last_name的组合相关联.我想迁移数据,以便帖子通过外键与用户关联,这是用户的ID.
我在帖子表中有大约1100万条记录.
我正在运行以下代码来使用Linux服务器上的rake任务来迁移数据.但是,我的任务一直被服务器“杀死”,可能是由于rake任务,特别是下面的代码,消耗了太多的内存.
我发现将batch_size降低到20并将睡眠(10)增加到睡眠(60)允许任务运行更长时间,更新更多记录而不被杀死,但需要更多时间.
如何针对速度和内存使用优化此代码?
Post.where(user_id: nil).find_in_batches(batch_size: 1000) do |posts| puts "*** Updating batch beginning with post #{posts.first.id}..." sleep(10) # Hopefully,saving some memory usage. posts.each do |post| begin user = User.find_by(user_name: post.user_name,first_name: post.first_name,last_name: post.last_name) post.update(user_id: user.id) rescue NoMethodError => error # user could be nil,so user.id will raise a NoMethodError puts "No user found." end end puts "*** Finished batch." end