MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB utilise beaucoup de mémoire

1) En termes de durabilité, vous pouvez indiquer au pilote java MongoDB (que Morphia utilise), quelle stratégie utiliser, voir https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/ mongodb/WriteConcern.java#L53 . C'est simplement un compromis entre la vitesse :NONE (même les problèmes de connectivité ne causeront pas d'erreur) jusqu'à FSYNC_SAFE (les données sont définitivement écrites sur le disque). Pour les détails internes, consultez http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/

2) Toutes vos données sont mappées en mémoire (c'est pourquoi l'édition 32 bits a une limite de taille de 2 Go), mais elles ne sont réellement chargées que lorsque cela est nécessaire. MongoDB laisse cela au système d'exploitation en utilisant mmap. Ainsi, tant qu'il y a plus de RAM disponible, MongoDB se fera un plaisir de charger toutes les données dont il a besoin dans la RAM pour effectuer des requêtes très rapidement. S'il n'y a plus de mémoire disponible, c'est au système d'exploitation d'échanger les anciens éléments. Cela a le bon effet que vos données seront conservées en mémoire même si vous redémarrez le processus MongoDB; uniquement si vous redémarrez le serveur lui-même, les données doivent être à nouveau extraites du disque. Je pense que l'inconvénient est que le processus de base de données pourrait avoir une meilleure compréhension de ce qui devrait être échangé en premier par rapport au système d'exploitation. Je n'utilise pas MongoDB sous Windows et je n'ai pas vu ce message sur Mac ou Linux (encore ), mais le système d'exploitation doit gérer cela pour vous (et échanger automatiquement des informations selon les besoins). Avez-vous essayé de définir le pilote sur JOURNAL_SAFE (devrait être un bon compromis entre la sécurité des données et la vitesse) ? Dans ce cadre, aucune donnée ne doit être perdue, même si le processus MongoDB meurt.

3) En général, MongoDB est conçu pour utiliser autant de mémoire disponible que possible, mais vous pourrez peut-être la restreindre avec http://captaincodeman.com/2011/02/27/limit-mongodb-memory-use-windows/ - que je n'ai pas testé, car nous utilisons des serveurs Linux (virtuels).