MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zrozumienie opcji limitu czasu klienta MongoDB

Sterowniki MongoDB zapewniają klientom Mongo kilka opcji obsługi różnych błędów przekroczenia limitu czasu sieci, które mogą wystąpić podczas użytkowania. W niektórych przypadkach wartości domyślne tych opcji mogą nie pasować do Twojego przypadku użycia, dlatego ważne jest poznanie różnych opcji limitu czasu MongoClient, aby uniknąć nieprzewidywalnych zawieszeń w przepływie aplikacji i poprawić wydajność.

Konfigurowanie opcji limitu czasu dla mongo -wybór serwera, połączenie i gniazdoKliknij, aby tweetować

Na poziomie abstrakcyjnym, za każdym razem, gdy używasz MongoClient do łączenia, wysyłania lub odbierania żądania, wewnętrznie używa predefiniowanych opcji limitu czasu, aby zdecydować, jak długo aplikacja będzie czekać na początkowe nawiązanie połączenia lub odpowiedź z serwera na Twoje żądanie.

Typowe aplikacje współdziałają z różnymi serwerami baz danych w oparciu o logikę biznesową. Na przykład historia płatności może znajdować się w jednym klastrze bazy danych, a rekordy analizy w innym klastrze. Domyślne limity czasu mogą znacząco wpłynąć na zachowanie aplikacji w przypadku błędów sieciowych. Jeśli Twój serwer analityczny nie działa, każda operacja będzie czekać domyślnie przez 30 sekund, zanim zakończy się niepowodzeniem (co może, ale nie musi, być tym, czego chcesz).

Limit czasu wyboru serwera

Limit czasu wyboru serwera to liczba milisekund, przez którą sterownik mongo będzie czekał na wybranie serwera do operacji, zanim zrezygnuje i zgłosi błąd.

Ta opcja została wprowadzona w nowszej wersji sterowników Mongo nowej generacji (wersja 3.2.x+ w Javie). Dla każdego typu operacji i preferencji użytkownika MongoClient wybiera serwer przy użyciu algorytmu wyboru do wykonania operacji.

W przypadku operacji zapisu na samodzielnym serwerze dostępny jest tylko jeden serwer, który jest wybierany. W zestawie replik lub klastrach podzielonych na fragmenty może istnieć więcej niż jeden serwer, który spełnia kryteria preferencji użytkownika dla operacji.

Możliwe scenariusze, w których może nastąpić przekroczenie limitu czasu wyboru serwera, obejmują – jeśli sieć nie działa lub awaria węzła podstawowego w zestawie replik.

Sterownik Mongo używa 30 s jako domyślnej wartości limitu czasu wyboru serwera . W zależności od przypadku użycia możemy zwiększyć lub zmniejszyć ten próg.

Limit czasu połączenia

Limit czasu połączenia to liczba milisekund, przez którą sterownik będzie czekał, zanim nowa próba połączenia zostanie przerwana.

Po wybraniu serwera klient próbuje nawiązać połączenie z serwerem.

W zależności od infrastruktury sieciowej i obciążenia serwera, klient może czekać na nawiązanie połączenia. Możliwe scenariusze, w których może dojść do przekroczenia limitu czasu połączenia – serwer zostanie wyłączony, problemy z siecią, zły adres IP/DNS, numer portu itp.

Domyślna wartość limitu czasu połączenia zależy od wersji i języka sterownika. Najnowsze wersje sterowników Mongo Java i Ruby mają domyślny limit czasu wynoszący 10 sekund dla ustanowienia połączenia, podczas gdy sterownik NodeJs nie ma limitu czasu.

Jeśli limit czasu jest zbyt wysoki, ryzykujesz zatrzymanie aplikacji. Jeśli limit czasu jest zbyt krótki, możesz zbyt szybko się poddać. Lepiej jest testować z różnymi wartościami, aby znaleźć odpowiedni limit czasu dla swojej aplikacji.

SocketTimeout

Limit czasu gniazda to liczba milisekund, jaką może zająć wysyłanie lub odbieranie w gnieździe, zanim upłynie limit czasu.

Po nawiązaniu połączenia z serwerem klient wysyła żądanie do serwera i otrzymuje odpowiedź z powrotem za pomocą już nawiązanego połączenia. Wewnętrznie połączenie wykorzystuje gniazdo do wysyłania żądania klienta i odbierania odpowiedzi

Sterownik Mongo Java i Nodejs ma domyślny limit czasu gniazda równy 0, co oznacza w zasadzie brak limitu czasu . Podczas gdy Ruby oferuje limit czasu gniazda 5s. Nie chcesz ograniczać tego limitu czasu, ponieważ różne operacje będą wymagały zmiennego czasu działania.

Dalsza eksploracja

Opcje limitu czasu MongoClient różnią się w zależności od wersji i języka sterowników Mongo. Zachęcamy do przejrzenia dokumentacji klasy MongoClient sterownika, aby zrozumieć domyślne opcje limitu czasu. Poniżej udostępniliśmy przykładowy kod, aby zilustrować konfigurację limitu czasu w Javie i Ruby.

Sterownik MongoDB Java

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

Sterownik MongoDB NodeJs

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

Czy coś przeoczyliśmy? Daj nam znać w komentarzach poniżej. Nie zapomnij zapisać się do naszego biuletynu, aby jako pierwszy otrzymywać wskazówki takie jak te i nie tylko!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Policz pola w kolekcji MongoDB

  2. Prosta strona logowania w nodejs przy użyciu ekspresu i paszportu z mongodb

  3. Mongoose findOneAndUpdate Upsert _id null?

  4. Poprawka Mongodba KB2731284

  5. MongoDB Node znajdź, jak radzić sobie z brakiem wyników?