嵌入不断增长的文件

时间:2013-07-29 05:57:47

标签: mongodb

我想使用MongoDB记录我们服务中所有用户的活动日志。

目前,我们的结构如下:

{
    '_id' : 'user_id',
    'activites' : [
        {time : blah blah, action : blah blah, ...},
        {time : blah blah, action : blah blah, ...},
        {time : blah blah, action : blah blah, ...},
    ]
}

但我们发现嵌入式文档的增长会导致更新性能下降。

现在我们正在考虑更改数据架构,即将嵌入式文档迁移到单独的集合,并使用参考模型。

但是,如果我们改变结构,仍然存在问题。

(1)参考数量仍在增长。我们可以避免性能问题吗? (2)如果我们停止使用引用,则选择性能会降低。

有什么好主意吗?

1 个答案:

答案 0 :(得分:0)

存储在单个文档中的数据大幅增加总是错误的,因为文档的大小有限(16MB)。

我建议您在活动集合中引用user_id,例如:

{
     '_id': 'activity_id',
     'user_id': 'user_id',
     'time': ...,
     'action: ...,
     ...
}

确保为“user_id”添加了索引,并且如果您始终在多个字段上查询,例如{user_id:user_id,time:{$ gt:blah blah}},请在订单后的所有字段上创建索引查询,在这种情况下:(user_id:1,时间:-1)(如果你总是排序时间DESCENDING)