我想使用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)如果我们停止使用引用,则选择性能会降低。
有什么好主意吗?
答案 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)