Obs :Det här skrevs redan 2013 när MongoDB fortfarande var ganska ung, det hade inte de funktioner som det har idag, medan det här svaret fortfarande gäller för mmap, det gör det inte för de andra lagringsteknologierna som MongoDB nu implementerar, såsom WiredTiger, eller Percona.
Ett bra ställe att börja för att förstå exakt vad är ett index:http://docs.mongodb.org/manual/core/indexes/
När du har fräschat upp det kommer du att berätta varför de är så bra, men hoppar över till några av de mer intrikata frågorna.
Hur kan vi vara säkra på att data vi frågar efter kommer från minnet eller inte?
Ett sätt är att titta på yields
fältet på någon fråga explain()
. Detta kommer att berätta hur många gånger läsaren har låst sig eftersom data inte fanns i RAM.
Ett annat mer djupgående sätt är att titta på program som mongostat och andra sådana program. Dessa program kommer att berätta om vilka sidfel (när data måste sökas in i RAM från disken) som händer på din mongod
.
Jag förstår att MongoDB använder det lediga minnet för att cache data om minnet som är ledigt för tillfället, men kan någon förklara det globala beteendet ytterligare?
Detta är faktiskt felaktigt. Det är lättare att bara säga att MongoDB gör detta men i verkligheten gör det inte det. Det är faktiskt operativsystemet och dess egna personsökningsalgoritmer, vanligtvis LRU, som gör detta för MongoDB. MongoDB gör cache-indexplaner för en viss tidsperiod dock så att den inte hela tiden behöver kontrollera och testa för index.
I vilket fall kan det vara bättre att använda en variabel i vår nodserver som lagrar data än att lita på MongoDB-cachesystemet?
Inte säker på hur du förväntar dig att det ska fungera...jag menar att de två gör helt olika saker och om du tänker läsa in din data från MongoDB i din applikation vid uppstart till den varan så skulle jag definitivt inte rekommendera det.
Dessutom är OS-algoritmer för minneshantering extremt mogna och snabba, så det är okej.
Hur rekommenderar du globalt att använda MongoDB för stor trafik?
Hmm, det här är en så stor fråga. Jag skulle verkligen rekommendera dig att googla lite i det här ämnet, men som dokumentationen säger måste du se till att ditt arbetsset passar in i RAM-minnet för en.
Här är en bra utgångspunkt:Vad innebär det att passa "arbetsuppsättning" i RAM för MongoDB?