我想从表中删除超过1000k条记录(有时是数百万条记录)。我觉得使用sidekiq和Redis异步进行是安全的,因为我正在使用Ruby和Sinatra。
什么时候我应该调用sidekiq的“执行”方法?我需要在哪里运行我需要删除的记录循环? 任何人都可以解释如何使用sidekiq将要删除的记录放入队列吗?
这是我的代码,请检查并告诉我是否遵守了正确的代码。
在我的用户控制器中:
def delete_user
DeleteUserWorker.perform_async(@client_info, @input_params)
end
在我的lib / workers / deleteuser_worker.rb
中class DeleteUserWorker
include Sidekiq::Worker
def perform(client_info, input_params)
# executes the query and fetches non-active records from users table.
@delete_users = User.where("status != ? and EndDate < ?", "active", 3.months.ago )
@delete_users.each do |user|
user.destroy!
end
end
end
答案 0 :(得分:0)
如果您要遍历数百万条记录,则应使用find_each或find_in_batches而不是每条记录(因为.each会尝试一次实例化所有对象):
@delete_users.find_each do |user|
user.destroy!
end
更多信息: http://api.rubyonrails.org/classes/ActiveRecord/Batches.html