我是MongoDB的新手,我不确定如何定义我的架构。
我有一个用户的表,并记录了每个用户活动。我的问题是,我是否应该只有一个嵌入了所有操作的用户集合:
User: {
id: 1,
name: 'John',
log: [{
activity: {
action: 'logged in...'
},
activity: {
action: 'logged in...'
},
activity: {
action: 'password reset...'
}
}]
}
或者我应该有两个单独的集合:users和userlog?
User: {
id: 1,
name: 'John'
}
UserLog: {
id: 1,
action: 'logged in...',
userid: 2
}
我对选项1的唯一担心是文档可能会变得太大。
答案 0 :(得分:0)
它取决于。来自mongo docs
在某些情况下,您可以选择将信息存储在多个集合中,而不是存储在单个集合中。
还要考虑最大BSON文档大小为16兆字节,因此如果您的文档往往会大幅增长,那么拥有多个集合会更好。
答案 1 :(得分:0)
存储经常增长而且没有绑定的数组,特别是如果您想要对数组中的任何字段进行索引,如action
,这是一个坏主意。即使不太了解这个用例,我认为可以安全地说用户历史信息应该在一个单独的集合中,每个被审计的事件都是它自己的文档。
请参阅Ask Asya关于large arrays的帖子,原因很简单,但基本上这些文件在增长时必须完全重写,创建比正常就地更新更多的I / O,并维护对于大型不断增长的阵列,索引变得非常昂贵。