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.