Mongodb真正的基本用例

时间:2014-03-08 17:09:06

标签: mongodb nosql

我正在接近noSQL世界。 我在网上学习了一点(不是最好的学习方法!),我阅读了Mongodb文档。 在网络上,我无法找到一个真实的案例(只有大型架构上的花哨飞行没有得到很好的解释,或者太基本无法成为现实世界的例子)。

所以我对noSQL和Mongodb的理解还有一些很大的漏洞。

我试着总结其中一个,实际上最糟糕的一个,如下所示:

让我们想象一下简单博客结构帖子的数据结构:

{
"_id": ObjectId(),
"title": "Title here",
"body": "text of the post here",
"date": ISODate("2010-09-24"),
"author": "author_of_the_post_name",
"comments": [
              {
              "author": "comment_author_name",
              "text": "comment text",
              "date": ISODate("date")
              },
              {
              "author": "comment_author_name2",
              "text": "comment text",
              "date": ISODate("date")
              },
              ...
            ]
}

到目前为止一切顺利。

如果author_of_the_post没有改变他的名字(不考虑个人资料图片和说明),一切正常。 所有comment_authors都是一样的。

因此,如果我想考虑这种情况,我必须使用关系:

"authorID": <author_of_the_post_id>,

对于帖子的作者和

"authorID": <comment_author_id>,

评论作者。

但MongoDB在查询时不允许连接。因此,每个authorID都会有不同的查询。

如果我的博客文章中有100条评论会怎样?

1 query for the post
1 query to retrieve authors informations
100 queries to retrieve comments' authors informations

**total of 102 queries!!!**

我是对的吗?

在这里使用noSQL的优势在哪里? 在我的理解中,102使用连接查询VS 1更大的查询。

或者我错过了什么,有不同的方法来模拟这种情况?

感谢您的贡献!

2 个答案:

答案 0 :(得分:3)

你看到了这个吗?

http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/

听起来你正在做的事情并不是NoSQL的一个很好的用例。使用关系数据库进行基本数据存储以支持应用程序,使用NoSQL进行缓存等。

答案 1 :(得分:2)

  1. NoSQL数据库用于存储非敏感数据,例如帖子,评论......
  2. 您可以使用一个查询检索所有数据。示例:不要将过时的字段视为author_name,profile_picture_url或其他任何内容,因为它只是一个帖子,将来这篇文章将不会作为较新的帖子显示。但是,如果您想要更新字段,您有两种选择:
    • 第一种选择是使用某种工作服务。如果某些用户更改了他的用户名或个人资料图片,您将向您的服务提供某种信号,以便遍历所有帖子和评论,并将所有字段更新为新用户名。
    • 第二个选项使用authorId而不是作者名称,而不是2个查询,您将进行N + 2个查询以查询comment_author_profile。但是使用分页,而不是查询100条评论,然后显示&#34;加载更多&#34;按钮/链接,这样您就可以进行12次查询。
  3. 希望这有帮助。