多个Mongo聚合查询性能提升

问题描述 投票:0回答:1

我有 5 个 mongo db 聚合器查询。每个查询都有相同的组部分但不同的匹配条件。 例如:

1- count records by email
2- count records by phone
3- count records by xxx...
db.getCollection("myCol").aggregate([
    {
        "$match": {
                   
               { "contact.email": "[email protected]" }
                 //.. some more conditions       
                
        }
    }
    {
        "$group": {
            "_id": "$myId",
            "count": { "$sum": 1 }
        }
    }
    
])

每个查询都非常快(因为正在扫描索引),但由于我需要多次调用这组 5 个查询(比如 5* 37),所以它使得端到端 api 非常慢。

mongo db 中最好的方法是什么?因为我对 mongoDB 不太期待。

请问有什么建议吗?

mongodb
1个回答
0
投票

让我们分解一下您所描述的性能区域:

  1. 应用程序网络(客户端 -> 应用程序调用)
  2. 数据库网络(应用程序 -> 数据库调用)
  3. 数据库处理。

您希望能够分别减少它们中的每一个。


让我们从您询问的第 3 点开始。

这里 Mongo 必须单独扫描每个索引树来对文档进行计数,因此无论是 37 次不同的调用,还是使用聚合的 1 次调用都没有关系。


对于第#2点

这里的调用量确实很重要,因为每次向数据库发送请求并等待它返回都会产生开销,这就是像 bulkWrite 这样的操作存在的原因 - 因此您可以在保存数据的同时执行多个更新网络开销。

在您的情况下,您只想确保使用单个聚合管道进行单个数据库调用。


#1 不言而喻,我假设客户已经发送了一个呼叫,但在这种情况下他没有更改它。

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.