sql >> Database teknologi >  >> NoSQL >> MongoDB

Forstå MongoDB Client Timeout-indstillinger

MongoDB-drivere giver flere muligheder for Mongo-klienter til at håndtere forskellige netværkstimeoutfejl, der kan opstå under brug. I nogle tilfælde passer standardværdierne for disse indstillinger muligvis ikke til din brugssituation, så det er afgørende at forstå de forskellige MongoClient-timeoutindstillinger for at undgå uforudsigelige hængende i dit applikationsflow og forbedre ydeevnen.

Konfiguration af timeout-indstillinger for mongo -servervalg, forbindelse og socketKlik for at tweete

På et abstrakt niveau, når du bruger MongoClient til at oprette forbindelse, sende eller modtage en anmodning, bruger den internt foruddefinerede timeout-indstillinger til at bestemme, hvor længe applikationen vil vente på en første forbindelsesetablering eller svaret fra serveren på din anmodning.

Typiske applikationer interagerer med forskellige databaseservere baseret på forretningslogikken. For eksempel kan din betalingshistorik være på én databaseklynge og dine analyseposter på en anden klynge. Standard time-outs kan i væsentlig grad påvirke din applikations adfærd, når der er netværksfejl. Hvis din analyseserver er nede, vil hver operation vente i en standard på 30 sekunder, før den mislykkes (hvilket måske er, hvad du ønsker).

Timeout for servervalg

Timeout for servervalg er antallet af millisekunder, mongo-driveren venter med at vælge en server til en operation, før han giver op og rejser en fejl.

Denne mulighed blev introduceret i den nyere version af næste generation af Mongo-drivere (version 3.2.x+ i Java). For hver type operation og brugerpræference vælger MongoClient serveren ved hjælp af en valgalgoritme til at udføre operationen.

For en skriveoperation på en selvstændig server er der kun én tilgængelig server, som bliver valgt. I et replikasæt eller shardede klynger kan der være mere end én server, som opfylder brugerpræferencekriterierne for en operation.

Mulige scenarier, hvor timeout for servervalg kan ske, omfatter – hvis et netværk er nede eller en primær knudefejl i et replikasæt.

Mongo-driver bruger 30s som standardværdi for timeout for servervalg . Afhængigt af use casen kan vi øge eller mindske denne tærskel.

Timeout for forbindelse

Forbindelsestimeout er antallet af millisekunder, chaufføren vil vente, før et nyt forbindelsesforsøg afbrydes.

Efter valg af serveren forsøger klienten at etablere en forbindelse med serveren.

Afhængigt af netværksinfrastruktur og belastning på serveren kan klienten være nødt til at vente på oprettelse af forbindelse. Mulige scenarier, hvor forbindelsestimeout kan ske – serveren bliver lukket ned, netværksproblemer, forkert IP/DNS, portnummer osv.

Standardværdien for en forbindelsestimeout afhænger af driverens version og sprog. Mongo Java &Ruby seneste driverversioner har en 10s standard timeout for forbindelsesetableringer, mens NodeJs driveren ikke har nogen timeout.

Hvis timeouten er for høj, risikerer du at stoppe din ansøgning. Hvis timeouten er for lav, kan du give op for hurtigt. Det er bedre at teste med forskellige værdier for at finde den rigtige timeout for din applikation.

SocketTimeout

Socket timeout er antallet af millisekunder, en afsendelse eller modtagelse på en socket kan tage, før timeout.

Efter at have etableret en forbindelse med serveren, sender klienten en anmodning til serveren og modtager svaret tilbage ved hjælp af en allerede etableret forbindelse. Internt bruger forbindelsen en socket til at sende klientanmodningen og modtager svaret

Mongo Java &Nodejs  Driver har en standard socket timeout på 0s, hvilket betyder stort set ingen timeout . Mens Ruby tilbyder en 5s socket timeout. Du ønsker ikke at sætte en grænse for denne timeout, da forskellige operationer vil tage den variable tid at fungere.

Yderligere udforskning

MongoClient Timeout-indstillinger varierer på de forskellige versioner og sprog af Mongo-drivere. Vi opfordrer dig til at gennemgå dokumentationen af ​​MongoClient-klassen for din chauffør for at forstå dine standardindstillinger for timeout. Vi har givet nogle eksempler på kode nedenfor for at illustrere timeout-konfigurationen i Java og Ruby.

MongoDB Java Driver

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-driver

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

Gik vi glip af noget? Fortæl os det gerne i kommentarerne nedenfor. Glem ikke at tilmelde dig vores nyhedsbrev for at være den første til at modtage tips som disse og mere!


  1. Dårlig opslagssammenlægningsydelse

  2. Redis ikke i stand til at oprette forbindelse ved optaget belastning

  3. NoSQL Trends – MongoDB, Cassandra, CouchDB &Riak

  4. MongoDB-aggregationsprojektstreng til ObjectId