来自MySQL的背景,我在使用Mongo时一直在质疑一些设计模式。我一直在问自己的一个问题是我应该何时创建新集合与创建数组类型的属性?我现在的情况如下:
我目前的结构如下:
{
username:"danramosd",
inboxes:[
{
name:"inbox1",
messages:[
{
message:"this is my message"
comments:[
{
comment:"this is a great message"
}
]
}
]
}
]
}
为简单起见,我只列出了1个收件箱,1条消息和1条评论。实际上可能会有更多。
我认为更好用的方法是使用4个集合:
那么哪种方法更好?
答案 0 :(得分:1)
没有人可以帮助您解决这个问题,因为它高度依赖于您的应用程序:
当你选择一种方法而不是另一种方法时,你正在进行交易。
如果您将所有内容存储在一起(在一个集合中作为您的第一个案例),您可以非常轻松地获取特定用户的所有内容。把你最不可能同时需要所有信息的东西拆开,同时让你更难以更新元素的某些部分(尝试写一个会添加注释或删除第三条注释的查询) 。即使这很容易 - mongodb does not handle well growing documents,因为无论何时超过padding factor,它都会将文档移动到另一个位置(这很昂贵)并增加填充因子。另请注意,这可能会触及mongodb的limit on the size of the document。
在尝试设计任何存储架构之前,最好先阅读所有mongodb用例。毫不奇怪,他们也有一个全面的overview of your case。