Menu Docs
Página inicial do Docs
/ /

Pool de Conexões

O driver MongoDB C oferece dois modos de conexão: thread único e pool. Recomendamos usar o modo pool , especialmente para aplicativos com várias threads.

Importante

Ao contrário de outros drivers MongoDB , o driver C não implementa a especificação CMAP para pool de conexões. No contexto do driver C, o pool de conexões refere-se ao cache do driver de objetos de cliente , não a conexões de banco de dados .

Para usar o modo agrupado, crie um 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);

Quando você chama pela primeira vez mongoc_client_pool_pop, o pool inicia threads de monitoramento em segundo plano. Os threads de monitoramento se conectam independentemente a todos os servidores no URI de conexão. À medida que os threads de monitoramento recebem respostas hello dos servidores, eles atualizam a visão compartilhada da topologia do servidor . O pool cria threads e conexões de monitoramento adicionais à medida que descobre novos servidores. O monitoramento de threads termina quando o pool remove servidores da exibição compartilhada da topologia do servidor .

Cada thread que executa operações MongoDB deve fazer check-out de um cliente do pool:

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

Objetos individuais mongoc_client_t não são seguros para threads. Somente o objeto mongoc_client_pool_t fornece segurança de thread.

No modo pool, as operações do seu programa são desbloqueadas assim que o monitoramento descobre um servidor utilizável. Por exemplo, se um thread em seu programa aguardar para executar uma "inserção" no primário, ele será desbloqueado assim que o primário for descoberto, em vez de esperar que todos os secundários sejam verificados.

O pool abre uma conexão por servidor para monitoramento. Cada cliente abre sua própria conexão com cada servidor usado para operações de aplicação . Os threads de monitoramento em segundo plano verificam os servidores independentemente a cada 10 segundos. Você pode configurar este intervalo especificando a heartbeatFrequencyMS opção no URI de conexão. (Consulte mongoc_uri_t).

O pool de cliente cria um novo objeto mongoc_client_t quando não há objeto de cliente disponível no pool e o limite maxPoolSize ainda não foi atingido. O valor maxPoolSize padrão é 100.

Você também pode especificar waitQueueTimeoutMS no URI de conexão para limitar o tempo que mongoc_client_pool_pop espera um cliente do pool. (Consulte mongoc_uri_t). Se você waitQueueTimeoutMS especificar, confirme se o pool realmente retorna um 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 */
}

Dica

Para uma alternativa sem bloqueio mongoc_client_pool_pop para, use mongoc_client_pool_try_pop.

Consulte as opções do pool de conexões para configurar o tamanho e o comportamento do pool. Consulte mongoc_client_pool_t para obter um exemplo estendido de um programa multithread que usa o driver no modo pooled.

Para usar o modo de thread único, crie um mongoc_client_t diretamente:

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

O cliente se conecta sob demanda quando você o usa pela primeira vez para uma operação do MongoDB . Usando um soquete sem bloqueio por servidor, o cliente inicia uma verificação em cada servidor simultaneamente e usa a função assíncrona poll ou select para receber eventos dos soquetes até que todos tenham respondido ou atinja o tempo limite. No modo de thread único , o Driver C é distribuído para iniciar todas as verificações simultaneamente e, em seguida, é ativado quando todas as verificações forem concluídas ou expiradas. Após a conclusão da verificação, o cliente executa sua operação e retorna.

No modo de thread único, o cliente verifica novamente a topologia do servidor cerca de uma vez por minuto. Se mais de um minuto se passar desde a verificação anterior, a próxima operação no cliente será bloqueada enquanto o cliente conclui a verificação. Você pode configurar este intervalo utilizando o heartbeatFrequencyMS parâmetro no URI de conexão. (Consulte mongoc_uri_t).

Um cliente de thread único abre uma conexão por servidor em sua topologia. Essas conexões lidam com a verificação da topologia e a execução de operações normais.

Dica

Você pode especificar a opção serverSelectionTryOne=false em seu URI de conexão para melhorar a resiliência da conexão dos objetos de cliente de thread único com o MongoDB.

Voltar

Stable API

Nesta página