sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Intern implementering av indexering?

Jag tror att du har en idé om att index lagras i RAM. Tänk om jag säger att de inte är det.

Först och främst måste vi förstå vad som är index, index är i grunden en pekare för att tala om var på disken det dokumentet är. Precis som vi har indexering i bok, för snabbare åtkomst kan vi se vilket ämne på vilket sidnummer.

Så när index skapas, lagras de också på disken, men när en applikation körs, baserat på den frekventa användningen och ännu snabbare åtkomsten, laddas de in i RAM-minnet men det finns en skillnad mellan laddat och skapat.

Att ladda ett index är inte samma sak som att ladda en samling eller poster i RAM. Om vi ​​har indexladdat vi vet vad alla dokument som ska hämtas från disken, till skillnad från att ladda alla dokument och verifiera vart och ett av dem. Så index undviker samlingssökning.

Skapandet av index är en gångsprocess, men varje skrivning på dokumentet kan potentiellt ändra indexeringen, så en del kan behöva beräknas om eftersom poster kan blandas baserat på förändringen i data. det är därför indexering gör att skriva långsamt och läsa snabbt.

Återigen tänk på som en bok, om du lägger till ett nytt ämne på säg 2 sidor mellan boken, måste alla index efter det ämnesnumret räknas om. följaktligen.

  • Nej, poster lagras inte i RAM-minnet, samtidigt som man skapar det bearbetar hela dokumentet i samlingen och skapar ett indexark, det skulle förstås vara tidskrävande om det finns för många dokument, det är därför det finns ett alternativ för att skapa index i bakgrunden.
  • Index skapas en gång, du kan ta bort det och skapa igen, men det kommer inte att återskapas vid omstart av programmet eller DB. det skulle vara vansinnigt för enorm insamling i sönderdelad miljö.
  • Återigen är det inte sant. _id kommer som ett indexerat fält, så index är redan skapat för tom samling, som när du skriver , skulle det räkna om indexet. Eftersom det är ett unikt index skulle bearbetningen gå snabbare.
  • alla poster skulle bara lagras i RAM när du använder minnesmotorn i MongoDB, som jag tror kommer som företagsutgåva. På grund av indexering skulle den inte automatiskt ladda posten till RAM.


  1. Fel vid anslutning till Azure:Olagligt tecken i lösenord med mongoose 5.0.1 men fungerar i 4.13.9

  2. Mongo db aggregering flera villkor

  3. Hur dekorerar man ett klassobjekt för att vara ett index och får samma sak som att använda sureIndex?

  4. Syntaxfel Oväntat token ILLEGAL Mongo Console