Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

271
Views
¿Es una buena práctica abrir una nueva conexión para cada consulta con una base de datos MongoDB?

Estoy creando un servidor web que almacena los datos de un usuario en una base de datos MongoDB. El código detrás de las solicitudes web utiliza funciones asíncronas para insertar un documento en la base de datos, pero debido a que estas funciones son asíncronas, significa que para cada solicitud se realiza una nueva conexión con el servidor.

 exports.create_user = function(username, password, callback) { mongo.connect(url, function(err, db) { db.collection('users').insertOne({username: username, password: password}, function(err, result) { callback(result) db.close() }) }) }

Tengo la impresión de que hacerlo de esta manera no es la mejor práctica, pero no puedo pensar en una manera de hacerlo usando el modelo de módulo que estoy usando arriba. Cualquier sugerencia o consejo sería apreciado.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Me topé con esto en mi propia investigación si usar una nueva conexión para mongodb en cada consulta es la mejor práctica o usar la agrupación de conexiones. Resulta que mongodb sugiere la agrupación de conexiones para la mayoría de los casos de uso.

Citando de los documentos :

Un grupo de conexiones es una memoria caché de las conexiones de la base de datos mantenida por el controlador para que las conexiones se puedan reutilizar cuando se requieran nuevas conexiones a la base de datos. Para reducir la cantidad de grupos de conexiones creados por su aplicación, recomendamos llamar a MongoClient.connect una vez y reutilizar la variable de la base de datos devuelta por la devolución de llamada.

Por lo general, uso el siguiente formulario para establecer y reutilizar una conexión mientras realizo consultas:

 // db.js import { MongoClient } from 'mongodb'; // this will hold our cached database connection, which will itself hold multiple connections in a pool to be used let connection, database; export { connect: (next) => { // already established? => return connection if (database) return next(undefined, database); // establish connection MongoClient.connect('http://localhost:27017/admin', (err, db) => { if (err) return next(err); // save connection connection = db; // connect to database database = db.db('myDatabase'); // call callback next(undefined, database); }); }, disconnect: (next) => { if (!connection) return next(); // close connection connection.close(); next(); } };

Disparando consultas:

 import db from './db'; db.connect((err, db) => { if (err) return next(err); db.collection('myUsers').insertOne({name: 'test'}, (err) => { if (err) throw err; db.disconnect((err) => { if (err) throw err; console.log('Everything finished, database connection closed'); }); }); });

Nota: es posible determinar la cantidad máxima de conexiones agrupadas manualmente (afaik, ¿el valor predeterminado es 5?). Consulte los documentos sobre cómo configurar la cantidad de conexiones abiertas a través de la URL de mongodb.

over 4 years ago · Santiago Trujillo Report

0

Al hacer db.close() puede cerrar la conexión. Si no cierra su conexión, el bucle de eventos mantendrá la conexión abierta y su proceso no se cerrará. Si está construyendo un servidor web en el que su proceso no terminará, no es necesario que cierre la conexión. Para un nodo de referencia-mongodb-native

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!