Visão geral
Neste guia, você aprenderá como o driver Go usa pools de conexões para gerenciar conexões com o 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 Go. Quando seu aplicação solicita uma conexão com o MongoDB, o driver Go 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 Go.
Criar um pool de conexões
Cada instância do Client
tem um pool de conexões embutida para cada servidor em sua topologia MongoDB . Se você não configurar a opção minPoolSize
, os pools de conexões abrirão os soquetes sob demanda. Estes soquetes suportam operações simultâneas do MongoDB , ou goroutines, em seu aplicação.
Quando uma nova instância do Client
é instanciada, ela abre dois soquetes por servidor em sua topologia MongoDB para monitorar o estado do servidor.
Por exemplo, um cliente conectado a um conjunto de réplicas de três nós abre seis soquetes de monitoramento. Se o aplicação usar a configuração padrão para maxPoolSize
e consultar apenas o nó primário (padrão), poderá haver no máximo 106
soquetes abertos e 100
conexões no pool de conexões. Se o aplicação usar uma preferência de leitura para executar query dos nós secundários, seus pools também crescerão e poderá haver 306
conexões totais.
Por questões de eficiência, crie um cliente uma vez para cada processo e reutilize-o para todas as operações. Evite criar um novo cliente para cada solicitação, pois isso aumentará a latência.
Se os soquetes fecharem devido a erros de rede, 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.
Configurar um pool de conexões
Você pode especificar configurações para seu pool de conexões utilizando uma string de conexão ou utilizando os métodos options.Client
.
Selecione a aba Connection String ou ClientOptions para ver a sintaxe correspondente :
Veja a seguir as configurações de string de conexão que você pode usar para configurar o pool de conexões:
Contexto | Descrição |
---|---|
| Número máximo de conexões abertas no pool. Se uma operação precisar de uma nova conexão enquanto o pool de conexões tiver Padrão: |
| Número mínimo de conexões abertas no pool. O pool de conexões é inicializado com este número de soquetes. O valor de Padrão: |
| Número máximo de conexões que um pool pode estabelecer simultaneamente. Padrão: |
| O número máximo de milissegundos que uma conexão pode permanecer inativa no pool antes de ser removida e fechada. Padrão: |
| Especifica o tempo máximo de espera, em milissegundos, que um thread pode esperar que uma conexão se torne disponível. Uma operação que aguarda um soquete por mais tempo do que esse período de tempo definido gera um erro de conexão. Default: |
A tabela a seguir descreve os métodos que você pode conectar às suas configurações para modificar o comportamento do driver:
Contexto | Descrição |
---|---|
| Número máximo de conexões abertas no pool. Se uma operação precisar de uma nova conexão enquanto o pool de conexões tiver o máximo de conexões configuradas abertas, a nova operação aguardará a abertura de uma nova conexão. Para limitar esse tempo de espera, use a configuração de tempo limite único. Padrão: |
| Número mínimo de conexões abertas no pool. O valor de Padrão: |
| Número máximo de conexões que um pool pode estabelecer simultaneamente. Padrão: |
| O número máximo de milissegundos que uma conexão pode permanecer inativa no pool antes de ser removida e fechada. Padrão: |
Exemplo
Selecione a aba Connection String ou ClientOptions para ver o exemplo correspondente :
Otimizar pools de conexões
Os pools de conexões têm taxa limitada, de modo que cada pool de conexões só pode criar, no máximo, o valor de maxConnecting
conexões em paralelo a qualquer momento. Qualquer nova goroutine para de esperar nos seguintes casos:
Uma das goroutines existentes termina de criar uma conexão ou uma conexão existente é verificada novamente no pool.
A capacidade do driver de reutilizar conexões existentes melhora devido aos limites de taxa na criação de conexões.
O driver não limita o número de operações que podem aguardar a disponibilidade de soquetes, portanto, é responsabilidade do aplicativo gerenciar sua fila de operações. As operações podem esperar por qualquer período de tempo, a menos que você defina a opção waitQueueTimeoutMS
.
Uma operaçã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.
Desconectando
Quando você chama Client.Disconnect()
de qualquer goroutine, o driver fecha todos os soquetes ociosos e, em seguida, fecha todos os soquetes à medida que são retornados ao pool.
Informações adicionais
Para obter mais informações sobre como usar um pool de conexões, consulte a documentação do Pool de conexões no manual do servidor.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: