【发布时间】:2019-03-31 20:19:27
【问题描述】:
假设我最近有 1000 个 db.collection.find() 查询,这些都是相同的查询。
但是这些查询是由不同的 1000 个用户进行的,所以 MongoDB 有不同的 1000 个查询。
所以我的问题是 MongoDB 将单独处理每个查询,或者 MongoDB 将利用预处理的查询结果。
【问题讨论】:
假设我最近有 1000 个 db.collection.find() 查询,这些都是相同的查询。
但是这些查询是由不同的 1000 个用户进行的,所以 MongoDB 有不同的 1000 个查询。
所以我的问题是 MongoDB 将单独处理每个查询,或者 MongoDB 将利用预处理的查询结果。
【问题讨论】:
服务器端有文档缓存 (documentation),因此您的 I/O 系统不太可能被一次又一次地击中。此外,查询计划被缓存(documentation)。也就是说,结果不会被缓存,文档中也有说明(第一个链接):
MongoDB 不会缓存查询结果,以便返回相同查询的缓存结果。
【讨论】:
所以我的问题是 MongoDB 会单独处理每个查询?
是的。每个查询都会执行。您可以在mongostat 中验证这一点
MongoDB 将利用预处理的查询结果
MongoDB会将经常使用的数据和索引添加到内存中的working set
它还将为您的查询缓存最有效的计划,如其query planner doc. 中所述
【讨论】: