MongoDB:一个大文档或多个集合

时间:2014-09-08 09:56:33

标签: mongodb

我是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的唯一担心是文档可能会变得太大。

2 个答案:

答案 0 :(得分:0)

它取决于。来自mongo docs

  

在某些情况下,您可以选择将信息存储在多个集合中,而不是存储在单个集合中。

还要考虑最大BSON文档大小为16兆字节,因此如果您的文档往往会大幅增长,那么拥有多个集合会更好。

答案 1 :(得分:0)

存储经常增长而且没有绑定的数组,特别是如果您想要对数组中的任何字段进行索引,如action,这是一个坏主意。即使不太了解这个用例,我认为可以安全地说用户历史信息应该在一个单独的集合中,每个被审计的事件都是它自己的文档。

请参阅Ask Asya关于large arrays的帖子,原因很简单,但基本上这些文件在增长时必须完全重写,创建比正常就地更新更多的I / O,并维护对于大型不断增长的阵列,索引变得非常昂贵。