Gemäß der Mongoose- Dokumentation für MongooseJS
und MongoDB
/ Node.js
:
Beim Start Ihrer Anwendung ruft Mongoose automatisch
ensureIndex
jeden definierten Index in Ihrem Schema auf. Obwohl dies für die Entwicklung hilfreich ist, wird empfohlen, dieses Verhalten in der Produktion zu deaktivieren, da die Indexerstellung erhebliche Auswirkungen auf die Leistung haben kann. Deaktivieren Sie das Verhalten, indem Sie dieautoIndex
Option Ihres Schemas auf false setzen.
Dies scheint die Entfernung der automatischen Indizierung von Mungo vor der Bereitstellung anzuweisen, um Mongoose davon abzuhalten, Mongo anzuweisen, beim Start der Anwendung alle Indizes zu durchsuchen, was sinnvoll erscheint.
Was ist der richtige Weg, um die Indizierung im Produktionscode zu handhaben? Vielleicht sollte ein externes Skript Indizes generieren? Oder ist es möglicherweise ensureIndex
unnötig, wenn eine einzelne Anwendung der einzige Leser / Schreiber einer Sammlung ist, weil sie bei jedem DB-Schreibvorgang einen Index fortsetzt?
Edit: Um zu ergänzen, bietet MongoDB gute Dokumentation für die , wie die Indizierung zu tun, aber nicht , warum oder wenn explizite Indexierung Richtlinien durchgeführt werden sollten. Es scheint mir, dass Indizes von Writer-Anwendungen für Sammlungen mit vorhandenen Indizes automatisch auf dem neuesten Stand gehalten werden sollten, und das ensureIndex
ist eher eine einmalige Sache (erfolgt, wenn ein neuer Index angewendet wird). In diesem Fall sollte Mongoose autoIndex
eine sein no-op bei einem normalen Serverneustart.
autoIndex
false ist, müssen Sie sureIndexes für Ihr Modell aufrufen , um dessen Indizes zu erstellen.Obwohl ich der akzeptierten Antwort zustimme, ist es erwähnenswert, dass dies laut MongoDB-Handbuch nicht die empfohlene Methode zum Hinzufügen von Indizes auf einem Produktionsserver ist:
Natürlich hängt es wirklich davon ab, wie Ihre Anwendung strukturiert und bereitgestellt ist. Wenn Sie beispielsweise auf Heroku bereitstellen und die Preboot-Funktion von Heroku nicht verwenden , werden Ihre Anwendungen wahrscheinlich während des Startvorgangs überhaupt keine Anforderungen bearbeiten. Daher ist es wahrscheinlich sicher, zu diesem Zeitpunkt einen Index zu erstellen.
Darüber hinaus aus der akzeptierten Antwort:
Wenn Sie es geschafft haben, Ihr Datenmodell und Ihre Abfragen beim ersten Mal festzunageln, ist dies in Ordnung und häufig der Fall. Wenn Sie Ihrer App jedoch neue Funktionen mit einer neuen DB-Abfrage für eine Eigenschaft ohne Index hinzufügen, werden Sie häufig einen Index zu einer Sammlung hinzufügen, die viele vorhandene Dokumente enthält.
Dies ist die Zeit, in der Sie beim Hinzufügen von Indizes vorsichtig sein und die Auswirkungen auf die Leistung sorgfältig berücksichtigen müssen. Sie können den Index beispielsweise im Hintergrund erstellen :
quelle
ensureIndex
mehr. Es gibtcreateIndex
stattdessen. Habe ich recht?Verwenden Sie diesen Blockcode, um den Produktionsmodus zu handhaben:
quelle