2014-01-21 38 views
0

说我希望我的首页显示“整个站点的注释总数”等统计信息。对Comments集合中的所有文档进行查询并获取长度会更好吗?还是只有统计信息的单个集合会更容易?猫鼬模式来保存站点统计信息

我最初的直觉是只查询评论集合和抓取长度,但随着评论的增长,查询将变得昂贵。对一些文档使用集合似乎效率不高,并且需要更多的逻辑来在评论发生时更新它。

哪种方式是正确的方式?

回答

0

“正确”是主观的,但实际上,您的第二个策略是将count()缓存到另一个集合中。使用内存中的缓存(例如memcached)更为典型,因为这些计数是暂时的,并且您可能不需要持久保存它们的I/O开销(除非您还绘制某种历史记录? )。当您的应用程序启动时,您可以使用当前计数来填充缓存。

值得注意的是,您的缓存计数器不一定是确切匹配的数据库查询返回的count()。一旦你有了一个开始计数,你可能知道这个改变的唯一方法就是添加或删除一个评论。使用类似mongoose-lifecyle的方法,您可以根据您的评论模型中的事件调整缓存计数,即afterInsert(+1)和可能的afterRemove(-1)。大多数网站只喜欢宣传越来越多的统计数据,因此“总评论”的解释通常是“总评论(永远)”,而不是“当前发布的总评论数量”。