wil*_*age 13 mongoose mongodb nosql node.js
我有两个集合:
每次上传都User
与之关联,我需要在Upload
查看时了解他们的详细信息.最好的做法是在Uploads记录中复制这些数据,还是使用populate()从引用的Users集合中提取这些详细信息_id
?
选项1
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
_user: { type: Schema.ObjectId, ref: 'users'},
title: { type: String },
});
Run Code Online (Sandbox Code Playgroud)
方案2
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
user: {
name: { type: String },
email: { type: String },
avatar: { type: String },
//...etc
},
title: { type: String },
});
Run Code Online (Sandbox Code Playgroud)
使用"选项2",如果Users
集合中的任何数据发生更改,我将不得不在所有相关Upload
记录中更新此选项.另一方面,使用"选项1",我可以放松一下,populate()
确保始终显示最新的用户数据.
使用populate()
显着的开销是多少?这种常见情况下的最佳做法是什么?
kil*_*anc 16
如果您需要查询您的用户,请保持用户独处.如果您需要查询上传内容,请单独保留上传内容.
您应该问自己的另一个问题是:每当我需要这些数据时,我是否需要嵌入对象(反之亦然)?这些数据会被更新多少次?这些数据会被读取多少次?
考虑友情请求: 每次需要请求时,您都需要发出请求的用户,然后将请求嵌入到用户文档中.
您也可以在嵌入对象上创建索引,搜索将是单字查询/快速/一致.
只是链接到我之前关于类似问题的回复: 对象之间的Mongo DB关系
我认为这篇文章适合您http://www.mongodb.org/display/DOCS/Schema+Design
用例
客户/订单/订单行项目
订单应该是一个集合.客户收藏.line-items应该是一个嵌入在订单对象中的行项目数组.
博客系统.
帖子应该是一个集合.作者可能是一个单独的集合,或者仅仅是一个电子邮件地址的帖子中的字段.注释应该是帖子中的嵌入对象以提高性能.
架构设计基础
Kyle Banker,10gen
索引和查询优化Alvin Richards,企业工程高级总监
http://www.10gen.com/presentation/mongosf-2011/mongodb-indexing-query-optimization
**这两个视频是有史以来在mongoddb看到的最好的视频
归档时间: |
|
查看次数: |
6003 次 |
最近记录: |