MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Grundlegendes zu MongoDB-Client-Timeout-Optionen

MongoDB-Treiber bieten mehrere Optionen für Mongo-Clients, um verschiedene Netzwerkzeitüberschreitungsfehler zu behandeln, die während der Nutzung auftreten können. In einigen Fällen passen die Standardwerte für diese Optionen möglicherweise nicht zu Ihrem Anwendungsfall. Daher ist es wichtig, die verschiedenen Timeout-Optionen von MongoClient zu verstehen, um unvorhersehbare Hänge in Ihrem Anwendungsablauf zu vermeiden und die Leistung zu verbessern.

Konfigurieren von Timeout-Optionen für mongo -serverselection, connection &socketClick To Tweet

Auf abstrakter Ebene verwendet MongoClient immer dann, wenn Sie eine Anfrage verbinden, senden oder empfangen, intern vordefinierte Timeout-Optionen, um zu entscheiden, wie lange die Anwendung auf einen anfänglichen Verbindungsaufbau oder die Antwort des Servers auf Ihre Anfrage warten soll. P>

Typische Anwendungen interagieren basierend auf der Geschäftslogik mit verschiedenen Datenbankservern. Beispielsweise könnte sich Ihr Zahlungsverlauf auf einem Datenbankcluster und Ihre Analysedatensätze auf einem anderen Cluster befinden. Die Standardzeitüberschreitungen können das Verhalten Ihrer Anwendung bei Netzwerkfehlern erheblich beeinflussen. Wenn Ihr Analyseserver ausgefallen ist, wartet jeder Vorgang auf einen Standardwert von 30 Sekunden, bevor er fehlschlägt (was Sie möglicherweise möchten oder nicht).

Zeitüberschreitung bei der Serverauswahl

Das Zeitlimit für die Serverauswahl ist die Anzahl von Millisekunden, die der Mongo-Treiber wartet, um einen Server für einen Vorgang auszuwählen, bevor er aufgibt und einen Fehler auslöst.

Diese Option wurde in der neueren Version der Mongo-Treiber der nächsten Generation (Version 3.2.x+ in Java) eingeführt. Für jede Art von Operation und Benutzerpräferenz wählt der MongoClient den Server mithilfe eines Auswahlalgorithmus aus, um die Operation auszuführen.

Für einen Schreibvorgang auf einem eigenständigen Server steht nur ein Server zur Verfügung, der ausgewählt wird. In einem Replikatsatz oder in Sharding-Clustern kann es mehr als einen Server geben, der die Benutzerpräferenzkriterien für eine Operation erfüllt.

Zu den möglichen Szenarien, in denen es zu einer Zeitüberschreitung bei der Serverauswahl kommen kann, gehören – wenn ein Netzwerk ausfällt oder ein primärer Knoten in einem Replikatsatz ausfällt.

Der Mongo-Treiber verwendet 30 Sekunden als Standardwert für das Zeitlimit für die Serverauswahl . Je nach Anwendungsfall können wir diesen Schwellenwert erhöhen oder verringern.

Verbindungszeitüberschreitung

Verbindungszeitüberschreitung ist die Anzahl von Millisekunden, die der Treiber wartet, bevor ein neuer Verbindungsversuch abgebrochen wird.

Nach Auswahl des Servers versucht der Client eine Verbindung zum Server aufzubauen.

Je nach Netzwerkinfrastruktur und Auslastung des Servers muss der Client ggf. auf einen Verbindungsaufbau warten. Mögliche Szenarien, in denen es zu Verbindungszeitüberschreitungen kommen kann – der Server wird heruntergefahren, Netzwerkprobleme, falsche IP/DNS, Portnummer usw.

Der Standardwert eines Verbindungstimeouts hängt von der Version und Sprache des Treibers ab. Die neuesten Treiberversionen von Mongo Java und Ruby haben eine Standardzeitüberschreitung von 10 Sekunden für den Verbindungsaufbau, während der NodeJs-Treiber keine Zeitüberschreitung hat.

Wenn das Timeout zu hoch ist, riskieren Sie, dass Ihre Anwendung blockiert wird. Wenn das Timeout zu niedrig ist, können Sie zu schnell aufgeben. Es ist besser, mit verschiedenen Werten zu testen, um das richtige Timeout für Ihre Anwendung zu finden.

SocketTimeout

Socket-Timeout ist die Anzahl von Millisekunden, die ein Senden oder Empfangen auf einem Socket dauern kann, bevor das Timeout eintritt.

Nach dem Herstellen einer Verbindung mit dem Server sendet der Client eine Anfrage an den Server und erhält die Antwort über eine bereits hergestellte Verbindung zurück. Intern verwendet die Verbindung einen Socket, um die Client-Anfrage zu senden und die Antwort zu empfangen

Mongo Java &Nodejs  Driver haben ein Standard-Socket-Timeout von 0 s, was im Grunde kein Timeout bedeutet . Während Ruby ein Socket-Timeout von 5 Sekunden bietet. Sie möchten dieses Timeout nicht begrenzen, da verschiedene Vorgänge die variable Zeit für die Ausführung benötigen.

Weitere Erkundung

MongoClient Timeout-Optionen variieren je nach den verschiedenen Versionen und Sprachen der Mongo-Treiber. Wir empfehlen Ihnen, die Dokumentation der MongoClient-Klasse Ihres Treibers durchzugehen, um Ihre standardmäßigen Timeout-Optionen zu verstehen. Wir haben unten einige Beispielcodes bereitgestellt, um die Timeout-Konfiguration in Java und Ruby zu veranschaulichen.

MongoDB-Java-Treiber

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

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

Haben wir etwas verpasst? Lass es uns gerne in den Kommentaren unten wissen. Vergessen Sie nicht, sich für unseren Newsletter anzumelden, um Tipps wie diese und mehr als Erster zu erhalten!