假设我收集的文档中分布着 100 种狗。如果我需要按狗的类型进行分组,然后计算有关每种类型的狗的一些汇总统计信息,为什么要执行涉及 的查询($group
原则上按顺序处理每个文档),而不是向数据库发送 100 个单独的同步查询,其中每个查询基于关于狗的类型?
100 个同时、单独的查询不是更快吗?
如果它速度更快、规模更大,那么不这样做会有什么缺点(如果有的话)?
假设我收集的文档中分布着 100 种狗。如果我需要按狗的类型进行分组,然后计算有关每种类型的狗的一些汇总统计信息,为什么要执行涉及 的查询($group
原则上按顺序处理每个文档),而不是向数据库发送 100 个单独的同步查询,其中每个查询基于关于狗的类型?
100 个同时、单独的查询不是更快吗?
如果它速度更快、规模更大,那么不这样做会有什么缺点(如果有的话)?
这不一定是真的。当您正确构建数据库时,数据库引擎旨在针对此类操作进行优化。数据库引擎的并行性和基于集合的操作与顺序处理不同。
您提供的信息(即完整的查询)越多,并且依赖于在数据库层处理的数据库操作,它在处理和提供结果方面的效率就越高。该引擎根据其手头的所有信息提出一个计划,以它认为的最佳方式执行。
一般来说,不会,因为我上面说的。从并发角度和硬件瓶颈来看,这 100 个同时查询也会产生开销,例如与仅从单个查询返回最终处理结果集相比,通过网络返回更多数据。
然后,您最终还需要重新组装这 100 个查询结果,并在应用程序层中进行聚合,这通常比让优化的数据库引擎以它所知道的最有效的方式为您完成这项工作的性能要低。