La mangouste d'indexation dans le code de production
Par la Mangouste la documentation pour MongooseJS
et MongoDB
/Node.js
:
Lorsque votre application démarre, la Mangouste automatiquement les appels
ensureIndex
pour chaque index définies dans votre schéma. Alors que nice pour le développement, il est recommandé que ce comportement est désactivé dans la production depuis la création de l'index peut causer un impact significatif sur les performances. Désactiver le comportement en définissant leautoIndex
option de votre schéma de faux.
Cela semble instruire la suppression de l'indexation automatique de la mangouste avant le déploiement d'optimiser la Mangouste de demander Mongo aller et le taux de désabonnement à travers tous les index de démarrage de l'application, ce qui semble de bon sens.
Quelle est la bonne façon de gérer l'indexation dans le code de production? Peut-être un script externe doit générer les index? Ou peut-être ensureIndex
est pas nécessaire si une seule demande est de la seule lecture/écriture à une collection parce qu'il continuera d'un index à chaque fois qu'un DB d'écriture se produit?
Edit: À compléter, MongoDB fournit une bonne la documentation pour la comment faire l'indexation, mais pas pourquoi ou quand explicite de l'indexation des directives devrait être fait. Il me semble que les index doivent être tenus à jour par l'écrivain automatiquement des applications sur les collections avec les index existants et que ensureIndex
est vraiment plus d'une chose une seule fois (fait quand un nouvel indice est appliqué), auquel cas la Mangouste est autoIndex
devrait être un no-op sous un serveur normal redémarrer.
Vous devez vous connecter pour publier un commentaire.
Je n'ai jamais compris pourquoi la Mangouste de la documentation, aussi largement recommande de désactiver
autoIndex
dans la production. Une fois que l'index a été ajouté, à la suiteensureIndex
appels va simplement voir que l'indice existe déjà, et ensuite de retour. Elle n'a donc qu'un effet sur les performances lorsque vous êtes le premier création de l'index, et à cette époque, les collections sont souvent vide, afin de créer un index serait rapide de toute façon.Ma suggestion est de laisser
autoIndex
activé sauf si vous avez une situation où il est en vous donnant de la peine, comme si vous voulez ajouter un nouvel index pour une collection existante qui a des millions de docs et vous voulez plus de contrôle sur le moment où il est créé.autoIndex
est fausse, vous devez appeler ensureIndexes sur votre modèle pour créer son index.Bien que je suis d'accord avec la accepté de répondre, il est intéressant de noter que, selon le MongoDB manuel, ce n'est pas recommandé d'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 Heroku est preboot fonctionnalité, alors il est probable que votre demande n'est pas de servir les demandes à tous les cours de démarrage, et donc il est probablement sûr de créer un index à l'époque.
En plus de cela, de la accepté de répondre:
Si vous avez réussi à obtenir votre modèle de données et des requêtes cloué sur la première fois, c'est très bien, et très souvent le cas. Toutefois, si vous ajoutez de nouvelles fonctionnalités à votre application, avec une nouvelle bd de requête sur une propriété sans index, vous vous trouverez souvent l'ajout d'un index pour une collection contenant de nombreux documents existants.
C'est le moment où vous avez besoin d'être prudent sur l'ajout d'index, et de considérer attentivement les implications sur les performances de le faire. Par exemple, vous pouvez créer l'index en arrière-plan:
ensureIndex
plus. Il estcreateIndex
à la place. Suis-je le droit?background: true
est la valeur par défaut, pas besoin de préciser queutiliser ce bloc de code pour gérer le mode de production: