Rails计数器缓存与计算

时间:2009-08-05 12:08:37

标签: ruby-on-rails

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

2 个答案:

答案 0 :(得分:4)

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

我建议只使用活动记录搜索来尝试,但添加“include”选项。假设帖子#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])

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

答案 1 :(得分:3)

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

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