gpt4 book ai didi

mysql - mongodb中的联合查询等价物

转载 作者:可可西里 更新时间:2023-11-01 09:58:21 27 4
gpt4 key购买 nike

好吧,我知道 NoSQL 数据库都是关于不使用联合进行查询的,但我就是无法理解某些概念。例如,假设我想要拥有多个作者和与作者相关的文章的博客,我将在 MySQL 中创建用户表:

Users: id, name, surname, nickname, password...
Articles: id, user_id, title, content, date, tags...

但我不确定在 MongoDB 中正确设置它的最佳方法是什么。我应该说:

db.users.insert({
id:1,
name: "Author name",
...
articles: [{id:1, article:1, title:"Article title", ...}, {...}, ...]
});

我应该做这样的事情吗?:

db.articles.insert(
{
...
article related stuff
...
user related stuff: {...}
);

或者也许我应该为文章和用户分别建立数据库?

如果我的主页将显示 10 篇最近的文章摘录以及作者数据,在 MySQL 中,我将执行联合查询以从作者表中获取作者昵称,并从文章表中获取标题和摘录。

我真的不确定如何在面向文档的数据库中表示我的数据。也许我应该在他的每篇文章中存储作者数据,但是如果作者更改了他的信息,则该作者的所有文章都需要更新。

在我看来,在 MongoDB 中创建单独的文档似乎合乎逻辑。一个将保存所有作者文档,一个将保存所有文章文档,但这同样需要某种联合操作来获取前 10 篇文章并从作者文档中获取作者数据。

好吧,也许有一些 map reduce 操作,但我不确定它会是什么样子。

非常感谢您对我的这个问题的想法和建议。谢谢!

[编辑]另外,如果我将所有文章保存在一个文档中,如果我是正确的话,每个文档的大小限制为 16 MB,这在大型网站的情况下会是一个问题,所以我想应该有单独的文章数据库?

最佳答案

正如@Pavel 已经提到的,我们假设您已经通过了 http://www.mongodb.org/display/DOCS/Schema+Design .

schema Design在MongoDB中完全是一个相对的概念,具体情况不同。你将如何设计集合,链接与嵌入实际上取决于你的数据架构、数据大小以及你想如何查询它。

如果作者信息不占用太多空间,我会说在文章文档中嵌入作者信息是个好主意。这对于查找来说会非常快,因为您可以在文章和作者上建立索引(即使它们是嵌入的)。

当作者更改他的信息时,更新他/她的信息集很容易。您只需要对在其作者列表中列出该作者的文章进行更新。特别是通过使用 $ (位置运算符)。 http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

但如果您担心大小和限制,那就是另一回事了。正如@Derick 提到的,16MB 很多,我的意思是很多。因此,如果您认为自己会达到极限,请选择单独的集合并进行链接。

据我所知,默认情况下 MongoDB 不提供跨多个集合的 MapReduce 功能,您最终可能会分几步完成,这会非常耗费资源。

MapReduce 不是非常适合生产使用。它最好由批处理过程使用,但对于实时聚合,您最好提出不同的解决方案(根据您的需要量身定制)并对其进行基准测试。有时在脚本端(Python、PHP 等)查找文档和进行聚合会更快。

最后,我只想说,无论 MongoDB 和 NoSQL 总体上多么漂亮、快速和时尚,但它们可能不是所有问题的答案。有些问题最好通过传统的关系方法来解决。

关于mysql - mongodb中的联合查询等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10522050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com