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

MongoDB :trouver le temps d'exécution de la commande count() sur des millions d'enregistrements dans une collection ?

MongoDB a un profileur intégré que vous pouvez activer via :

db.setProfilingLevel(2)

Au lieu de "2", vous pouvez choisir n'importe quelle option dans la liste ci-dessous :

  • 0 - le profileur est éteint, ne collecte aucune donnée. mongod écrit toujours les opérations plus longues que le seuil slowOpThresholdMs dans son journal.
  • 1 - collecte les données de profilage pour les opérations lentes uniquement. Par défaut, les opérations lentes sont celles qui prennent moins de 100 millisecondes. Vous pouvez modifier le seuil des opérations « lentes » avec l'option d'exécution slowOpThresholdMs ou la commande setParameter. Consultez la section Spécifier le seuil pour les opérations lentes pour plus d'informations.
  • 2 - collecte des données de profilage pour toutes les opérations de base de données.

Et vous pouvez voir les résultats de vos requêtes en vérifiant le system.profile collecte dans MongoDB..

MODIF :

Si vous souhaitez tester les performances, vous pouvez utiliser les extraits de code suivants qui peuvent être exécutés à partir de la console mongo :

> for (var i = 0; i < 10000000; ++i) { db.countTest.insert({a: i % 10}) }
> db.countTest.ensureIndex({a:1})
> db.countTest.count({a: 1})
> db.countTest.count()
> db.countTest.find().count()

Et mes conclusions sont les suivantes :

  1. ajouter un index (en dehors de l'identifiant) a renvoyé le nombre de 10 millions d'enregistrements en environ 170 ms
  2. comptage par identifiant (compter sans aucune requête) a renvoyé le compte en moins d'une milliseconde
  3. comptage par identifiant avec le curseur (notez que le .find() agira comme un curseur sur la collection) a renvoyé le décompte en moins d'une milliseconde

Ainsi, plus d'index votre collection a votre requête sera plus lente . Si vous comptez par _id, ce sera instantané , si vous avez un index composite il sera dimensionné en fonction du nombre d'index .