Remarque :Cela a été écrit en 2013 lorsque MongoDB était encore assez jeune, il n'avait pas les fonctionnalités qu'il a aujourd'hui, alors que cette réponse est toujours vraie pour mmap, ce n'est pas le cas pour les autres technologies de stockage que MongoDB implémente maintenant, comme WiredTiger, ou Percona.
Un bon endroit pour commencer à comprendre exactement ce que c'est un index :http://docs.mongodb.org/manual/core/indexes/
Une fois que vous aurez approfondi ce point, vous comprendrez pourquoi ils sont si bons, en passant à certaines des questions les plus complexes.
Comment être sûr que les données que nous interrogeons proviendront ou non de la mémoire ?
Une façon consiste à regarder les yields
champ sur n'importe quelle requête explain()
. Cela vous indiquera combien de fois le lecteur a cédé son verrou parce que les données n'étaient pas dans la RAM.
Une autre façon plus approfondie consiste à regarder des programmes comme mongostat et d'autres programmes similaires. Ces programmes vous indiqueront quels défauts de page (lorsque les données doivent être paginées dans la RAM à partir du disque) se produisent sur votre mongod
.
Je comprends que MongoDB utilise la mémoire libre pour mettre en cache des données sur la mémoire qui est libre pour le moment, mais est-ce que quelqu'un pourrait expliquer plus en détail le comportement global ?
C'est en fait incorrect. Il est plus facile de dire simplement que MongoDB fait cela, mais en réalité ce n'est pas le cas. C'est en fait le système d'exploitation et ses propres algorithmes de pagination, généralement le LRU, qui le font pour MongoDB. MongoDB met en cache les plans d'index pendant une certaine période de temps afin qu'il n'ait pas à constamment vérifier et tester les index.
Dans quel cas serait-il préférable d'utiliser une variable dans notre serveur de nœud qui stocke les données plutôt que de faire confiance au système de cache MongoDB ?
Je ne sais pas comment vous vous attendez à ce que cela fonctionne... Je veux dire que les deux font des choses assez différentes et si vous avez l'intention de lire vos données de MongoDB dans votre application au démarrage dans cette var, je ne le recommanderais certainement pas.
De plus, les algorithmes du système d'exploitation pour la gestion de la mémoire sont extrêmement matures et rapides, donc ça va.
Comment conseillez-vous globalement d'utiliser MongoDB pour un trafic important ?
Hmm, c'est une question tellement énorme. Vraiment, je vous recommanderais Google un peu à ce sujet, mais comme l'indique la documentation, vous devez vous assurer que votre ensemble de travail tient dans la RAM pour un.
Voici un bon point de départ :que signifie insérer un "ensemble de travail" dans la RAM pour MongoDB ?