2013-01-08 1 views
0

Je suis désolé de vous déranger à propos d'un problème de pilote MongoDb pour Cshare (Samus), Pourriez-vous nous aider? pour jeter un coup d'oeil.MonoDb Cshare Samus Utilisation Collection.Count <T> (func) ou shell db.collection.find (condition) .count() très lent

using (Mongo mongo = new Mongo(config.BuildConfiguration())) 
     { 
      mongo.Connect(); 
      try 
      { 
       var db = mongo.GetDatabase("MyCollection");//Collection 's count > 500,000,000 
       var collection = db.GetCollection<BasicData>(); 
       Console.WriteLine("Count by LINQ on typed collection: {0}", collection.Linq().Count(x => x.Id > 1));////error ,timeout  
       Console.WriteLine("Count by not LINQ on typed collection: {0}", collection.Count()); //no condition is ok     
       Console.ReadKey(); 
      } 
      finally{ 
       mongo.Disconnect(); 
      } }  

utilisation coque mongodb:

db.collection.find (condition) .count() ou db.collection.count (condition); // très lent

Répondre

2

S'il est également lent dans le shell, il n'a rien à voir avec le pilote C#. Utilisez explain pour déterminer si votre requête utilise l'index que vous attendez. S'il n'utilise pas d'index, toute requête sur des documents 500M prendra du temps. Dans la coquille:

db.collection.find(condition).explain(); 

Pour accélérer votre requête, vous devrez probablement ajouter un index qui comprend les champs de la requête condition vous utilisez des références.

+0

merci, j'ai créé l'index de données pour l'interrogation. La mémoire est 64G dans mon serveur, mais la requête est toujours lente (seule compte lentement la requête, l'autre requête de fonction est normale), pourriez-vous aider à trouver une autre méthode pour résoudre ce problème? – cow

+0

À quoi ressemblent vos documents? Quel indice avez-vous créé? Que contient 'condition'? Avez-vous attendu que l'index ait fini d'être créé? – JohnnyHK