Pool de Conexões
mongocxx::client
vs mongocxx::pool
Um mongocxx::client
standalone usa um algoritmo de thread único para monitorar o estado do cluster ao qual está conectado. Quando conectado a um conjunto de réplicas, o thread "para o mundo" a cada 60 segundos para verificar o status do cluster. Um mongocxx::pool
, por outro lado, usa um thread de background separado para cada servidor no cluster, cada um dos quais verifica o status do servidor que monitora a cada 10 segundos. Devido às vantagens de desempenho de monitorar o cluster em segundo plano em vez de "parar o mundo", é altamente recomendável usar um mongocxx::pool
em vez de um conjunto de clientes autônomos se o aplicativo tiver acesso a vários threads, mesmo que o aplicativo apenas usa um thread.
Usando threads com pools de conexões
Um mongocxx::pool
pode ser compartilhado entre vários threads e usado para criar clientes. No entanto, cada mongocxx::client
só pode ser usado em um único thread. Consulte adocumentação de segurança de thread para obter detalhes sobre como usar um mongocxx::client
de maneira segura para threads.
Usando bifurcações com pools de conexões
Um mongocxx::pool
não pode ser compartilhado entre um pai e uma bifurcação. Você deve criar seu pool de conexões após a bifurcação. Consulte a documentação de documentação de segurança do fork.
Configurar um pool de conexões
O número de clientes em um pool de conexões é limitado pelo parâmetro URI maxPoolSize
. Depois que o número de clientes criados por um mongocxx::pool
(tanto no pool quanto com check-out) atinge o valor de maxPoolSize
, mongocxx::pool::acquire
bloqueia até que outro thread devolva um cliente ao pool. O valor padrão é 100.
Usando um pool de conexões
Para usar um pool de conexões, primeiro crie um mongocxx::pool
, passando o URI como argumento. Em seguida, chame mongocxx::pool::acquire
para receber um cliente do pool. O cliente será automaticamente devolvido ao pool quando sair do escopo.
Consulte o exemplo dopool de conexões para obter mais detalhes.