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

zrozumieć system pamięci podręcznej MongoDB

Uwaga :Zostało to napisane w 2013 roku, kiedy MongoDB był jeszcze dość młody, nie miał funkcji, które ma dzisiaj, podczas gdy ta odpowiedź nadal jest prawdziwa dla mmap, nie ma jej w przypadku innych technologii pamięci masowej, które obecnie wdraża MongoDB, takich jak WiredTiger, lub Percona.

Dobre miejsce, aby zacząć dokładnie rozumieć, co to jest indeks:http://docs.mongodb.org/manual/core/indexes/

Kiedy już to odświeżysz, zrozumiesz, dlaczego są tak dobre, przechodząc do bardziej skomplikowanych pytań.

Skąd możemy mieć pewność, że wyszukiwane przez nas dane będą pochodzić z pamięci, czy nie?

Jednym ze sposobów jest przyjrzenie się yields pole w dowolnym zapytaniu explain() . Dzięki temu dowiesz się, ile razy czytnik otwierał blokadę, ponieważ dane nie znajdowały się w pamięci RAM.

Innym bardziej dogłębnym sposobem jest przyjrzenie się programom takim jak mongostat i innym tego typu programom. Te programy poinformują Cię o tym, jakie błędy strony (kiedy dane muszą być stronicowane do pamięci RAM z dysku) występują na twoim mongod .

Rozumiem, że MongoDB wykorzystuje wolną pamięć do buforowania danych o pamięci, która jest w tej chwili wolna, ale czy ktoś mógłby dokładniej wyjaśnić globalne zachowanie?

To jest właściwie niepoprawne. Łatwiej jest po prostu powiedzieć, że MongoDB to robi, ale w rzeczywistości tak nie jest. W rzeczywistości to system operacyjny i jego własne algorytmy stronicowania, zwykle LRU, robią to dla MongoDB. MongoDB wykonuje jednak plany indeksowania pamięci podręcznej przez określony czas, dzięki czemu nie musi stale sprawdzać i testować indeksów.

W którym przypadku byłoby lepiej użyć zmiennej w naszym serwerze węzłów, która przechowuje dane, niż zaufać systemowi pamięci podręcznej MongoDB?

Nie jestem pewien, jak tego oczekujesz... Mam na myśli to, że te dwie rzeczy robią zupełnie inne rzeczy i jeśli zamierzasz wczytać dane z MongoDB do aplikacji podczas uruchamiania tej zmiennej, zdecydowanie nie polecam tego.

Poza tym algorytmy systemu operacyjnego do zarządzania pamięcią są niezwykle dojrzałe i szybkie, więc wszystko jest w porządku.

Jak na całym świecie radzisz używać MongoDB do ogromnego ruchu?

Hmm, to ogromne pytanie. Naprawdę poleciłbym ci trochę Google w tym temacie, ale jak mówi dokumentacja, musisz upewnić się, że twój zestaw roboczy mieści się w pamięci RAM.

Oto dobry punkt wyjścia:co to znaczy dopasować „zestaw roboczy” do pamięci RAM dla MongoDB?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB rozwija wiele tablic

  2. $ lookup zwraca pustą tablicę

  3. Konwersja Dictionary<string, object>-to-BsonDocument z pominięciem pola _t

  4. Uwierzytelnianie MongoDB 3.2 nie powiodło się

  5. Programowa aktualizacja pól w Mongo i Meteor