MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Entendendo as opções de tempo limite do cliente MongoDB


Os drivers do MongoDB fornecem várias opções para os clientes do Mongo lidarem com diferentes erros de tempo limite de rede que podem ocorrer durante o uso. Em alguns casos, os valores padrão dessas opções podem não se adequar ao seu caso de uso, por isso é crucial entender as diferentes opções de tempo limite do MongoClient para evitar travamentos imprevisíveis no fluxo do aplicativo e melhorar o desempenho.
Configurando opções de tempo limite para mongo -serverselection, connection &socketClick To Tweet
Em um nível abstrato, sempre que você usa o MongoClient para conectar, enviar ou receber uma solicitação, ele usa opções de tempo limite predefinidas internamente para decidir quanto tempo o aplicativo aguardará um estabelecimento de conexão inicial ou a resposta do servidor para sua solicitação.

Aplicativos típicos estão interagindo com diferentes servidores de banco de dados com base na lógica de negócios. Por exemplo, seu histórico de pagamentos pode estar em um cluster de banco de dados e seus registros de análise em outro cluster. Os tempos limite padrão podem influenciar significativamente o comportamento do seu aplicativo quando houver erros de rede. Se o seu servidor de análise estiver inativo, cada operação aguardará um padrão de 30 segundos antes de falhar (o que pode ou não ser o que você deseja).

Tempo limite de seleção do servidor


O tempo limite de seleção do servidor é o número de milissegundos que o driver mongo aguardará para selecionar um servidor para uma operação antes de desistir e gerar um erro.

Essa opção foi introduzida na versão mais recente dos drivers Mongo de próxima geração (versão 3.2.x+ em Java). Para cada tipo de operação e preferência do usuário, o MongoClient seleciona o servidor usando um algoritmo de seleção para executar a operação.

Para uma operação de gravação em um servidor autônomo, há apenas um servidor disponível que é selecionado. Em um conjunto de réplicas ou clusters fragmentados, pode haver mais de um servidor que preencha os critérios de preferência do usuário para uma operação.

Os cenários possíveis em que o tempo limite de seleção do servidor pode ocorrer incluem – se uma rede estiver inativa ou uma falha de nó primário em um conjunto de réplicas.

O driver Mongo usa 30s como valor padrão do tempo limite de seleção do servidor . Dependendo do caso de uso, podemos aumentar ou diminuir esse limite.

Tempo limite de conexão


O tempo limite da conexão é o número de milissegundos que o driver aguardará antes que uma nova tentativa de conexão seja cancelada.

Após a seleção do servidor, o cliente tenta estabelecer uma conexão com o servidor.

Dependendo da infraestrutura de rede e da carga no servidor, o cliente pode ter que aguardar o estabelecimento da conexão. Possíveis cenários em que o tempo limite da conexão pode acontecer - o servidor é desligado, problemas de rede, IP/DNS errado, número da porta etc.

O valor padrão de um tempo limite de conexão depende da versão e do idioma do driver. As versões mais recentes do driver Mongo Java e Ruby têm um tempo limite padrão de 10s para estabelecimentos de conexão, enquanto o driver NodeJs não tem tempo limite.

Se o tempo limite for muito alto, você corre o risco de travar seu aplicativo. Se o tempo limite for muito baixo, você pode desistir muito rapidamente. É melhor testar com valores diferentes para encontrar o tempo limite certo para seu aplicativo.

SocketTimeout


O tempo limite do soquete é o número de milissegundos que um envio ou recebimento em um soquete pode levar antes do tempo limite.

Após estabelecer uma conexão com o servidor, o cliente envia uma solicitação ao servidor e recebe a resposta de volta usando uma conexão já estabelecida. Internamente, a conexão usa um soquete para enviar a solicitação do cliente e recebe a resposta

Mongo Java e Nodejs  o driver tem um tempo limite de soquete padrão de 0s, o que significa basicamente sem tempo limite . Enquanto Ruby oferece um tempo limite de soquete de 5s. Você não quer colocar um limite neste tempo limite, pois diferentes operações levarão o tempo variável para operar.

Mais Exploração


As opções de tempo limite do MongoClient variam de acordo com as diferentes versões e idiomas dos drivers do Mongo. Recomendamos que você consulte a documentação da classe MongoClient do seu driver para entender suas opções de tempo limite padrão. Fornecemos alguns exemplos de código abaixo para ilustrar a configuração de tempo limite em Java e Ruby.

Driver Java MongoDB

List<MongoCredential> creds = new ArrayList<MongoCredential>();  creds.add(MongoCredential.createCredential(username, DBname, password);

MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder();

optionsBuilder.connectTimeout(CONNECTION_TIME_OUT_MS);

optionsBuilder.socketTimeout(SOCKET_TIME_OUT_MS);

optionsBuilder.serverSelectionTimeout(SERVER_SELECTION_TIMEOUT_MS);

MongoClientOptions options = optionsBuilder.build();

Mongo m = new MongoClient(new ServerAddress(server , port), creds, options);

Driver NodeJs MongoDB

var uri =  ‘mongodb://[username:password@]host[:port1]/[database]’;
var options = { server:
               { socketOptions: 
                    { 
                        socketTimeoutMS: SOCKET_TIME_OUT_MS, 
                        connectTimeoutMS: CONNECTION_TIMEOUT_MS 
                    }
                }
              };
MongoClient.connect(uri, options, function(err, db) {
  if(!err) {
    console.log("We are connected");
  }
});


Perdemos alguma coisa? Sinta-se à vontade para nos informar nos comentários abaixo. Não se esqueça de se inscrever em nossa newsletter para ser o primeiro a receber dicas como essas e muito mais!