mongocxx::client vs mongocxx::pool
Un mongocxx::client autónomo utiliza un algoritmo de un solo subproceso para supervisar el estado del clúster al que está conectado. Cuando se conecta a un set de réplicas, el hilo "detiene el mundo" cada 60 segundos para verificar el estado del clúster. Un mongocxx::pool, en cambio, utiliza un hilo de segundo plano separado para cada servidor en el clúster, cada uno de los cuales verifica el estado del servidor que supervisa cada 10 segundos. Debido a las ventajas de rendimiento de la supervisión del clúster en segundo plano en lugar de "detener el mundo", se recomienda encarecidamente usar un mongocxx::pool en lugar de un conjunto de clientes autónomos si tu aplicación tiene acceso a varios hilos, incluso si tu aplicación solo usa un hilo.
Pools de Conexión y Seguridad de Hilos
Un mongocxx::pool se puede compartir entre varios hilos y usarse para crear clientes. Sin embargo, cada mongocxx::client solo se puede usar en un solo hilo. Consulta el Documentación sobre la seguridad de hilos para obtener detalles sobre cómo usar un mongocxx::client de manera segura para hilos.
Configuración de un pool de conexiones
El número de clientes en un pool de conexiones está determinado por los parámetros URI minPoolSize y maxPoolSize. Las opciones minPoolSize y maxPoolSize establecen los objetivos de uso de recursos para cuando el driver está inactivo o completamente utilizado. Cuando se utiliza al máximo, están disponibles hasta maxPoolSize clientes. Cuando los clientes se devuelven al pool, se destruyen hasta que el pool se reduce de nuevo al minPoolSize.
maxPoolSize | El número máximo de clientes creados por un mongocxx::pool (tanto en el pool como revisados). El valor por defecto es 100. Una vez que se alcanza, mongocxx::pool::acquire se bloquea hasta que otro hilo devuelva un cliente al pool. |
minPoolSize | Configura un tamaño objetivo para el pool cuando está inactivo. Una vez que se haya creado este número de clientes, nunca habrá menos de este número de clientes en el grupo. Si se crean clientes adicionales por encima de minPoolSize, se eliminarán cuando se devuelvan al grupo. El valor por defecto es "0", lo que desactiva esta funcionalidad. Cuando está deshabilitado, los clientes nunca se destruyen. |
Uso de un pool de conexiones
Para usar un pool de conexiones, primero cree un mongocxx::pool pasando el URI como argumento. Luego, llama a mongocxx::pool::acquire para recibir un cliente del pool. El cliente se devolverá automáticamente al grupo cuando quede fuera de alcance.
Ver el ejemplo de pool de conexiones para más detalles.