我正在从流API中收集数据,我想创建一个实时分析仪表板。每当新记录出现在流的末尾时,我就会更新下面文档中的计数器。
从设计角度来看。我是否正确使用一个文档,如下例所示?
{
"_id" : ObjectId("5238beb4d4bed9e444c99978"),
"counts" : {
"hours" : {
"1" : 835,
"2" : 1007,
.
.
.
"3" : 174,
}
}
此方法的好处是只需要将一个文档发送到实时分析仪表板。一年之后,这份文件只有365 * 24个字段,那一年每小时1个字段?
索引怎么样?如果我只有一个文件,我可以在counts.hours上创建一个索引吗?或者索引仅适用于mongodb中的集合?索引是否有助于更快地查找文档或文档中的字段?
如果我可以在counts.hours上创建一个索引,那么计数器增量过程可以更有效地找到正确的小时数(在流的末尾每个新文档)。
答案 0 :(得分:0)
您可以在文档中嵌入的字段中创建索引。在上面的例子中:
yourCollection.ensureIndex({ 'counts.hours':1 });
索引将帮助您优化查询以根据'counts.hours'字段返回文档。
youCollection.find({ 'count.hours':1 });
您的数据结构设计应取决于您计划执行的查询和更新的类型。在你描述的情况下,我想你会在'hours'对象中添加成员,这样的更新可能会很昂贵,因为MongoDB会针对记录大小在更新中保持稳定的情况优化每个集合记录。