MongoDB - 为什么要在文档中嵌入文档

时间:2011-12-26 01:44:42

标签: mongodb nosql

我希望将MongoDB用于我的数据库实现。为什么要在文档中嵌入文档?

2 个答案:

答案 0 :(得分:4)

这是在关系数据库中执行JOIN操作的一种方法(在MongoDB中无法做到的事情)。

例如,您可以将MongoDB文档作为博客文章,并在其中嵌入注释列表。

然后你可以(例如):

  • 在一个查询中加载帖子和评论
  • 搜索有回复的帖子
  • 按用户A搜索有用户B回复的帖子
  • 以原子方式更新单个交易中的帖子和评论

如果评论作为单独的文件存储在他们自己的集合中,那么所有这些都是不可能的(或者至少是困难的)。

答案 1 :(得分:2)

简单来说,如果它不是顶级对象,则嵌入,如果它没有复杂关系,如果你没有嵌入会有很多重复数据,如果你的文件变大,那么几兆字节。

取自MongoDB网站:http://www.mongodb.org/display/DOCS/Schema+Design

最佳实践摘要

  • 嵌入“顶级”对象,位于顶层,通常有自己的集合。
  • 通常嵌入订单项详细信息对象。
  • 通常应嵌入跟随对象建模“包含”关系的对象。
  • 通常通过链接来完成多对多关系。
  • 只有少数对象的集合可以安全地作为单独的集合存在,因为整个集合可以快速缓存在应用程序服务器内存中。
  • 嵌入对象比集合中的“顶级”对象更难链接。
  • 获取嵌入对象的系统级视图更加困难。需要时,可以使用MongoDB的map / reduce工具执行此类操作。
  • 如果要嵌入的数据量很大(很多兆字节),您可能会达到单个对象大小的限制。另见GridFS。
  • 如果性能问题,请嵌入。