0

我正在从流式 API 收集数据,我想创建一个实时分析仪表板。每次流的末尾出现新记录时,我都会更新以下文档中的计数器。

从设计的角度来看。我只使用一个文档是否正确,如下例所示?

{
    "_id" : ObjectId("5238beb4d4bed9e444c99978"),
    "counts" : {
        "hours" : {
            "1" : 835,
            "2" : 1007,
            .
                    .
                    .
                    "3" : 174,
         }
}

这种方法的好处是只需将一个文档发送到实时分析仪表板。同样在一年后,该文档将只有 365 * 24 个字段,该年每小时 1 个?

索引呢?如果我只有一个文档,我可以在 counts.hours 上创建索引吗?还是索引仅适用于 mongodb 中的集合?索引是否有助于更快地查找文档或文档中的字段?

如果我可以在 counts.hours 上创建一个索引,那么计数器增量过程可以更有效地找到要增量的正确时间(每个新文档在流末尾)。

4

1 回答 1

0

您可以在文档中嵌入的字段中创建索引。在上述情况下:

yourCollection.ensureIndex({ 'counts.hours':1 });

该索引将帮助您优化查询以根据“counts.hours”字段返回文档。

youCollection.find({ 'count.hours':1 });

您的数据结构设计应取决于您计划执行的查询和更新类型。在您描述的情况下,我想您将向“小时”对象添加成员,这样的更新可能会很昂贵,因为 MongoDB 会填充每个集合记录,以优化记录大小在更新时保持稳定的情况。

于 2013-09-18T06:01:05.407 回答