我正在为一个拥有约500,000用户的推特式社交网络开发一个概念证明应用程序.我不确定如何最好地设计'架构'
我应该嵌入用户的订阅还是拥有单独的"订阅"集合并使用数据库引用?如果我嵌入,我仍然需要执行查询以获取所有用户的关注者.例如
鉴于以下用户:
{
"username" : "alan",
"photo": "123.jpg",
"subscriptions" : [
{"username" : "john", "status" : "accepted"},
{"username" : "paul", "status" : "pending"}
]
}
Run Code Online (Sandbox Code Playgroud)
为了找到所有阿兰的订阅者,我必须运行这样的事情:
db.users.find({'subscriptions.username' : 'alan'});
Run Code Online (Sandbox Code Playgroud)
从性能的角度来看,是否比拥有单独的订阅集合更糟或更好?
此外,当显示订阅/订阅者列表时,我目前遇到n + 1问题,因为订阅文档告诉我目标用户的用户名,但不是我可能需要的其他属性,例如个人资料照片.是否有针对此类情况的推荐做法?
谢谢艾伦