Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Gerencie conexões com pools de conexões

Neste guia, você aprenderá como o driver do Node.js usa pools de conexões para gerenciar conexões com uma MongoDB deployment e como definir as configurações do pool de conexões em seu aplicação.

Um pool de conexões é um cache de conexões de banco de dados abertas mantidas pelo driver Node.js Quando seu aplicação solicita uma conexão com o MongoDB, o driver do Node.js obtém uma conexão do pool sem problemas, executa operações e retorna a conexão ao pool para reutilização.

Os pools de conexões ajudam a reduzir a latência de aplicação e o número de vezes que novas conexões são criadas pelo driver Node.js

Cada instância MongoClient tem um pool de conexões integrado para cada servidor em sua topologia do MongoDB . Se você não configurar a opção minPoolSize, os pools de conexão abrirão soquetes sob demanda para oferecer suporte a solicitações simultâneas ao MongoDB em seu aplicação.

Você pode especificar as seguintes configurações do pool de conexões na sua instância do MongoClient:

Contexto
Descrição

maxPoolSize

O número máximo de conexões simultâneas que o pool mantém. Se o número de conexões em uso com um servidor atingir o valor especificado, a próxima solicitação para esse servidor aguardará até que uma conexão se torne disponível.

Padrão: 100

maxConnecting

O número máximo de conexões que cada pool pode estabelecer simultaneamente.

minPoolSize

O número mínimo de conexões simultâneas que o pool mantém.

Padrão: 0

maxIdleTimeMS

O número máximo de milissegundos que uma conexão pode permanecer inativa no pool. Defina esse valor como maior que o período ocioso esperado do seu aplicativo, mas menor que o tempo limite de conexão do firewall ou do proxy para evitar desconexões inesperadas.

Padrão: 0 (sem limite)

waitQueueTimeoutMS

O número máximo de milissegundos que uma solicitação pode esperar que um soquete fique disponível.

Padrão: 0 (sem limite)

Além dos soquetes necessários para dar suporte às solicitações do seu aplicativo, cada instância MongoClient abre até duas conexões por servidor em sua topologia MongoDB para monitorar o estado do servidor.

For example, a client connected to a three-node replica set opens six monitoring sockets. If the application uses the default setting for maxPoolSize and only queries the primary (default) node, then there can be at most 106 open sockets and 100 connections in the connection pool. If the application uses a read preference to query the secondary nodes, those connection pools grow and there can be 306 total connections including the open monitoring sockets.

Para dar suporte a um grande número de solicitações simultâneas do MongoDB em um processo, você pode aumentar maxPoolSize.

O seguinte código cria uma instância do MongoClient com um tamanho máximo do pool de conexões de 200 especificando a opção maxPoolSize no objeto options :

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxPoolSize: 200
});

Estabelecimento de conexão com limite de taxa de pools de conexões. A opção maxConnecting determina o número de conexões que o grupo pode criar em paralelo a qualquer momento. Por exemplo, se o valor de maxConnecting for 2, a terceira solicitação que tenta fazer check-out simultâneo de uma conexão terá êxito somente quando ocorrer um dos seguintes casos:

  • O pool de conexões termina de criar uma conexão e há menos de maxPoolSize conexões no pool.

  • Uma conexão existente é verificada novamente no pool.

O código a seguir cria uma instância MongoClient com um número máximo de conexões 2 a serem estabelecidas simultaneamente por pool, especificando a opção maxConnecting no objeto options :

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxConnecting: 2
});

Você pode configurar o número mínimo de conexões para cada servidor com a opção minPoolSize. O driver garante que sempre haja pelo menos o número de conexões definidas pela opção minPoolSize no pool de conexões. Se os soquetes forem fechados, fazendo com que o número total de soquetes (em uso e ociosos) caia abaixo do mínimo, mais soquetes serão abertos até que o mínimo seja atingido.

O seguinte código cria uma instância do MongoClient com um tamanho mínimo do pool de conexão de 10 especificando a opção minPoolSize no objeto options :

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
minPoolSize: 10
});

