1) Med hensyn til holdbarhed kan du fortælle MongoDB java-driveren (som Morphia bruger), hvilken strategi du skal bruge, se https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/ mongodb/WriteConcern.java#L53
. Det er simpelthen en afvejning mellem hastighed:NONE
(ikke engang forbindelsesproblemer vil forårsage en fejl) op til FSYNC_SAFE
(dataene er bestemt skrevet til disk).For de interne detaljer se http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/
2) Hele dine data er kortlagt til hukommelsen (det er derfor, 32bit-udgaven har en størrelsesgrænse på 2 GB), men den indlæses kun, når det er nødvendigt. MongoDB overlader det til operativsystemet ved at bruge mmap. Så så længe der er mere RAM tilgængeligt, vil MongoDB gladeligt indlæse alle de data, den har brug for i RAM for at lave forespørgsler meget hurtige. Hvis der ikke er mere ledig hukommelse, er det op til operativsystemet at skifte gamle ting ud. Dette har den gode effekt, at dine data vil blive opbevaret i hukommelsen, selvom du genstarter MongoDB-processen; kun hvis du genstarter selve serveren, skal dataene hentes fra disken igen. Jeg tror, at ulempen er, at databaseprocessen måske har en lidt bedre forståelse af, hvad der skal byttes ud først i forhold til operativsystemet. Jeg bruger ikke MongoDB på Windows og har ikke set den besked på Mac eller Linux (endnu ), men operativsystemet bør håndtere det for dig (og automatisk udskifte stykker information efter behov). Har du prøvet at indstille driveren til JOURNAL_SAFE
(bør være et godt kompromis mellem datasikkerhed og hastighed)? I den indstilling bør ingen data gå tabt, selvom MongoDB-processen dør.
3) Generelt er MongoDB bygget til at bruge så meget tilgængelig hukommelse som muligt, men du kan muligvis begrænse det med http://captaincodeman.com/2011/02/27/limit-mongodb-memory-use-windows/ - som jeg ikke har testet, da vi bruger (virtuelle) Linux-servere.