sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB Intern implementering af indeksering?

Jeg tror, ​​du har en idé om, at indekser er gemt i RAM. Hvad hvis jeg siger, at de ikke er det.

Først og fremmest skal vi forstå, hvad der er indekser, indekser er dybest set en pegepind til at fortælle, hvor på disken det dokument er. Ligesom vi har indeksering i bogen, kan vi for hurtigere adgang se, hvilket emne der er på hvilket sidetal.

Så når indekser oprettes, gemmes de også på disken, men når en applikation kører, bliver de baseret på hyppig brug og endnu hurtigere adgang indlæst i RAM, men der er forskel mellem indlæst og oprettet.

Også indlæsning af et indeks er ikke det samme som at indlæse en samling eller poster i RAM. Hvis vi har indlæst indeks, ved vi, hvad alle dokumenter skal hentes fra disken, i modsætning til at indlæse alle dokumenter og kontrollere hver enkelt af dem. Så indekser undgår samlingsscanning.

Oprettelse af indekser er en gangsproces, men hver skrivning på dokumentet kan potentielt ændre indekseringen, så en del skal muligvis genberegnes, fordi poster kan blive blandet baseret på ændringen i data. det er derfor, indeksering gør skrivning langsom og læsning hurtig.

Igen tænk på som en bog, hvis du tilføjer et nyt emne på f.eks. 2 sider imellem bogen, skal alle indekserne efter det emnenummer genberegnes. derfor.

  • Nej, optegnelser gemmes ikke i RAM, mens oprettelsen på en måde behandler hele dokumentet i samlingen og opretter et indeksark, dette ville forståeligt nok være tidskrævende, hvis der er for mange dokumenter, det er derfor, der er en mulighed for at oprette indeks i baggrunden.
  • Indeks oprettes én gang, du kan slette det og oprette igen, men det genskabes ikke ved genstart af applikationen eller DB. det ville være sindssygt for kæmpe indsamling i sharded miljø.
  • Igen er det ikke sandt. _id kommer som et indekseret felt, så indekset er allerede oprettet til tom samling, da når du skriver , ville det genberegne indekset. Da det er et unikt indeks, ville behandlingen være hurtigere.
  • alle poster vil kun blive gemt i RAM, når du bruger in-memory motor af MongoDB, som jeg tror kommer som enterprise-udgave. På grund af indeksering vil den ikke automatisk indlæse posten i RAM.


  1. Hvis værdien af ​​en ejendom er nul ved opdatering, skal den pågældende egenskab ikke føjes til posten

  2. Er der nogen måde at implementere paginering i foråret webflux og fjederdata reaktive

  3. Kan ikke oprette forbindelse til mongoDB, der kører i docker-container

  4. Sådan $lookup med pipeline &lad parametre i C# (MongoDB.Driver 2.7.2)