【问题标题】:Structure Statistics Data for MongoDBMongoDB 的结构统计数据
【发布时间】:2017-08-01 20:08:18
【问题描述】:

我们的视频每天都有一定的观看次数。

我在想:

{
    video_name: "Blabla"
    stats: [
      {day: x, views: 342}
      {day: x, views: 342}
     ]
}

但是,从我在网上阅读的分析/数据资料来看,人们往往更喜欢单独的集合,所以更多的是这样的:

{
    video_name: "Blabla"
}

{day: x, views: 342, video_id: y}
{day: x, views: 342, video_id: y}

你有什么看法?

【问题讨论】:

  • 您的用户需要什么,您的查询将如何构建?将统计信息放在单个文档/视频中的挑战可能意味着您将达到 16MB MongoDB 文档的限制。

标签: mongodb database-design mongoose mongoid database


【解决方案1】:

这个任务是聚合框架的经典任务:http://docs.mongodb.org/manual/core/aggregation/ 对于第一个变体,您可以使用如下内容:

test> db.video.aggregate([{$unwind:'$stats'}, {$group:{_id:{name:'$video_name', day:'$stats.day'}, views:{$sum:'$stats.views'}}}])
{
    "result" : [
        {
            "_id" : {
                "name" : "Blabla2",
                "day" : 3
            },
            "views" : 344
        },
        {
            "_id" : {
                "name" : "Blabla2",
                "day" : 1
            },
            "views" : 684
        },
        {
            "_id" : {
                "name" : "Blabla",
                "day" : 2
            },
            "views" : 342
        },
        {
            "_id" : {
                "name" : "Blabla2",
                "day" : 2
            },
            "views" : 342
        },
        {
            "_id" : {
                "name" : "Blabla",
                "day" : 1
            },
            "views" : 342
        }
    ],
    "ok" : 1

但是如果您的视频数量会像雪崩一样增加,您将来可能会遇到问题。 您可以使用 $match 操作帮助精确计算某一天的统计数据,但这是临时解决方案。

好主意是改变数据模型更简单(如果可以的话):

{
    video_name: "Blabla",
    day: x,
    views: 342}
}

在此模型中,您不依赖文档的大小,聚合框架可帮助您创建分析视图:

db.video.aggregate([{$group:{_id:{name:'$video_name', day:'$day'}, views:{$sum:'$views'}}}])

您可以简单地选择任何一天或一天​​的时间间隔,您可以按视频名称或视频和日期分组,您可以随意计算任何统计数据;)

【讨论】:

  • 还有一个好主意:将一些聚合统计信息保存在不同的集合中并定期更新以用于分析目的,您必须将 oltp 和 analitics 分开
  • 如果我正确理解了他的正确做事方式,是有一个单独的集合并使用聚合框架来做事吗?
  • 是的,恕我直言,这是最好的方法。如果您将统计数据和数据混合在一起,您将始终难以更新,试想一下,您将如何更新视图数量以及需要什么代码
  • 说得通。我猜是什么让我在 MongoDB 中感到困惑似乎强调将数据嵌入到文档中。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 2023-03-17
  • 2015-12-20
  • 2011-06-22
  • 2016-03-23
  • 2016-03-04
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多