sql >> Database >  >> NoSQL >> MongoDB

Time-outopties voor MongoDB-client begrijpen

MongoDB-stuurprogramma's bieden verschillende opties voor Mongo-clients om verschillende netwerktime-outfouten af ​​te handelen die tijdens gebruik kunnen optreden. In sommige gevallen passen de standaardwaarden voor deze opties mogelijk niet bij uw gebruik, dus het is van cruciaal belang om de verschillende MongoClient-time-outopties te begrijpen om onvoorspelbare vastlopers in uw app-stroom te voorkomen en de prestaties te verbeteren.

Time-outopties configureren voor mongo -serverselectie, verbinding en socketClick To Tweet

Op abstract niveau, wanneer u MongoClient gebruikt om verbinding te maken, een verzoek te verzenden of te ontvangen, gebruikt het intern vooraf gedefinieerde time-outopties om te beslissen hoe lang de toepassing wacht op een eerste verbindingsopbouw of het antwoord van de server op uw verzoek.

Typische toepassingen werken samen met verschillende databaseservers op basis van de bedrijfslogica. Uw betalingsgeschiedenis kan zich bijvoorbeeld in het ene databasecluster bevinden en uw analyserecords in een ander cluster. De standaard time-outs kunnen het gedrag van uw toepassing aanzienlijk beïnvloeden wanneer er netwerkfouten zijn. Als uw analyseserver niet beschikbaar is, wacht elke bewerking op een standaardwaarde van 30 seconden voordat deze mislukt (wat al dan niet is wat u wilt).

Time-out serverselectie

Time-out voor serverselectie is het aantal milliseconden dat de mongo-driver wacht om een ​​server voor een bewerking te selecteren voordat hij opgeeft en een fout meldt.

Deze optie is geïntroduceerd in de nieuwere versie van de volgende generatie Mongo-stuurprogramma's (versie 3.2.x+ in Java). Voor elk type bewerking en gebruikersvoorkeur selecteert de MongoClient de server met behulp van een selectiealgoritme om de bewerking uit te voeren.

Voor een schrijfbewerking op een standalone server is er slechts één server beschikbaar die wordt geselecteerd. In een replicaset of shard-clusters kan er meer dan één server zijn die voldoet aan de gebruikersvoorkeurscriteria voor een bewerking.

Mogelijke scenario's waarin een time-out voor serverselectie kan optreden, zijn onder meer:​​een netwerk is niet beschikbaar of een primaire node-fout in een replicaset.

Mongo-stuurprogramma gebruikt 30s als standaardwaarde van de time-out voor serverselectie . Afhankelijk van het gebruik kunnen we deze drempel verhogen of verlagen.

Verbindingstime-out

Time-out voor verbinding is het aantal milliseconden dat de bestuurder wacht voordat een nieuwe verbindingspoging wordt afgebroken.

Na selectie van de server probeert de client een verbinding met de server tot stand te brengen.

Afhankelijk van de netwerkinfrastructuur en de belasting van de server, kan het zijn dat de client moet wachten op het tot stand brengen van een verbinding. Mogelijke scenario's waarbij verbindingstime-out kan optreden:de server wordt afgesloten, netwerkproblemen, verkeerde IP/DNS, poortnummer, enz.

De standaardwaarde van een verbindingstime-out is afhankelijk van de versie en taal van het stuurprogramma. Mongo Java &Ruby nieuwste stuurprogrammaversies hebben een standaardtime-out van 10s voor het tot stand brengen van verbindingen, terwijl het NodeJs-stuurprogramma geen time-out heeft.

Als de time-out te hoog is, loopt u het risico uw toepassing te vertragen. Als de time-out te laag is, kun je te snel opgeven. Het is beter om met verschillende waarden te testen om de juiste time-out voor uw toepassing te vinden.

SocketTimeout

Socket-time-out is het aantal milliseconden dat het verzenden of ontvangen op een socket kan duren voordat de time-out optreedt.

Nadat een verbinding met de server tot stand is gebracht, stuurt de client een verzoek naar de server en ontvangt het antwoord terug via een reeds tot stand gebrachte verbinding. Intern gebruikt de verbinding een socket om het clientverzoek te verzenden en ontvangt het antwoord

Mongo Java &Nodejs  stuurprogramma hebben een standaard sockettime-out van 0s, wat in feite geen time-out betekent . Terwijl Ruby een 5s socket-time-out biedt. U wilt geen limiet stellen aan deze time-out, aangezien verschillende bewerkingen een variabele tijd nodig hebben om te werken.

Verdere verkenning

MongoClient Time-outopties variëren afhankelijk van de verschillende versies en talen van Mongo-stuurprogramma's. We raden u aan de documentatie van de MongoClient-klasse van uw stuurprogramma door te nemen om uw standaard time-outopties te begrijpen. We hebben hieronder wat voorbeeldcode gegeven om de time-outconfiguratie in Java en Ruby te illustreren.

MongoDB Java-stuurprogramma

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);

MongoDB NodeJs-stuurprogramma

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");
  }
});

Hebben we iets gemist? Laat het ons gerust weten in de reacties hieronder. Vergeet je niet aan te melden voor onze nieuwsbrief om als eerste dit soort tips en meer te ontvangen!


  1. Mongodb - aggregatie $push indien voorwaardelijk

  2. Query met tekenreeksdatumnotatie in mongodb

  3. NodeJs - Redis gebruiken, connect-redis met express

  4. MongoEngine Document Object gemaakt met from_json slaat niet op