MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
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 aplicativo. Os threads de monitoramento em segundo plano verificam os servidores independentemente a cada 10 segundos. Você pode configurar este intervalo especificando a opção heartbeatFrequencyMS 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ê especificar waitQueueTimeoutMS, 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 para mongoc_client_pool_pop, 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 parâmetro heartbeatFrequencyMS 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 cliente de thread único com o MongoDB.

Voltar

Stable API

Nesta página