用于保存站点统计信息的mongoose模式

时间:2014-01-21 04:52:02

标签: javascript mongodb mongoose

说我希望我的首页显示“整个网站的评论总数”等统计信息。最好是对Comments集合中的所有文档进行查询并获得长度,还是更容易为统计信息设置单个集合?

我最初的直觉是只查询Comments集合并获取长度,但随着注释的增长,查询将变得昂贵。使用几个文档的集合似乎效率不高,并且在评论时需要更多逻辑来更新它。

哪种方式正确?

1 个答案:

答案 0 :(得分:0)

“正确”是主观的,但实际上你的第二个策略就是在另一个集合中缓存count()。对于实时统计使用内存缓存(例如memcached)更典型,因为计数是暂时的,您可能不需要持久化它们的I / O开销(除非您也在绘制一些有点历史?)。您可以在应用程序启动时使用当前计数填充缓存。

值得注意的是,您的缓存计数器不必是数据库查询返回的count()完全匹配。一旦你有一个起始计数,你可能知道改变它的唯一方法是添加或删除评论。使用像mongoose-lifecyle这样的方法,您可以根据评论模型中的事件调整缓存计数,即:afterInsert(+1)和可能afterRemove( - 1)。大多数网站只喜欢宣传正在增加的统计数据,因此“总评论”的解释通常是“总评论(永远)”而不是“当前发表的总评论”。