【问题标题】:Handle multiple query those are exactly same in mongodb处理在 mongodb 中完全相同的多个查询
【发布时间】:2019-03-31 20:19:27
【问题描述】:

假设我最近有 1000 个 db.collection.find() 查询,这些都是相同的查询。

但是这些查询是由不同的 1000 个用户进行的,所以 MongoDB 有不同的 1000 个查询。

所以我的问题是 MongoDB 将单独处理每个查询,或者 MongoDB 将利用预处理的查询结果。

【问题讨论】:

    标签: database mongodb mongoose


    【解决方案1】:

    服务器端有文档缓存 (documentation),因此您的 I/O 系统不太可能被一次又一次地击中。此外,查询计划被缓存(documentation)。也就是说,结果不会被缓存,文档中也有说明(第一个链接):

    MongoDB 不会缓存查询结果,以便返回相同查询的缓存结果。

    【讨论】:

    • 所以,如果我们想首先访问查询,那么我们需要从我们这边进行维护,这将检查即将到来的查询是否已经获取,然后从这里发送结果,否则将此查询发送到 mongo获取记录
    • 是的,如果您想缓存结果,您需要自己维护该缓存。
    【解决方案2】:

    所以我的问题是 MongoDB 会单独处理每个查询?

    是的。每个查询都会执行。您可以在mongostat 中验证这一点

    MongoDB 将利用预处理的查询结果

    MongoDB会将经常使用的数据和索引添加到内存中的working set

    它还将为您的查询缓存最有效的计划,如其query planner doc. 中所述

    【讨论】:

    • MongoDB 从经过预处理的查询中脱颖而出
    • MongoDB 使用高效的索引获胜计划。是的,它每次都会运行每个查询。
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2018-03-13
    • 2020-07-20
    • 2012-01-27
    相关资源
    最近更新 更多