MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Accélérez l'agrégation MongoDB

Il existe actuellement certaines limitations dans ce que le framework d'agrégation peut faire pour améliorer les performances de votre requête, mais vous pouvez l'aider de la manière suivante :

db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

En ajoutant un tri sur LOG_TYPE, vous "forcerez" l'optimiseur à utiliser un index sur LOG_TYPE pour mettre les documents en ordre. Cela améliorera les performances de plusieurs manières, mais différemment selon la version utilisée.

Sur des données réelles, si les données entrant dans la phase de groupe $ sont triées, cela améliorera l'efficacité de l'accumulation des totaux. Vous pouvez voir les différents plans de requête où, avec $sort, il utilisera l'index de clé de partition. L'amélioration que cela apporte aux performances réelles dépendra du nombre de valeurs dans chaque "seau" - en général, LOG_TYPE n'ayant que sept valeurs distinctes en fait une clé de partition extrêmement médiocre, mais cela signifie qu'il est fort probable que le code suivant sera un beaucoup plus rapide que l'agrégation même optimisée :

db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});