Mongodb-嵌入式vs索引

Mongodb-嵌入式vs索引,mongodb,indexing,Mongodb,Indexing,我的问题很简单。我正在使用mongodb构建我的第一个应用程序。到目前为止,我一直使用sql。我读过很多关于嵌入文档和链接文档的信息 我向mongodb的老手们提出的问题是:如果我使用与嵌入式文档相关的索引链接/查询,在速度/性能方面是否存在巨大差异?如果有巨大的差异,你能解释一下原因吗?多谢各位 再说一次,我是mongodb的新手,只是不想走错一步。多谢各位 是的,引用和嵌入文档之间存在巨大差异 嵌入文档与文档的其余字段存储在同一磁盘位置的文档中,因此在查询整个文档时,没有额外的网络往返或磁盘

我的问题很简单。我正在使用mongodb构建我的第一个应用程序。到目前为止,我一直使用sql。我读过很多关于嵌入文档和链接文档的信息

我向mongodb的老手们提出的问题是:如果我使用与嵌入式文档相关的索引链接/查询,在速度/性能方面是否存在巨大差异?如果有巨大的差异,你能解释一下原因吗?多谢各位


再说一次,我是mongodb的新手,只是不想走错一步。多谢各位

是的,引用和嵌入文档之间存在巨大差异

嵌入文档与文档的其余字段存储在同一磁盘位置的文档中,因此在查询整个文档时,没有额外的网络往返或磁盘寻求检索嵌入文档

另一方面,DBRefs只是另一个集合中文档的_id。这将需要额外的往返和额外的磁盘来获取“链接”文档。请参见此处的DBREF规范:


您应该尝试通过在单个文档中包含满足该查询所需的所有信息来优化最常见的查询。

接下来的问题是,嵌入的文档是否有自己的大小限制,还是会增加父文档的大小?我担心如果所有文档都被嵌入,那么父文档可能会达到大小限制?这是可能的还是我不必担心的?谢谢。例如,如果我正在建立联系人列表。我有一个名为“用户”的父文档,该用户文档有一个名为“联系人”的嵌入文档。如果用户有50000个联系人,是否有问题?这会导致尺寸问题吗。或者更好地说,假设用户正在跟踪“联系人”、“交易”、“日期”等,所有这些都嵌入到用户文档中。如果家长/用户有50000个联系人、10000个交易、30000个日期/约会等,这可能会使他们的家长/用户文档变得庞大。请告知。谢谢。好的。另一个问题是,如果嵌入了内容,则无法跨记录运行报告。例如,假设每个父记录都有嵌入的事务记录,并且您希望为公司中的所有事务运行一个报告(不是特定于用户的),如果嵌入了这些记录,这是不容易做到的。是否正确?是的,嵌入文档作为一个整体包含在文档的大小限制中。不过,在大多数合理的应用程序中,16MB的文档大小并不是您想要达到的。詹姆斯国王的《圣经》是4MB的纯文本。至于报告,我建议你构造你的文档,这样最常见的查询速度就快了。您可以在嵌入式文档上运行报告,您只需要在应用程序代码中做一些工作。例如,要计算联系人总数,在Python中:
sum(len(user['contacts']),用于db.users.find()中的用户)
与SQL不同,MongoDB的查询语言并不用于完成所有聚合数据的工作,复杂报告的一些逻辑将出现在应用程序代码中。MongoDB 2.1的聚合框架将使数据库本身能够生成更复杂的报告。数据库用户