来自 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/