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

MongoDB utilizza molta memoria

1) In termini di durata, puoi dire al driver java MongoDB (che Morphia sta usando), quale strategia usare, vedi https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/ mongodb/WriteConcern.java#L53 . È semplicemente un compromesso tra velocità:NONE (nemmeno i problemi di connettività causeranno un errore) fino a FSYNC_SAFE (i dati vengono definitivamente scritti su disco). Per i dettagli interni, controlla http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/

2) Tutti i tuoi dati vengono mappati sulla memoria (ecco perché l'edizione a 32 bit ha un limite di dimensione di 2 GB), tuttavia vengono effettivamente caricati solo quando richiesto. MongoDB lo lascia al sistema operativo usando mmap. Quindi, finché è disponibile più RAM, MongoDB caricherà felicemente tutti i dati di cui ha bisogno nella RAM per eseguire query molto velocemente. Se non c'è più memoria disponibile, spetta al sistema operativo sostituire le vecchie cose. Questo ha il piacevole effetto che i tuoi dati verranno mantenuti in memoria anche se riavvii il processo MongoDB; solo se si riavvia il server stesso i dati devono essere recuperati nuovamente dal disco. Penso che lo svantaggio sia che il processo del database potrebbe avere una comprensione leggermente migliore di ciò che dovrebbe essere sostituito prima rispetto al sistema operativo. Non sto usando MongoDB su Windows e non ho visto quel messaggio su Mac o Linux (ancora ), ma il sistema operativo dovrebbe gestirlo per te (e sostituire automaticamente le informazioni secondo necessità). Hai provato a impostare il driver su JOURNAL_SAFE (dovrebbe essere un buon compromesso tra sicurezza e velocità dei dati)? In tale impostazione, nessun dato dovrebbe essere perso, anche se il processo MongoDB si interrompe.

3) In generale MongoDB è progettato per utilizzare quanta più memoria disponibile possibile, ma potresti essere in grado di limitarla con http://captaincodeman.com/2011/02/27/limit-mongodb-memory-use-windows/ - che non ho testato, poiché utilizziamo server Linux (virtuali).