多くの Movie_Categories のユーザー、コメントの数を保持する Rails アプリがあります。モデルは次のようになります。
class User < ActiveRecord::Base
has_many :comments
end
class Movie < ActiveRecord::Base
belongs_to :movie_category
has_many :comments
end
class MovieCategory < ActiveRecord::Base
has_many :movies
end
class Comment < ActiveRecord::Base
belongs_to :movie
belongs_to :user
end
もちろん、各 MovieCategory に対して次のようなことを行うと、MovieCategory ごとにユーザーのコメント数を見つけることができます。
@user.comment.where("movie_category_id =?", movie_category_id)
ただし、この呼び出しを頻繁に行う必要がある場合、サーバーに多くの負荷がかかるため、すべての Movie_Categories のすべてのユーザーに対して 1 時間に 1 回 (バックグラウンド ジョブで) 計算を行い、カウントを保存することを考えていました。ユーザー テーブルでは、各ムービー カテゴリに独自の列があります。そうすれば、ユーザーごとに計算を頻繁に実行する必要がなくなり、User テーブルからカウントにアクセスするだけで済みます。
私が疑問に思っているのは、これを行うためのよりドライな方法があるかどうかということです。なぜなら、いつ Movie_Categories の成長が止まるかわからないからです (そして、そのたびに新しいテーブル フィールドが追加されます)。ユーザー表示ビュー (これらのカウントが表示される場所) をキャッシュすることも考えましたが、それでも、ユーザー テーブルにこれらの列がない場合、新しいユーザー ページが読み込まれる (またはキャッシュされた期限が切れる) たびに、ユーザーのコメント数については、これらすべてを再度計算する必要があります。
サーバーに負担をかけすぎないように、私が直面している問題に対するより良いアプローチはありますか?