77 votes

Qu'est-ce que cela signifie d'insérer "l'ensemble de travail" dans la RAM pour MongoDB?

MongoDB est rapide, mais uniquement lorsque votre groupe de travail ou votre index de travail peut tenir dans la RAM. Donc, si mon serveur dispose de 16 Go de RAM, cela signifie-t-il que la taille de toutes mes collections doit être inférieure ou égale à 16 Go? Comment dit-on "ok c'est mon set de travail, le reste peut être" archivé? "

88voto

AdaTheDev Points 53358

"Travail" est essentiellement la quantité de données ET d'index qui seront actives/en cours d'utilisation par votre système.

Ainsi, par exemple, supposons que vous avez au moins 1 année de données. Pour des raisons de simplicité, chaque mois, se rapporte à 1 go de données de 12 GO au total, et pour couvrir chaque mois des données que vous avez 1 go de valeur de l'index à nouveau total de 12 GO pour l'année.

Si vous avez toujours accès à la dernière 12 mois de données, puis votre jeu de travail est de: 12 GO (données) + 12 GO (index) = 24GO.

Toutefois, si vous n'avez en fait d'accéder à la dernière 3 mois de données, puis votre jeu de travail est de: 3 GO (données) + 3 GO (index) = 6 GBITS. Dans ce scénario, si vous aviez 8GO de RAM, et puis vous avez commencé à vérifier régulièrement l'accès aux 6 derniers mois de données, puis votre jeu de travail commencerait à se dépasser au-delà de votre quantité de RAM disponible et avoir un impact sur les performances.

Mais généralement, si vous avez suffisamment de RAM pour couvrir la quantité de données/index vous attendre à être souvent accès alors vous serez amende.

Edit: Réponse à la question dans les commentaires
Je ne suis pas sûr que j'ai tout suivi, mais je vais tenter de répondre. Tout d'abord, le calcul de l'ensemble de travail est un "ballon parc de la figure". Deuxièmement, si vous avez un (par exemple) de 1 go indice sur user_id, alors seule la partie de l'indice qui est généralement accessible doit être dans la RAM (par exemple, supposons que 50% des utilisateurs sont inactifs, puis 0,5 GO de l'indice sera de plus en plus fréquemment requis ou nécessaires dans la RAM). En général, le plus de RAM que vous avez, le mieux, surtout que le jeu de travail est susceptible de croître au fil du temps en raison de l'utilisation accrue. C'est là que la fragmentation vient dans fractionner les données sur plusieurs nœuds et vous pouvez, de manière rentable à l'échelle. Votre travail est ensuite divisé sur plusieurs machines, sens le plus peuvent être conservés dans la mémoire RAM. Besoin de plus de RAM? Ajouter une autre machine du fragment sur.

9voto

Scott Hernandez Points 4300

Le jeu est en gros tout ce que vous utilisez le plus (fréquemment). Si vous utilisez l'index pour la collecte de B à rechercher un sous-ensemble de documents, alors vous pouvez considérer que votre jeu de travail. Aussi longtemps que la plupart des pièces les plus couramment utilisées de ces structures, qui peuvent tenir dans la mémoire, alors les choses seront extrêmement rapide. Les pièces ne rentrent plus dans votre travail, comme la plupart des documents peuvent ralentir. Généralement, les choses vont devenir beaucoup plus lent si votre index dépasser votre mémoire.

Oui, vous pouvez avoir beaucoup de données, où la plupart des il est "archivé" et rarement utilisé, sans affecter les performances de notre application ou un impact sur votre jeu de travail (qui ne comprend pas que les données archivées).

0voto

Sandeep Giri Points 108

J'ai compris que l'index est un B-Tree. Si les données dépassent la taille que peut contenir le bélier, pourquoi devraient-elles tant compter? Le B-Tree est assez rapide et réduit considérablement les accès au disque. Pourquoi s'inquiéter?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X