在以下方面寻找一些意见。希望这对主持人来说不太主观。
刚开始使用deployd.com BaaS API并有以下情况。
如果一个移动应用程序要拥有一个Group对象和一个User,其中一个用户可以属于多个Groups,而Group有很多用户(多对多关系),我可以设计这两种方式,我就是两个考虑:
A)
Users [{
id: 1,
groups : {1,2,3,4}
}]
Groups [{
id: 1,
users : {1,2,3,4}
}]
和
B)
Users [{
id: 1
}]
Groups [{
id: 1
}]
UserGroups [{
id: 1,
group: 1,
user: 1,
},{
id: 2
group: 1,
user: 2,
}]
我倾向于B,因为我可以存储元数据(用户加入组的日期等),但这似乎更像是一个RDBMS方法,我想知道我是否会失去NoSQL的任何好处试图建立这种关系。
假设这个移动应用程序将同时被成千上万的移动用户使用,因此首先选择NoSQL与RDBMS。
答案 0 :(得分:1)
B)不是个好主意。 MongoDB不进行连接,因此任何需要多个集合的操作都意味着多个后续查询,这比关系数据库中的数据库内部JOIN要慢得多。这意味着你应该将关系存储在自己的文档中。
如果要存储元信息,请记住,数组不能只存储原始值。他们还可以存储对象。例如:
{
id:1,
name:"Bob",
groups: [
{ name: "nice people",
position: "member",
joined: ISODate(2013, 12, 3)
} ,
{ name: "evil people",
position: "admin",
joined: ISODate(2012, 11, 22)
}
]
}
存储足够的元信息可能是个好主意,这样就可以在不查询引用对象的情况下完成许多常见查询。如果要在有人查找用户配置文件时显示组列表,并且您在该概述中将所需的所有组信息存储在users-document中,则可以避免必须执行第二次查询来检索组文档。