Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ /

Pool de Conexões

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.

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.

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

maxPoolSize

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 maxPoolSize conexões 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: 100

minPoolSize

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 minPoolSize deve ser menor que o valor de maxPoolSize.

Padrão: 0

maxConnecting

Número máximo de conexões que um pool pode estabelecer simultaneamente.

Padrão: 2

maxIdleTimeMS

O número máximo de milissegundos que uma conexão pode permanecer inativa no pool antes de ser removida e fechada.

Padrão: None (no limit)

waitQueueTimeoutMS`

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: 0 (no limit)

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

SetMaxPoolSize()

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: 100

SetMinPoolSize()

Número mínimo de conexões abertas no pool. O valor de MinPoolSize deve ser menor que o valor de MaxPoolSize.

Padrão: 0

SetMaxConnecting()

Número máximo de conexões que um pool pode estabelecer simultaneamente.

Padrão: 2

SetMaxConnIdleTime()

O número máximo de milissegundos que uma conexão pode permanecer inativa no pool antes de ser removida e fechada.

Padrão: 0 (no limit)

Selecione a aba Connection String ou ClientOptions para ver o exemplo correspondente :

O código a seguir usa a string de conexão para configurar o tamanho máximo do pool de conexões de 50, um tamanho mínimo de pool de 10 e um tempo ocioso máximo de 30000 milissegundos (30 segundos):

// Connection string with connection pool options
const uri = "mongodb://localhost:27017/?maxPoolSize=50&minPoolSize=10&maxIdleTimeMS=30000"

O código a seguir cria um cliente e passa a string de conexão para o método ApplyURI():

// Creates a new client and connects to the server
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
log.Fatal(err)
}

O código a seguir cria um cliente e define as opções do pool de conexões com um tamanho máximo do pool de conexões de 50, um tamanho mínimo de pool de 10 e um tempo ocioso máximo de 30000 milissegundos (30 segundos):

// Sets client options with connection pool settings
clientOptions := options.Client().
ApplyURI(uri).
SetMaxPoolSize(50).
SetMinPoolSize(10).
SetMaxConnIdleTime(30 * time.Second)
// Creates a new client and connects to the server
client, err := mongo.Connect(clientOptions)
if err != nil {
log.Fatal(err)
}

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.

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.

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.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Limitar o tempo de execução do servidor MongoDB

Nesta página