2015-08-03 55 views
0

我们必须从一个表中获取大约5百万条记录,并将它们插入具有相同表结构的另一个表中。从一个表中获取数据,然后插入到另一个表中Mysql,Sidekiq,Ruby

我们使用Sidekiq和redis来将记录插入到队列中并从队列中插入。

这里是我的代码: User_controller

def reinsert_users  
    @active_users = ExportUser.all 
    RecreateUserWorker.perform_async(@active_users) 
end 

recreateuser_worker.rb

class RecreateUserWorker 
    include Sidekiq::Worker 

    def perform(users) 
    begin  
     @user = User.new("true") 
     @user.recreate(users) 
    rescue 
     raise 
    end 
    end 

end 

' ''”

User.rb : 

def recreate(users) 
    users.each do |user| 
     @user = ExportUsersV2.new(user) # new table to insert 
     @user.save  
    end 
end 

这是错误我得到:

WARN: {"class"=>"RecreateUserWorker", "args"=>["#<ExportUser::ActiveRecord_Relation:0xa3781b0>"], "retry"=>true, "queue"=>"default", "jid"=>"25fe4378de1bb967ff4d1e5e", "enqueued_at"=>1438605202.8414373, "error_message"=>"undefined method `each' for \"#<ExportUser::ActiveRecord_Relation:0xa3781b0>\":String", "error_class"=>"NoMethodError", "failed_at"=>1438605202.8470101, "retry_count"=>0} 

我在这里错过了什么?

回答

0

我认为最好是使用直接mysql查询插入用户群体。

您可以使用宝石https://github.com/tauqeer-ahmad/bulk_uploadable/tree/master或任何其他创业板。

我认为这可能会解决这个问题。

+0

是bulk_uploadable宝石是不够好,在一杆插入3-4百万的记录?它是异步过程?如果由于某种原因没有插入任何记录,那么我们如何跟踪失败的记录? – joe

相关问题