【发布时间】:2012-02-21 20:38:24
【问题描述】:
我的问题很简单。我正在使用 mongodb 构建我的第一个应用程序。到目前为止,我一直使用 sql。我已经阅读了很多关于嵌入文档与链接文档的信息。
我对 mongodb 资深人士的问题是:如果我使用与嵌入式文档对应的索引链接/查询,速度/性能是否会有巨大差异?如果有很大的不同,你能解释一下为什么吗?谢谢。
再次,我是 mongodb 的新手,只是不想走错路。谢谢你。
【问题讨论】:
我的问题很简单。我正在使用 mongodb 构建我的第一个应用程序。到目前为止,我一直使用 sql。我已经阅读了很多关于嵌入文档与链接文档的信息。
我对 mongodb 资深人士的问题是:如果我使用与嵌入式文档对应的索引链接/查询,速度/性能是否会有巨大差异?如果有很大的不同,你能解释一下为什么吗?谢谢。
再次,我是 mongodb 的新手,只是不想走错路。谢谢你。
【问题讨论】:
是的,参考文献和嵌入式文档之间存在巨大差异。
嵌入的文档与文档的其余字段存储在in相同的磁盘位置,因此在查询时无需额外的网络往返或磁盘搜索来检索嵌入的文档整个文档。
另一方面,DBRefs 只是另一个集合中文档的 _id。获取“链接”文档将需要额外的往返和额外的磁盘搜索。在此处查看 DBRefs 的规范:
http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef
您应该尝试通过在单个文档中包含满足该查询所需的所有信息来优化您最常见的查询。
【讨论】:
sum(len(user['contacts']) for user in db.users.find()) 与 SQL 不同,MongoDB 的查询语言并非旨在完成所有聚合数据的工作,一些复杂报告的逻辑将在您的应用程序代码中。 MongoDB 2.1 的聚合框架将使更复杂的报表在数据库本身成为可能。 db.users