sql >> Base de Datos >  >> NoSQL >> MongoDB

Descripción de las opciones de tiempo de espera del cliente de MongoDB

Los controladores de MongoDB brindan varias opciones para que los clientes de Mongo manejen diferentes errores de tiempo de espera de la red que pueden ocurrir durante el uso. En algunos casos, es posible que los valores predeterminados para estas opciones no se ajusten a su caso de uso, por lo que es crucial comprender las diferentes opciones de tiempo de espera de MongoClient para evitar bloqueos impredecibles en el flujo de su aplicación y mejorar el rendimiento.

Configuración de opciones de tiempo de espera para mongo:selección de servidor, conexión y socketHaga clic para twittear

En un nivel abstracto, cada vez que usa MongoClient para conectarse, enviar o recibir una solicitud, utiliza internamente opciones de tiempo de espera predefinidas para decidir cuánto tiempo esperará la aplicación para establecer una conexión inicial o la respuesta del servidor a su solicitud.

Las aplicaciones típicas interactúan con diferentes servidores de bases de datos según la lógica comercial. Por ejemplo, su historial de pagos puede estar en un clúster de base de datos y sus registros analíticos en otro clúster. Los tiempos de espera predeterminados pueden influir significativamente en el comportamiento de su aplicación cuando hay errores de red. Si su servidor de análisis no funciona, cada operación esperará un valor predeterminado de 30 segundos antes de fallar (lo que puede o no ser lo que desea).

Tiempo de espera de selección de servidor

El tiempo de espera de la selección del servidor es la cantidad de milisegundos que el controlador mongo esperará para seleccionar un servidor para una operación antes de darse por vencido y generar un error.

Esta opción se introdujo en la versión más reciente de los controladores Mongo de última generación (versión 3.2.x+ en Java). Para cada tipo de operación y preferencia del usuario, MongoClient selecciona el servidor mediante un algoritmo de selección para ejecutar la operación.

Para una operación de escritura en un servidor independiente, solo hay un servidor disponible que se selecciona. En un conjunto de réplicas o clústeres fragmentados, puede haber más de un servidor que cumpla con los criterios de preferencia del usuario para una operación.

Los posibles escenarios en los que puede ocurrir el tiempo de espera de la selección del servidor incluyen:si una red está inactiva o si falla un nodo principal en un conjunto de réplicas.

El controlador Mongo usa 30 segundos como valor predeterminado del tiempo de espera de selección del servidor . Según el caso de uso, podemos aumentar o disminuir este umbral.

Tiempo de espera de conexión

El tiempo de espera de conexión es el número de milisegundos que el controlador esperará antes de que se cancele un nuevo intento de conexión.

Después de la selección del servidor, el cliente intenta establecer una conexión con el servidor.

Según la infraestructura de la red y la carga en el servidor, es posible que el cliente deba esperar a que se establezca una conexión. Posibles escenarios en los que puede ocurrir un tiempo de espera de conexión:el servidor se apaga, problemas de red, IP/DNS incorrectos, número de puerto, etc.

El valor predeterminado de un tiempo de espera de conexión depende de la versión y el idioma del controlador. Las últimas versiones del controlador Mongo Java y Ruby tienen un tiempo de espera predeterminado de 10 s para los establecimientos de conexión, mientras que el controlador NodeJs no tiene tiempo de espera.

Si el tiempo de espera es demasiado alto, corre el riesgo de detener su aplicación. Si el tiempo de espera es demasiado bajo, puede darse por vencido demasiado rápido. Es mejor probar con diferentes valores para encontrar el tiempo de espera adecuado para su aplicación.

SocketTimeout

El tiempo de espera del socket es el número de milisegundos que puede tardar un envío o una recepción en un socket antes del tiempo de espera.

Después de establecer una conexión con el servidor, el cliente envía una solicitud al servidor y recibe la respuesta utilizando una conexión ya establecida. Internamente, la conexión usa un socket para enviar la solicitud del cliente y recibe la respuesta

Mongo Java y Nodejs  Driver tienen un tiempo de espera de socket predeterminado de 0, lo que significa que básicamente no hay tiempo de espera . Mientras que Ruby ofrece un tiempo de espera de socket de 5 segundos. No desea poner un límite a este tiempo de espera, ya que diferentes operaciones tardarán un tiempo variable en operar.

Exploración adicional

Las opciones de tiempo de espera de MongoClient varían según las diferentes versiones e idiomas de los controladores de Mongo. Le recomendamos que consulte la documentación de la clase MongoClient de su controlador para comprender sus opciones de tiempo de espera predeterminado. Hemos proporcionado un código de muestra a continuación para ilustrar la configuración del tiempo de espera en Java y Ruby.

Controlador Java de MongoDB

List<MongoCredential> creds = new ArrayList<MongoCredential>();  creds.add(MongoCredential.createCredential(username, DBname, password);

MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder();

optionsBuilder.connectTimeout(CONNECTION_TIME_OUT_MS);

optionsBuilder.socketTimeout(SOCKET_TIME_OUT_MS);

optionsBuilder.serverSelectionTimeout(SERVER_SELECTION_TIMEOUT_MS);

MongoClientOptions options = optionsBuilder.build();

Mongo m = new MongoClient(new ServerAddress(server , port), creds, options);

Controlador MongoDB NodeJs

var uri =  ‘mongodb://[username:password@]host[:port1]/[database]’;
var options = { server:
               { socketOptions: 
                    { 
                        socketTimeoutMS: SOCKET_TIME_OUT_MS, 
                        connectTimeoutMS: CONNECTION_TIMEOUT_MS 
                    }
                }
              };
MongoClient.connect(uri, options, function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});

¿Nos perdimos algo? No dude en hacérnoslo saber en los comentarios a continuación. ¡No olvide suscribirse a nuestro boletín para ser el primero en recibir consejos como estos y más!