mysql - 每个请求可以多次查询 MongoDB 吗?

标签 mysql mongodb database nosql

来自 RDBMS 背景,我一直有这样的印象:“尽量使用一个查询,假设它是有效的”,这意味着您向数据库发出的每个请求都代价高昂。对于 MongoDB,这似乎是不可能的,因为您无法连接表。

我知道它不应该是关系型的,但他们也在插入它用于博客、论坛等目的,以及我发现 RDBMS 更容易处理的东西。

我在尝试了解 MongoDB 或 NoSQL 的总体效率时遇到了一些问题。如果我想获取与某些用户相关的所有“帖子”(就像他们被分组一样)......使用 MySQL 我可能会做一些连接并得到它。

在 MongoDB 中,假设我需要单独的集合,使用大的 $in: ['user1', 'user2', 'user3', 'user4', ...] 是否有效?

这种方法一段时间后会变慢吗?如果我包括 1000 个用户? 如果我需要获取与用户 X、Y、Z 相关的帖子列表,使用 MongoDB 来做是否高效和/或快速:

  • 获取用户数组
  • 在用户数组中获取帖子

一个请求的 2 个查询。在 NoSQL 中这是不好的做法吗?

最佳答案

回答关于$in....的问题。

我对以下场景进行了一些性能测试:

~2400 万个文档集合
根据键(索引)查找其中的 100 万个文档
使用 .NET 的 CSharp 驱动程序

结果:
一次查询1个,单线程:109s
一次查询1个,多线程:48s
使用$in一次查询100K,单线程=20s
使用 $in 一次查询 100K, multi threaded=9s

使用较大的 $in(限制为最大查询大小)会显着提高性能。

更新: 继下面的评论之后,关于 $in 如何处理不同的 block 大小(查询多线程):

一次查询10个(100000个批处理)= 8.8s
一次查询100个(10000个批处理)=4.32s
一次查询1000个(1000个批处理)=4.31s
一次查询10000个(100个批处理)=8.4s
一次查询100000个(10个批处理)= 9s(根据上面的原始结果)

因此,在 $in 子句中批处理多少值与往返次数之间确实存在一个最佳点

关于mysql - 每个请求可以多次查询 MongoDB 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157265/

相关文章:

mysql - 功能:表作为返回值

node.js - 使用 mongoose 时, Node 和 mongo 之间有大量连接是否正常?

mongodb - 仲裁者不接受连接

Mysql返回从大到小的结果

php - 在 select mysql 上连接数据和文本

mongodb - java.lang.NoClassDefFoundError : com/mongodb/ServerAddress

没有语法错误时出现 MySQL 1064 语法错误

javascript - 定时规划Mysql数据库清理

php - MySQL 与 RAND() 和 1 DESC 相关的问题?

php - 从时间戳中选择日期 php mysql