Observação

Um MongoClient configurado com maxIdleTimeMS e minPoolSize definido como 0 é ideal para volumes de trabalho com períodos sustentados de baixa atividade. Essa configuração permite que o pool de conexões feche conexões não utilizadas durante períodos de inatividade.

Nas versões anteriores à 6.18.0, o driver Node.js não fechava conexões ociosas quando minPoolSize era definido como 0 durante períodos de inatividade. A partir da versão 6.18.0, o pool de conexões fecha corretamente as conexões ociosas, independentemente da configuração minPoolSize.

Você pode definir o número máximo de milésimos de segundo em que uma conexão pode permanecer ociosa no pool definindo a opção maxIdleTimeMS. Depois que uma conexão fica inativa por maxIdleTimeMS, o pool de conexões a remove e a substitui. O padrão desta opção é 0 (sem limite).

O código a seguir cria uma instância MongoClient com um tempo ocioso máximo de 10000 milissegundos (10 segundos), especificando a configuração maxIdleTimeMS no objeto options :

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
maxIdleTimeMS: 10000
});

MongoClient suporta várias solicitações simultâneas. Para cada processo, crie um cliente e reutilize-o para todas as operações de um processo. Essa prática é mais eficiente do que criar um cliente para cada solicitação.

O driver não limita o número de solicitações que podem aguardar a disponibilidade de soquetes, e é responsabilidade do aplicativo limitar o tamanho de seu pool para limitar o enfileiramento durante um pico de carga. Os pedidos aguardam a quantidade de tempo especificada na opção waitQueueTimeoutMS, que padroniza para 0 (sem limite).

Uma solicitação que aguarda mais do que o período de tempo definido por waitQueueTimeoutMS para um soquete gera um erro de conexão. Use essa opção se for mais importante limitar a duração das operações durante um pico de carga do que concluir cada operação.

O seguinte código cria uma instância MongoClient com um tempo limite máximo da fila de espera de 10000 milésimos de segundo (10 segundos), declarando-o no objeto options :

const { MongoClient } = require('mongodb');
const uri = '<connection-string>';
const client = new MongoClient(uri, {
waitQueueTimeoutMS: 10000
});

Quando qualquer solicitação chama MongoClient.close(), o driver Node.js executa as seguintes ações:

  • Fecha todos os soquetes ociosos no pool de conexões

  • Fecha todos os soquetes que estão em uso à medida que são retornados ao pool

  • Fecha todos os soquetes que estão em uso somente quando as operações associadas são concluídas

A chamada de MongoClient.close() fecha somente os soquetes inativos e não encerra diretamente nenhuma operação em andamento.

Observação

O método MongoClient.close() fecha sessões e transações existentes, o que pode afetar indiretamente o comportamento de operações em andamento e abrir cursores.

Ter um grande pool de conexões nem sempre reduz as solicitações de reconexão. Considere o seguinte cenário de exemplo :

  • Um aplicação tem um tamanho de pool de conexões de 5 soquetes e tem a opção socketTimeoutMS definida para 5000 milésimos de segundo.

  • As operações ocorrem, em média, a cada 3000 milésimos de segundo, e as solicitações de reconexão são frequentes.

  • Cada soquete atinge o tempo limite após 5000 milésimos de segundo, o que significa que todos os soquetes devem fazer algo durante esses 5000 milésimos de segundo para evitar o fechamento.

Nesse cenário, cada soquete atinge o tempo limite após 5000 milésimos de segundo, exigindo atividade dentro desse período de tempo limite para evitar o fechamento. No entanto, uma mensagem a cada 3000 milésimos de segundo não é suficiente para manter todos os soquetes ativos, fazendo com que vários deles expirem.

Para evitar tempos limite excessivos de soquete, reduza o número de conexões que o driver pode manter no pool de conexões especificando a opção maxPoolSize. Para saber como definir a opção maxPoolSize, consulte a seção maxPoolSize.

Para obter mais informações sobre como criar um objeto MongoClient com o driver Node.js e especificar opções, consulte a seguinte documentação da API: