Según la documentación de Mangosta para MongooseJS
y MongoDB
/ Node.js
:
Cuando se inicia su aplicación, Mongoose llama automáticamente
ensureIndex
a cada índice definido en su esquema. Si bien es bueno para el desarrollo, se recomienda deshabilitar este comportamiento en la producción, ya que la creación de índices puede causar un impacto significativo en el rendimiento. Deshabilite el comportamiento estableciendo laautoIndex
opción de su esquema en falso.
Esto parece instruir la eliminación de la indexación automática de la mangosta antes de implementar para optimizar Mongoose de instruir a Mongo para ir y batir todos los índices en el inicio de la aplicación, lo que parece tener sentido.
¿Cuál es la forma correcta de manejar la indexación en el código de producción? ¿Quizás un script externo debería generar índices? ¿O tal vez ensureIndex
es innecesario si una sola aplicación es el único lector / escritor de una colección porque continuará un índice cada vez que se produzca una escritura DB?
Editar: para complementar, MongoDB proporciona una buena documentación sobre cómo hacer la indexación, pero no por qué o cuándo se deben hacer las directivas de indexación explícitas. Me parece que los índices deben mantenerse actualizados por las aplicaciones de escritor automáticamente en colecciones con índices existentes y eso ensureIndex
es realmente algo más que una vez (hecho cuando se aplica un nuevo índice), en cuyo caso Mongoose autoIndex
debería ser un no operativo bajo un reinicio normal del servidor.
autoIndex
es falso, debe llamar a sureIndexes en su modelo para crear sus índices.Aunque estoy de acuerdo con la respuesta aceptada, vale la pena señalar que, de acuerdo con el manual de MongoDB , esta no es la forma recomendada de agregar índices en un servidor de producción:
Por supuesto, realmente depende de cómo se estructura y despliega su aplicación. Si está implementando en Heroku, por ejemplo, y no está utilizando la función de prearranque de Heroku , entonces es probable que su aplicación no atienda solicitudes durante el inicio, por lo que probablemente sea seguro crear un índice en ese momento.
Además de esto, de la respuesta aceptada:
Si ha logrado obtener su modelo de datos y consultas por primera vez, está bien, y a menudo es el caso. Sin embargo, si está agregando una nueva funcionalidad a su aplicación, con una nueva consulta de base de datos en una propiedad sin índice, a menudo se encontrará agregando un índice a una colección que contiene muchos documentos existentes.
Este es el momento en que debe tener cuidado al agregar índices y considerar cuidadosamente las implicaciones de rendimiento de hacerlo. Por ejemplo, podría crear el índice en segundo plano :
fuente
ensureIndex
Ya no hay Hay encreateIndex
cambio. Estoy en lo cierto?use este código de bloque para manejar el modo de producción:
fuente