MongoDB对象之间的关系

8

我正在尝试使用MongoDB实现博客文章存储。

我有两个领域实体:

“博客文章”和“作者”

目前,我已将AuthorId属性添加到博客文章实体中。这是存储对象之间关系的正确方法吗?

2个回答

20

我认为这篇文章对你很有帮助 http://www.mongodb.org/display/DOCS/Schema+Design

使用案例

客户/订单/订单行项目

Orders应该作为一个集合存在,customers应该作为一个集合存在,line-items应该作为嵌入在order对象中的一个数组。

博客系统。

帖子应该作为一个集合存在,如果只是一个电子邮件地址,则作者可能是一个单独的集合,或者只是在帖子中的一个字段。为了提高性能,评论应该作为帖子中的嵌入对象存在。

架构设计基础知识

Kyle Banker, 10gen

http://www.10gen.com/presentation/mongosf2011/schemabasics

索引和查询优化 Alvin Richards,企业工程高级总监

http://www.10gen.com/presentation/mongosf-2011/mongodb-indexing-query-optimization

**在我看来,这两个视频是有史以来最好的关于mongoddb的视频*


感谢提供视频链接!对于从关系型数据库转向NoSQL非常有帮助。 - Alex Okrushko

9
目前我已将AuthorId属性添加到博客文章实体中。这是存储对象之间关系的正确方法吗? 我认为不是。你应该以“去规范化”的方式(例如,博客文章、评论、标签等)将所需的一切内容存储在博客文档中。因此,如果您想显示作者的名称,应将其添加到博客文档中。这将允许使用单个查询获取整个页面的数据,这也是文档导向数据库的重点。

6
重命名用户会变得非常昂贵! - Blankman
2
@Blankman:没错。不过,我认为文档导向数据库的哲学是在一个查询中获取整个文档。顺便问一下,[重命名用户]与[显示博客文章]的比例是多少?我认为这非常低。 - Pascal Thivent
1
Pascal,在这种情况下是低级语言,但是假设你必须显示用户当前的积分。你需要再次调用才能获取最新数据,因为它很可能很快就会过时。 - Blankman
1
TTT的陈旧度可以接受,但分数不行!比如你正在阅读John Skeet一个月前的帖子,他的分数将会相差很远。分数必须接近实时,最多只能有1小时的延迟(如果这就是你所说的,我同意)。 - Blankman
1
@Blankman,你不必精确知道Jon Skeet有多少分。你可以显示一个四舍五入的数字,比如190k。这意味着只有当Jon Skeet再获得1000分时才需要更新。 - TTT
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接