Selon la documentation de Mongoose pour MongooseJS
et MongoDB
/ Node.js
:
Lorsque votre application démarre, Mongoose appelle automatiquement
ensureIndex
chaque index défini dans votre schéma. Bien qu'il soit utile pour le développement, il est recommandé de désactiver ce comportement en production car la création d'index peut avoir un impact significatif sur les performances. Désactivez le comportement en définissant l'autoIndex
option de votre schéma sur false.
Cela semble indiquer la suppression de l'indexation automatique de la mangouste avant le déploiement afin d'optimiser Mongoose en demandant à Mongo de parcourir tous les index au démarrage de l'application, ce qui semble logique.
Quelle est la bonne façon de gérer l'indexation dans le code de production? Peut-être qu'un script externe devrait générer des index? Ou peut ensureIndex
- être est-il inutile si une seule application est le seul lecteur / écrivain d'une collection, car elle continuera un index à chaque fois qu'une écriture de base de données se produit?
Edit: Pour compléter, MongoDB fournit une bonne documentation sur la façon de faire l'indexation, mais pas pourquoi ni quand des directives d'indexation explicites doivent être effectuées. Il me semble que les index devraient être tenus à jour automatiquement par les applications d'écriture sur les collections avec des index existants et c'est ensureIndex
vraiment plus une chose ponctuelle (faite lorsqu'un nouvel index est appliqué), auquel cas celui de Mongoose autoIndex
devrait être un no-op sous un redémarrage normal du serveur.
autoIndex
est false, vous devez appeler ensureIndexes sur votre modèle pour créer ses index.Bien que je sois d'accord avec la réponse acceptée, il convient de noter que, selon le manuel MongoDB , ce n'est pas la méthode recommandée pour ajouter des index sur un serveur de production:
Bien sûr, cela dépend vraiment de la façon dont votre application est structurée et déployée. Si vous déployez sur Heroku, par exemple, et que vous n'utilisez pas la fonction de pré - démarrage de Heroku , il est probable que votre application ne traite pas du tout les demandes au démarrage, et il est donc probablement sûr de créer un index à ce moment-là.
En plus de cela, à partir de la réponse acceptée:
Si vous avez réussi à faire clouer votre modèle de données et vos requêtes pour la première fois, c'est bien, et souvent le cas. Cependant, si vous ajoutez de nouvelles fonctionnalités à votre application, avec une nouvelle requête DB sur une propriété sans index, vous vous retrouverez souvent à ajouter un index à une collection contenant de nombreux documents existants.
C'est le moment où vous devez être prudent lors de l'ajout d'index et examiner attentivement les implications en termes de performances. Par exemple, vous pouvez créer l'index en arrière-plan :
la source
ensureIndex
plus. Il y en acreateIndex
plutôt. Ai-je raison?utilisez ce code de bloc pour gérer le mode production:
la source