MongoDB 'count()' est très lent. Comment affiner/travailler avec elle?
Je suis actuellement en utilisant MongoDB avec des millions d'enregistrements de données. J'ai découvert une chose qui est assez ennuyeux.
Lorsque j'utilise 'count()' de la fonction avec un petit nombre d'interrogés collecte de données, il est très rapide. Toutefois, lorsque la requête de la collecte de données contient des milliers, voire des millions d'enregistrements de données, l'ensemble du système devient très lent.
J'ai fait en sorte que j'ai répertorié les champs requis.
Personne n'a rencontré une identique chose? Comment faites-vous pour l'améliorer?
Vous devez vous connecter pour publier un commentaire.
Il y a maintenant une autre optimisation de la création de leur propre index.
Si vous avez besoin de quelques comptoirs je suggère de précalculer chaque fois que c'est possible. En utilisant atomique $inc opération et de ne pas utiliser
count({})
à tous.Mais mongodb les gars qui travaillent dur sur mongodb, donc,
count({})
améliorations, ils sont la planification dans mongodb 2.1 selon jira bug.ensureIndex
était obsolète depuis la version 3.0. UtilisationcreateIndex
à la place.Vous pouvez vous assurer que l'index est vraiment utilisé sans aucun accès au disque.
Disons que vous voulez compter le nombre d'enregistrements avec le nom : "Andrei"
Vous assurer de l'index sur le nom (comme vous l'avez fait)
et
vous pouvez vérifier que c'est le moyen le plus rapide de compter (sauf avec precomputing) en vérifiant si
affiche un index_only champ est défini sur true.
Cette astuce va vous assurer que votre requête permettra de récupérer uniquement les enregistrements à partir de la mémoire (index) et non pas à partir du disque.
index_only
pour une opération commecount
, par défaut, puis c'est des sons un peu comme un bug pour moi.Pour moi la solution a été de changer l'indice de éparses.
Il dépend de la situation spécifique, juste lui donner un essai si vous le pouvez.
318 milliers d'enregistrements dans la collection
Vous êtes assez bien pas de chance pour l'instant, le comte de mongodb est terrible et ne sera pas obtenir de mieux dans le proche avenir. Voir: https://jira.mongodb.org/browse/SERVER-1752
De l'expérience, vous devriez assez bien ne jamais l'utiliser, sauf si c'est une chose, quelque chose qui se produit très rarement, ou votre base de données est assez petit.
Comme @Andrew Orsich a déclaré, à l'utilisation des compteurs à chaque fois que possible (la chute de compteurs mondial de verrou en écriture, mais mieux que count (), peu importe).