2017-10-21 78 views
0

je suis nouveau dans mongodb et je suis confronté à un problème,
j'ai autour des millions de documents dans ma collection
et je suis en train de trouver une entrée unique en utilisant findOne ({}) commande
et quand je suis en train de trouver des entrées récentes alors la réponse est dans miliseconds
mais quand je suis en train de chercher les entrées plus anciennes dans le document 600 millionième alors il prend environ 2 minutes shell mongo
et mon serveur de noeud donnemongodb prendre trop de temps pour les anciennes entrées

{ MongoErro : connection 1 to 127.0.0.1:27017 timed out } 

et mon serveur nodejs envoie une réponse vide.
quelqu'un peut me dire ce que dois-je faire pour résoudre ce problème
Merci à l'avance

expliquer me donne

db.contacts.find({"phoneNumber":"9165900137"}).explain("executionStats") 
{ 
     "queryPlanner" : { 
       "plannerVersion" : 1, 
       "namespace" : "meanApp.contacts", 
       "indexFilterSet" : false, 
       "parsedQuery" : { 
         "phoneNumber" : { 
           "$eq" : "9165900137" 
         } 
       }, 
       "winningPlan" : { 
         "stage" : "COLLSCAN", 
         "filter" : { 
           "phoneNumber" : { 
             "$eq" : "9165900137" 
           } 
         }, 
         "direction" : "forward" 
       }, 
       "rejectedPlans" : [ ] 
     }, 
     "executionStats" : { 
       "executionSuccess" : true, 
       "nReturned" : 1, 
       "executionTimeMillis" : 321188, 
       "totalKeysExamined" : 0, 
       "totalDocsExamined" : 495587806, 
       "executionStages" : { 
         "stage" : "COLLSCAN", 
         "filter" : { 
           "phoneNumber" : { 
             "$eq" : "9165900137" 
           } 
         }, 
         "nReturned" : 1, 
         "executionTimeMillisEstimate" : 295230, 
         "works" : 495587808, 
         "advanced" : 1, 
         "needTime" : 495587806, 
         "needYield" : 0, 
         "saveState" : 3871779, 
         "restoreState" : 3871779, 
         "isEOF" : 1, 
         "invalidates" : 0, 
         "direction" : "forward", 
         "docsExamined" : 495587806 
       } 
     }, 
     "serverInfo" : { 
       "host" : "li1025-15.members.linode.com", 
       "port" : 27017, 
       "version" : "3.2.16", 
       "gitVersion" : "056bf45128114e44c5358c7a8776fb582363e094" 
     }, 
     "ok" : 1 
} 
+0

Vous devez fournir des détails, comme votre requête, vos index, les résultats du 'explain' que vous avez déjà exécuté, comment les dupes ici sur SO n'étaient pas suffisamment utiles, etc. –

+0

Voter pour cette question ne fait aucune sens-c'est équivalent à dire «pourquoi mon programme ne fonctionne-t-il pas?» et peu d'autre. Il n'y a aucune information ici que n'importe qui pourrait utiliser pour aider au-delà des questions typiques et dupliquer "comment je fais vite mongo" ici et sur le web. Il n'y a peut-être pas de raisons de baisser les prix, mais il y a certainement des raisons de ne pas les remettre en question. –

+0

Et vos indices? expliquer le résultat? Etc. –

Répondre

0

Comme indiqué dans les expliquer les résultats du plan, la requête en cours est en train de faire balayage Collection. Cela signifie qu'il doit scanner chaque document en collection pour produire la correspondance et que vous avez environ un demi-milliard de documents.

Essayez d'ajouter cet index et cela peut prendre un peu de temps pour le créer.

db.contacts.createIndex ({phoneNumber: 1}, {background: true})

Exécutez la requête une fois que la création d'index est réussie, vous devez voir une amélioration spectaculaire des performances. Pour être certain que l'index a été récupéré, essayez de nouveau d'expliquer et il ne devrait plus dire COLLSCAN.

+0

Des questions ou des commentaires sur la réponse fournie? Sinon, acceptez la réponse (la petite coche) – dilsingi