【发布时间】:2015-08-25 21:52:20
【问题描述】:
我正在编写一个工人来将很多用户添加到一个组中。我想知道是否最好运行一个拥有所有用户的大型任务,或者像 100 个用户一样批量运行,或者每个任务一个接一个地运行。
这里是我的代码
class AddUsersToGroupWorker
include Sidekiq::Worker
sidekiq_options :queue => :group_utility
def perform(store_id, group_id, user_ids_to_add)
begin
store = Store.find store_id
group = Group.find group_id
rescue ActiveRecord::RecordNotFound => e
Airbrake.notify e
return
end
users_to_process = store.users.where(id: user_ids_to_add)
.where.not(id: group.user_ids)
group.users += users_to_process
users_to_process.map(&:id).each do |user_to_process_id|
UpdateLastUpdatesForUserWorker.perform_async store.id, user_to_process_id
end
end
end
也许在我的方法中有这样的东西会更好:
def add_users
users_to_process = store.users.where(id: user_ids_to_add)
.where.not(id: group.user_ids)
users_to_process.map(&:id).each do |user_to_process_id|
AddUserToGroupWorker.perform_async group_id, user_to_process_id
UpdateLastUpdatesForUserWorker.perform_async store.id, user_to_process_id
end
end
但是有很多find 请求。你怎么看?
如果需要,我有一个 sidekig pro 许可证(例如批量)。
【问题讨论】:
-
你的
UpdateLastUpdatesForUserWorker是做什么的? -
嘿Eugzol!它向用户发送通知,并在组中附加与用户相关的内容。
-
再次嗨 :) 发送通知——什么通知?某种远程请求,例如发送电子邮件或推送通知?当您对用户或组说
attach某事时,您是什么意思? -
是的移动通知和电子邮件。如果他在特定组中,用户可以阅读帖子。他还可以访问文件。 UpdateLastUpdatesForUserWorker 被许多其他进程使用。