Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Pools de conexiones

El driver C de MongoDB proporciona dos modos de conexión: de un solo hilo y agrupado. Se recomienda utilizar el modo agrupado, especialmente para aplicaciones multihilo.

Importante

A diferencia de otros controladores de MongoDB, el controlador en C no implementa la especificación CMAP para el agrupamiento de conexiones. En el contexto del driver de C, el agrupamiento de conexiones se refiere al caché del driver de objetos cliente, no a las conexiones de base de datos.

Para usar el modo de grupos, crear un mongoc_client_pool_t:

mongoc_uri_t *uri = mongoc_uri_new("mongodb://hostA,hostB/?replicaSet=my_rs");
mongoc_client_pool_t *pool = mongoc_client_pool_new(uri);

Cuando se llama por primera vez a mongoc_client_pool_pop, el pool lanza hilos de supervisión en segundo plano. Los hilos de supervisión se conectan de forma independiente a todos los servidores en el URI de conexión. A medida que los hilos de supervisión reciben respuestas de saludo de los servidores, actualizan la vista compartida de la topología del servidor. El pool crea hilos de supervisión adicionales y conexiones a medida que descubre nuevos servidores. Los hilos de supervisión se terminan cuando el grupo remueve servidores de la visión compartida de la topología del servidor.

Cada hilo que ejecuta operaciones de MongoDB debe retirar un cliente del grupo:

mongoc_client_t *client = mongoc_client_pool_pop(pool);
/* use the client for operations ... */
mongoc_client_pool_push(pool, client);

Los objetos individuales mongoc_client_t no son seguros para hilos. Solo el objeto mongoc_client_pool_t proporciona seguridad de subprocesos.

En el modo agrupado, las operaciones de tu programa se desbloquean tan pronto como la supervisión encuentra un servidor utilizable. Por ejemplo, si un hilo en tu programa espera ejecutar un "insertar" en el primario, se desbloquea apenas se descubre el primario, en lugar de esperar a que se verifiquen todos los secundarios.

El grupo abre una conexión por servidor para la supervisión. Cada cliente abre su propia conexión con cada servidor que utiliza para operaciones de aplicación. Los hilos de supervisión en segundo plano vuelven a escanear los servidores de forma independiente, aproximadamente cada 10 segundos. Puede configurar este intervalo especificando la heartbeatFrequencyMS opción en el URI de conexión. (Ver mongoc_uri_t).

El grupo de clientes crea un nuevo objeto mongoc_client_t cuando no hay un objeto de cliente disponible en el grupo y no se ha alcanzado el límite maxPoolSize. El valor por defecto maxPoolSize es 100.

También puede especificar waitQueueTimeoutMS en la URI de conexión para limitar el tiempo que mongoc_client_pool_pop espera a un cliente del pool. (Consulte mongoc_uri_t). Si waitQueueTimeoutMS especifica, confirme que el pool realmente devuelve un cliente:

mongoc_client_t *client = mongoc_client_pool_pop(pool);
if (client) {
/* use the client for operations */
mongoc_client_pool_push(pool, client);
} else {
/* handle a wait queue timeout */
}

Tip

Para una alternativa no bloqueante a mongoc_client_pool_pop, utilice mongoc_client_pool_try_pop.

Consulta opciones del pool de conexiones para configurar el tamaño del grupo y el comportamiento. Consulte mongoc_client_pool_t para un ejemplo extendido de un programa multihilo que utiliza el driver en modo agrupado.

Para utilizar el modo de un solo hilo, crea un mongoc_client_t directamente:

mongoc_client_t *client = mongoc_client_new(
"mongodb://hostA,hostB/?replicaSet=my_rs");

El cliente se conecta a demanda cuando lo utilizas por primera vez para una operación con MongoDB. Utilizando un socket no bloqueante por servidor, el cliente inicia una comprobación en cada servidor de forma concurrente y utiliza la función asíncrona poll o select para recibir eventos de los sockets hasta que todos hayan respondido o se agote el tiempo de espera. En modo de un solo hilo, el driver C se expande para iniciar todas las comprobaciones simultáneamente y luego se contrae una vez que todas las comprobaciones se completan o agotan el tiempo de espera. Después de que el escaneo se complete, el cliente ejecuta su operación y regresa.

En modo de un solo hilo, el cliente vuelve a escanear la topología del servidor aproximadamente una vez por minuto. Si pasa más de un minuto desde el escaneo anterior, la siguiente operación en el cliente se bloquea mientras el cliente completa su escaneo. Puedes configurar este intervalo usando el parámetro heartbeatFrequencyMS en la URI de conexión. (Consultar mongoc_uri_t).

Un cliente de un solo hilo abre una conexión por cada servidor en tu topología. Estas conexiones gestionan tanto el escaneo de la topología como la ejecución de operaciones normales.

Tip

Puedes especificar la opción serverSelectionTryOne=false en tu URI de conexión para mejorar la resiliencia de la conexión de objetos cliente single-threader a MongoDB.

Volver

Stable API

En esta página