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

Równoważenie obciążenia MongoDB w wielu instancjach AWS

Na razie nie będzie to kompletna odpowiedź, jest zbyt wiele szczegółów i mógłbym napisać cały esej na ten temat, podobnie jak wiele innych, jednak ponieważ nie mam tyle czasu do stracenia, dodam trochę komentarza o tym, co widzę.

Zestawy replik nie są zaprojektowane do tego celu. Jeśli chcesz zrównoważyć obciążenie, możesz w rzeczywistości szukać shardingu, który pozwoli Ci to zrobić.

Replikacja służy do automatycznego przełączania awaryjnego.

Ponieważ, aby być na bieżąco, Twoi członkowie będą otrzymywać tyle samo operacji, co pierwsi, wydaje się, że może to nie pomóc.

W rzeczywistości, zamiast jednego serwera z wieloma połączeniami w kolejce, masz wiele połączeń na wielu serwerach oczekujących przestarzałych danych, ponieważ spójność członków jest ostateczna, a nie natychmiastowa w przeciwieństwie do technologii ACID, jednak mówiąc, że są one ostatecznie spójne tylko przez 32-nieparzyste ms, które oznacza, że ​​nie są wystarczająco opóźnione, aby zapewnić przyzwoitą przepustowość, jeśli podstawowy jest załadowany.

Ponieważ odczyty SĄ współbieżne, uzyskasz tę samą prędkość, niezależnie od tego, czy czytasz z podstawowego, czy z drugorzędnego. Przypuszczam, że mógłbyś opóźnić niewolnika, aby spowodował wstrzymanie operacji operacyjnych, ale to przywróciłoby w zamian bardzo nieaktualne dane.

Nie wspominając już o tym, że MongoDB nie jest multi-masterem, jako taki, że możesz pisać tylko do jednego węzła na raz, sprawia, że ​​slaveOK nie jest już najbardziej użytecznym ustawieniem na świecie i widziałem wiele razy, kiedy sami 10gen zalecają używanie shardingu zamiast tego ustawienia.

Wymagałoby to własnego kodowania. W tym momencie możesz rozważyć użycie bazy danych, która obsługuje http://en.wikipedia .org/wiki/Multi-master_replication

Dzieje się tak, ponieważ prędkość, której szukasz, najprawdopodobniej w rzeczywistości dotyczy zapisów, a nie odczytów, jak omówiłem powyżej.

Jest to zalecany sposób, ale znalazłeś z nim zastrzeżenie. Jest to niestety coś, co pozostaje nierozwiązane, a replikacja z wieloma wzorcami ma rozwiązać, jednak replikacja z wieloma wzorcami dodaje swój własny statek szczurów dżumy do samej Europy i gorąco polecam, abyś zrobił kilka poważnych badań, zanim pomyślisz, czy MongoDB nie może obecnie obsługiwać Twoich potrzeb.

Możesz się o nic martwić, ponieważ kolejka fsync jest zaprojektowana tak, aby radzić sobie z wąskim gardłem IO spowalniającym twoje zapisy, tak jak w SQL, a odczyty są współbieżne, więc jeśli zaplanujesz swój schemat i zestaw roboczy prawidłowo, powinieneś być w stanie uzyskać ogromny liczba PO.

W rzeczywistości jest tutaj powiązane pytanie od pracownika 10 generacji, które bardzo dobrze przeczytać:https:/ /stackoverflow.com/a/17459488/383478 i pokazuje, jaką przepustowość MongoDB może osiągnąć pod obciążeniem.

Wkrótce rozwinie się dzięki nowemu blokowaniu na poziomie dokumentu, które jest już w gałęzi deweloperskiej.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak rejestrować moje zapytania w MongoDB C# Driver 2.0?

  2. Błąd MongoDB:nie można użyć wielokrotnego zapisu z limitem=0

  3. MongoDB:Czy można ograniczyć wyniki $lookup do określonych pól (jako projekcja)?

  4. Konwersja BSON do JSON przy użyciu MongoDB Driver Java API

  5. Jak używać $regex wewnątrz $lub jako wyrażenia agregacji?