可以根据请求多次查询MongoDB吗?

Mat*_*ick 20 mysql database mongodb nosql

来自RDBMS背景,我总是在"尽可能努力地使用一个查询,假设它有效",这意味着对于您对数据库的每个请求都是昂贵的.说到MongoDB,似乎这可能是不可能的,因为你不能连接表.

我知道它不应该是关系型的,但它们也会推动它用于博客,论坛以及我发现RDBMS更容易接近的目的.

我曾试图了解MongoDB或NoSQL的效率.如果我想获得与某些用户相关的所有"帖子"(就像它们被分组一样)......使用MySQL我可能会做一些连接并得到它.

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

一段时间后,这种方法会变慢吗?如果我包含1000个用户?如果我需要获得与用户X,Y,Z相关的帖子列表,那么使用MongoDB进行以下操作是否有效和/或快速:

  • 获取用户数组
  • 获取帖子IN用户数组

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

Ada*_*Dev 38

要回答有关$ in的问题....

我用以下场景做了一些性能测试:

集合中大约2400万个文档
查找基于密钥(索引)的100万个文档
使用.NET中的CSharp驱动程序

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

因此使用大的$ in(限制为最大查询大小)明显更好的性能.

更新: 继续下面的评论,关于$ in使用不同的块大小执行(查询多线程):

一次查询10个(100000个批次)=
8.8个一次查询100个(10000个批次)= 4.32
个一次查询1000个(1000个批次)= 4.31
个一次查询10000个(100个批次)= 8.4个
查询100000个一次(10批次)= 9s(每个原始结果)

因此,对于批量加入$ in子句的数量与往返次数相比,看起来确实是一个甜蜜点

  • @Lucas Zamboulis - 请参阅上面的更新.我可能最终会在博客文章中做更多详情 (3认同)
  • @AdaTheDev:如果你很容易做到的话,我认为看看$ in scale是多么有趣,重复实验"一次使用$ in X",单线程和多线程,其中X是10,然后是20,然后是30,......然后是100. (2认同)