我有一个 Rails 应用程序,它记录了许多 Movie_Categories 的用户、评论数。模型如下所示:
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 的所有用户每小时进行一次计算(在后台作业中),然后存储计数在用户表中,每个电影类别都有自己的列。这样,我就不必频繁地为每个用户运行计算,而只需访问 User 表中的计数。
我想知道是否有更干的方法来做到这一点,因为我不确定我的 Movie_Categories 何时会停止增长(并且每次都会出现一个新的表字段)。我还考虑过缓存用户显示视图(这些计数出现的位置),但即便如此,如果我在用户表中没有这些列,那么似乎每次加载新用户页面(或缓存过期)时它将不得不再次为用户评论计数计算所有这些。
对于我所面临的问题,是否有更好的方法来避免给服务器带来太多负担?