Comment puis-je définir un délai d'attente sur une Mangouste requête?
Je suis à l'aide de la Mangouste avec une très grande base de données Mongo, et je veux coûteux requêtes comme MySet.find({})
de temps après 10 secondes.
J'ai essayé de fixer un délai d'attente du socket sur ma connexion, mais le serveur se bloque si le délai d'attente est dépassé:
var options = {server: {socketOptions: {socketTimeoutMS: 10000}}};
var conn = mongoose.connect('mongodb://localhost/my_db', options);
J'ai essayé de passer le maxTimeMS option pour le trouver fonction, mais qui n'ont pas le moindre effet:
MySet.find({}, {}, {timeout: true, maxTimeMS: 10000}, function(err, doc) {});
Des idées?
Êtes-vous à l'aide de MongoDB 2.6 ou supérieur?
Ressemble à de la Mangouste de soutien pour la
La mangouste est à 3.8.24
MySet.find({}, {}, {maxTime: 10}, function(err, doc) {}) genre de travaux, mais seulement pour de petites valeurs de maxTime. Au début, je pensais que maxTime prend que quelques secondes ou peut-être dixièmes de seconde, mais la valeur 10 est-il temps de sortir pratiquement instantanément, et la valeur 100 en fait jamais.
mongo --version
dit MongoDB shell version: 2.6.8
.Ressemble à de la Mangouste de soutien pour la
maxTimeMS
option a été ajouté en 3.8.13. Quel est votre Mangouste version?La mangouste est à 3.8.24
MySet.find({}, {}, {maxTime: 10}, function(err, doc) {}) genre de travaux, mais seulement pour de petites valeurs de maxTime. Au début, je pensais que maxTime prend que quelques secondes ou peut-être dixièmes de seconde, mais la valeur 10 est-il temps de sortir pratiquement instantanément, et la valeur 100 en fait jamais.
OriginalL'auteur Alex Henrie | 2015-03-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela avec le
Query#maxTime
méthode qui n'est pas documenté dans la Mangouste lui-même, mais fait partie de lamquery
bibliothèque Mangouste utilise pour ses fluent interface de requête.Donc dans votre cas, vous diriez que:
Vous pouvez vérifier qu'elle est correctement réglage de la
maxTimeMS
option par l'activation de la Mangouste de débogage viamongoose.set('debug', true);
, et ensuite vous pourrez voir la sortie de la console pour cette requête qui ressemble à:populate()
ainsi? Comme ici: stackoverflow.com/questions/42398696/...Est-il une option pour ajouter cette maxTime globalement à toutes les requêtes sur?
OriginalL'auteur JohnnyHK
TL;DR:
Vous pouvez tester avec cette requête :
Pourquoi ça marche:
Vous pouvez utiliser Requête modificateurs
Et surtout celui-ci : $maxTimeMS
Être prudent : cet opérateur est obsolète dans mongo Shell depuis la v3.2
OriginalL'auteur Yoluk
Je pense que cela devrait fonctionner.
db.mycoll.find().maxTimeMS(50)
OriginalL'auteur Kaushal
C'est le modèle que j'ai commencé à utiliser beaucoup.
De cette façon, j'ai un délai d'attente par défaut appliquée à la plupart des demandes, mais si j'ai besoin d'ajuster sur un appel alors que je peux. Ou j'ai peut être mis au courant de zones qui ont besoin d'une meilleure indexation.
'
.OriginalL'auteur bcbrian
J'ai enfin réussi à le faire fonctionner. J'ai d'abord empêcher le serveur à partir de la plante lors de la prise de courant (c'est à dire une requête) fois:
Ensuite, chaque fois que je veux interroger la base de données, j'ai déconnecter et se reconnecter à la base de données, réglage socketTimeoutMS à 10000:
Cette coupe de la requête après exactement 10 secondes d'exécution.
Les frais généraux que vous payez en se reconnectant sur chaque requête rend cette approche inutilisable pour tout, mais le plus simple des applications.
OriginalL'auteur Alex Henrie