MongoDB的统计数据收集

时间:2012-12-08 12:11:13

标签: mongodb

我正在使用Nodejs和Mongodb构建一个应用程序来扫描Stackoverflow以获取新内容,并找到热门和热门话题,我需要知道这样做的方法,因为我不确定我是否正确地执行了此操作当我来自MySQL时,我的直觉告诉我这里有不同的东西。

我实际上并不是在扫描Stackoverflow,它只是作为一个类比很容易使用,但我仍然有帖子,我有评论,以及发布帖子的用户(无视发布评论的用户)。

我最初的解决方案是创建三个表(集合):

  • 帖子 - 我存储有关帖子的所有信息
  • 发布统计信息 - 每隔X分钟存储一次有关帖子(评论数,总分等)的所有动态信息
  • 用户 - 我存储有关发布帖子的用户的信息

基本上我希望能够通过“给我今天的顶级用户”和“给我这篇文章的历史”来查询数据库,以创建一个图表这篇文章的表现(排名,评分,评论)等等。随着时间的推移。

使用Mongodb做这样的事情的正确方法是什么?我应该将帖子统计信息存储为帖子文档的一部分吗?

1 个答案:

答案 0 :(得分:0)

我个人会在这里寻求混合解决方案。

您不可避免地需要post上的某种聚合数据。所以在post中我会包含一个包含所有时间统计信息的额外子文档:

stats: {
    views: 456, // Just an example
    vote_ups: 5,
    vote_downs: 4,
    rank: 1, // vote ups minus vote downs
    comments: 5,
    answers: 6
}

然后,对于个别时段,我会使用post_stats解释创建文档的方式:

{
    post_id: 45,
    // etcera for minute by minute changes
    time: ISODate()
}

使用post_id(或_id代替)来查询您想要制作的图表。由于MongoDB擅长水平扩展,因此您将在此处充分利用它。