multiple - mongoose reconnect
connect() vs createConnection() (1)
Soy nuevo en el uso de mongoose
y me gustaría saber cuál es la diferencia fundamental entre mongoose.connect()
y mongoose.createConnection()
, particularmente en general, cuáles son las cosas a considerar cuando se usa una sobre otra.
Mi comprensión de la documentación oficial es que, en general, cuando solo hay una conexión, se utiliza mongoose.connect()
, mientras que si hay varias instancias de conexión, se utiliza mongoose.createConnection()
.
Espero que alguien pueda aclarar más sobre esto.
Además, si mi comprensión es correcta, ¿cuáles son las desventajas de usar mongoose.createConnection()
en una sola conexión? ¿Por qué no es recomendable que utilicemos mongoose.createConnection()
en todos los casos para estandarizar la conexión?
Mi comprensión de la documentación oficial es que, en general, cuando solo hay una conexión, se utiliza mongoose.connect (), mientras que si hay varias instancias de conexión, se utiliza mongoose.createConnection ().
Sí. Para ser exactos, .connect()
crea realmente un conjunto de sockets / conexiones (definido en poolSize
en la configuración de conexión, el valor predeterminado es 5) que se mantiene abierto, por lo que en realidad hay varias conexiones, pero en un solo conjunto. Dicho esto, si desea múltiples agrupaciones de conexiones, con diferentes propiedades, debe usar createConnection
Además, si mi comprensión es correcta, ¿cuáles son las desventajas de usar mongoose.createConnection () en una sola conexión? ¿Por qué no es recomendable que utilicemos mongoose.createConnection () en todos los casos para estandarizar la conexión?
Esta es una buena pregunta y también hay una respuesta en los docs :
Mongoose crea una conexión predeterminada cuando llama a mongoose.connect (). Puede acceder a la conexión predeterminada utilizando mongoose.connection.
Básicamente .connect
es una forma abreviada de un conjunto de (en su mayoría) configuraciones de mejores prácticas para createConnection
En la mayoría de los proyectos simples, no debe preocuparse por especificar diferentes configuraciones de lectura o escritura, tamaños de grupo, conexiones separadas a diferentes servidores de réplica, etc., por .connect
existe .connect
.
Sin embargo, si tiene requisitos más exigentes (por ejemplo, por razones legales o de rendimiento), probablemente tendrá que usar createConnection
.
Hace un par de semanas, me encontré con una situación en la que uno de mis paquetes de estadísticas (internos) necesitaba acceso a la base de datos con una carga esporádica pero grande. Como no quería pasar el objeto db / mongoose al paquete para mantenerlo lo más modular posible, acabo de crear una nueva conexión. Esto funcionó muy bien, porque solo necesitaba acceder a un determinado Modelo que definí en el paquete y no a los definidos en mi paquete "primario". Como el nuevo paquete solo necesitaba acceso de lectura y podía leer desde un db esclavo / réplica diferente para reducir la carga en el principal, cambié a createConnection en ambos extremos para separar la conexión del principal.
Para mí, la gran desventaja de crear múltiples conexiones en el mismo problema, es el hecho de que no puede acceder directamente a sus modelos a través de mongoose.model
, si se definieron "en" diferentes conexiones. Esta respuesta detalla ese problema: https://.com/a/22838614/2856218