首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo“手动引用”性能与传统DB的“表连接”相比

Mongo“手动引用”性能与传统DB的“表连接”相比
EN

Stack Overflow用户
提问于 2013-08-29 08:45:09
回答 1查看 413关注 0票数 2

根据正式文件:“手动引用”操作通常是首选的,有经验的人甚至建议不要使用DBref,那么当我想使用关系集合查询实体时,需要执行两次查询的性能损失有多大,特别是与传统的关系数据库相比--我们可以使用表联接在一个查询中检索预期的结果。

去Denormalize示例

代码语言:javascript
复制
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()来获取我们想要的任何东西:带有注释的博客文章属于它们。

规范化示例

代码语言:javascript
复制
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",
  } 
);

现在,如果我想获得关于一本书的完整信息,我必须手动查询两次,如下所示:

代码语言:javascript
复制
> var book =  db.books.find({ "name": { $regex: 'mongo*', $options: 'i' } })
> db.publishers.find({ _id: book.publisher_id })

我所知道的是:优先操作将由Mongo“内存中的”处理,但我将有以下总结问题:

简单地说:面向文档的数据库主张在一个查询中“去denormalize”检索结果,但是当我们不得不存储关系数据时,它“建议您使用”手动引用“,这意味着两次查询,而在关系数据库中,使用”表连接“只会有一次查询。

这对我来说毫无意义:)

EN

回答 1

Stack Overflow用户

发布于 2013-08-29 11:07:27

关系数据库还通过查询两个表来执行连接。但是它的优点是它可以在内部完成这一任务,而不必与客户端进行通信。它可以立即查询第二个表。

MongoDB首先需要将第一个查询的结果发送到客户端,然后应用程序才能制定第二个查询并将第二个查询发回数据库。这样做所浪费的时间是:

  1. 数据库服务器和应用服务器之间的网络延迟(一对毫秒)
  2. 在应用服务器上解析响应,并从中生成一个$in-query (一对-query)
  3. 应用服务器和数据库服务器之间的网络延迟(一对毫秒)

根据应用服务器和数据库服务器的互连程度,我们在这里讨论的是几毫秒的惩罚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18506158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档