根据正式文件:“手动引用”操作通常是首选的,有经验的人甚至建议不要使用DBref,那么当我想使用关系集合查询实体时,需要执行两次查询的性能损失有多大,特别是与传统的关系数据库相比--我们可以使用表联接在一个查询中检索预期的结果。
去Denormalize示例
db.blogs.insert({
_id: 1,
title: "Investigation on MongoDB",
content: "some investigation contents",
post_date: Date.now(),
permalink: "http://foo.bar/investigation_on_mongodb",
comments: [
{ content: "Gorgeous post!!!", nickname: "Scott", email: "foo@bar.org", timestamp: "1377742184305" },
{ content: "Splendid article!!!", nickname: "Guthrie", email: "foo@bar.org", timestamp: "1377742184305" }
]}
)我们可以简单地使用: db.blogs.find()来获取我们想要的任何东西:带有注释的博客文章属于它们。
规范化示例
db.books.insert({
_id: 1,
name: "MongoDB Applied Design Patterns",
price: 35,
rate: 5,
author: "Rick Copeland",
ISBN: "1449340040",
publisher_id: 1,
reviews: [
{ isUseful: true, content: "Cool book!", reviewer: "Dick", timestamp: "1377742184305" },
{ isUseful: true, content: "Cool book!", reviewer: "Xiaoshen", timestamp: "1377742184305" }
]
}
);
db.publishers.insert({
_id: 1,
name: "Packtpub INC",
address: "2nd Floor, Livery Place 35 Livery Street Birmingham",
telephone: "+44 0121 265 6484",
}
);现在,如果我想获得关于一本书的完整信息,我必须手动查询两次,如下所示:
> var book = db.books.find({ "name": { $regex: 'mongo*', $options: 'i' } })
> db.publishers.find({ _id: book.publisher_id })我所知道的是:优先操作将由Mongo“内存中的”处理,但我将有以下总结问题:
简单地说:面向文档的数据库主张在一个查询中“去denormalize”检索结果,但是当我们不得不存储关系数据时,它“建议您使用”手动引用“,这意味着两次查询,而在关系数据库中,使用”表连接“只会有一次查询。
这对我来说毫无意义:)
发布于 2013-08-29 11:07:27
关系数据库还通过查询两个表来执行连接。但是它的优点是它可以在内部完成这一任务,而不必与客户端进行通信。它可以立即查询第二个表。
MongoDB首先需要将第一个查询的结果发送到客户端,然后应用程序才能制定第二个查询并将第二个查询发回数据库。这样做所浪费的时间是:
根据应用服务器和数据库服务器的互连程度,我们在这里讨论的是几毫秒的惩罚。
https://stackoverflow.com/questions/18506158
复制相似问题