Rails计数器缓存与计算

我有一个集合,我想显示总计,并且想法是为我需要的每个总数使用缓存。 但是,我还需要深入研究数据集。 所以我很可能无论如何都要加载这个集合。 那么我还应该使用缓存还是仅使用计算?

答案取决于集合的大小。 如果集合非常大(1000或者项目),那么缓存可能是一个好主意。 如果只有少数几个并且您在表上有索引以快速查找相关行,则可能不需要缓存,尤其是如果您必须钻入集合中。

正如所有这些问题一样,正确答案通常是“取决于”。 这在很大程度上取决于您的要求和数据等。

正如Stephen ODonnell所说,“……取决于collections品的大小。” 但是,您还需要考虑每页进行此计算的次数 。 例如,如果您正在进行博客应用程序并且post/索引页面显示10个博客post,每个博客post底部都有“155评论”,那么通过使用计数器缓存可以避免许多数据库调用。

我建议只使用活动记录搜索来尝试它,但添加“包含”选项。 假设post#123有50条评论。

p = Post.find_by_id(123) p.comments.each do {|c| puts c } #Do something meaningful instead... 

将生成51个数据库调用,1个用于Post,1个用于每个注释。 相反,你可以这样做:

 Post.find_by_id(123, :include => [:comments]) 

现在,当您搜索post时,它会自动查询评论,将51个查询折叠为1。