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

mongodb groupby lent même après l'ajout de l'index

Comme vous pouvez le voir dans la requête que vous avez écrite, ce type d'agrégation dans 2.0 nécessite que vous exécutiez Map/Reduce. Map/Reduce sur MongoDB a quelques pénalités de performance qui ont été couvertes sur SO avant - fondamentalement, à moins que vous ne puissiez paralléliser sur un cluster, vous allez exécuter du javascript à un seul thread via Spidermonkey - pas une proposition rapide. L'index, puisque vous n'êtes pas sélectif, n'aide pas vraiment - il vous suffit de scanner l'intégralité de l'index ainsi que potentiellement le document.

Avec la sortie imminente de 2.2 (actuellement en rc1 au moment d'écrire ceci), vous avez cependant quelques options. Le framework d'agrégation (qui est Map/Reduce natif et non basé sur JS) introduit dans 2.2 a un opérateur de groupe et a été créé spécifiquement pour accélérer ce type d'opération dans MongoDB.

Je recommanderais d'essayer 2.2 et de voir si vos performances en matière de regroupement s'améliorent. Je pense que cela ressemblerait à ceci (note :non testé) :

db.alarm.aggregate(
    { $group : {
        _id : "$serverName",
        count : { $sum : 1 }
    }}
);