50,000 人のユーザーを更新する必要がある場合、N+1 の問題ではなく、バックグラウンド処理ライブラリを使用して最適な方法で更新するにはどうすればよいでしょうか?
ユーザー、メンバーシップ、ポイントがあります。
メンバーシップは合計ポイント値に関連しています。メンバーシップがポイント値で変更された場合、適切なメンバーシップを更新するためにすべてのユーザーを実行する必要があります。これは、サーバーが 30 分以上ハングしないようにキューに入れる必要があるものです。
今、私はコントローラーアクションを持っています
def update_memberberships
User.find_each do |user|
user.update_membership_level! # looks for a Membership defined by x points and assigns it to user. Then Saves the user.
end
end
これは非常にコストのかかる操作です。投稿がフォームからほぼ瞬時になるように、処理およびバックグラウンドで最適化するにはどうすればよいですか?