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

MongoDB Wewnętrzna implementacja indeksowania?

Myślę, że masz pomysł, że indeksy są przechowywane w pamięci RAM. A jeśli powiem, że nie.

Przede wszystkim musimy zrozumieć, czym są indeksy, indeksy są w zasadzie wskaźnikiem wskazującym, gdzie na dysku znajduje się ten dokument. Podobnie jak w przypadku indeksowania w książce, dla szybszego dostępu możemy zobaczyć, jaki temat jest na którym numerze strony.

Kiedy więc tworzone są indeksy, są one również przechowywane na dysku, ale gdy aplikacja jest uruchomiona, w oparciu o częste używanie i jeszcze szybszy dostęp, są one ładowane do pamięci RAM, ale istnieje różnica między załadowaniem a tworzeniem.

Również ładowanie indeksu nie jest tym samym, co ładowanie kolekcji lub rekordów do pamięci RAM. Jeśli mamy załadowany indeks, wiemy, jakie wszystkie dokumenty pobrać z dysku, w przeciwieństwie do ładowania wszystkich dokumentów i weryfikacji każdego z nich. Dzięki temu indeksy unikają skanowania kolekcji.

Tworzenie indeksów jest procesem jednorazowym, ale każdy zapis w dokumencie może potencjalnie zmienić indeksowanie, więc niektóre części mogą wymagać ponownego obliczenia, ponieważ rekordy mogą zostać przetasowane na podstawie zmiany danych. dlatego indeksowanie sprawia, że ​​zapis jest wolny, a odczyt szybki.

Ponownie myśl o książce, jeśli dodasz nowy temat, powiedzmy, 2 strony pomiędzy książką, wszystkie indeksy po tym numerze tematu muszą zostać ponownie obliczone. odpowiednio.

  • Nie, rekordy nie są przechowywane w pamięci RAM, podczas ich tworzenia w pewnym sensie przetwarza wszystkie dokumenty w kolekcji i tworzy arkusz indeksu, byłoby to czasochłonne, zrozumiałe, gdyby było zbyt wiele dokumentów, dlatego istnieje opcja tworzenia indeksu w tle.
  • Indeks jest tworzony jednorazowo, można go usunąć i utworzyć ponownie, ale nie zostanie on ponownie utworzony po ponownym uruchomieniu aplikacji lub bazy danych. byłoby to szaleństwo w przypadku ogromnej kolekcji w shardowanym środowisku.
  • Ponownie to nieprawda. _id jest polem indeksowanym, więc indeks jest już tworzony dla pustej kolekcji, ponieważ kiedy robisz write , indeks zostanie przeliczony. Ponieważ jest to unikalny indeks, przetwarzanie byłoby szybsze.
  • wszystkie rekordy byłyby przechowywane w pamięci RAM tylko wtedy, gdy używasz silnika in-memory MongoDB, który moim zdaniem jest wersją korporacyjną. Ze względu na indeksowanie rekord nie ładowałby automatycznie do pamięci RAM.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zakres paginacji podczas zapytań i sortowania dynamicznych, nieunikatowych pól w mongodb

  2. Niestandardowy obraz dokowany MongoDb

  3. JavaScript momentjs konwertuje UTC z ciągu na obiekt daty

  4. Bieganie meteoru w klastrze i zmiany w czasie rzeczywistym

  5. Konwertuj obraz base64 na plik w węźle Js