Voici l'état actuel des fonctionnalités de Map/Reduce dans MongoDB
1) La plupart des limitations de performances pour Map/Reduce restent dans MongoDB version 2.2. Le moteur Map/Reduce nécessite toujours que chaque enregistrement soit converti de BSON en JSON, les calculs réels sont effectués à l'aide du moteur JavaScript intégré (qui est lent) et il existe toujours un seul verrou JavaScript global, qui n'autorise qu'un seul thread JavaScript. pour s'exécuter en une seule fois.
Certaines améliorations incrémentielles ont été apportées à Map/Reduce pour les clusters partitionnés. Plus particulièrement, l'opération de réduction finale est désormais répartie sur plusieurs fragments, et la sortie est également fragmentée en parallèle.
Je ne recommanderais pas Map/Reduce pour l'agrégation en temps réel dans MongoDB version 2.2
2) À partir de MongoDB 2.2, il existe désormais un nouveau cadre d'agrégation. Il s'agit d'une nouvelle implémentation des opérations d'agrégation, écrite en C++ et étroitement intégrée au framework MongoDB.
La plupart des travaux Map/Reduce peuvent être réécrits pour utiliser le cadre d'agrégation. Ils s'exécutent généralement plus rapidement (l'amélioration de la vitesse par 20 par rapport à Map/Reduce est courante dans la version 2.2), ils utilisent pleinement le moteur de requête existant et vous pouvez exécuter plusieurs commandes d'agrégation en parallèle.
Si vous avez des exigences d'agrégation en temps réel, commencez par le cadre d'agrégation. Pour plus d'informations sur le cadre d'agrégation, consultez ces liens :
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
3) Il y a eu des améliorations significatives dans Map/Reduce dans MongoDB version 2.4. Le moteur JavaScript SpiderMonkey a été remplacé par le moteur JavaScript V8, et il n'y a plus de verrou JavaScript global, ce qui signifie que plusieurs threads Map/Reduce peuvent s'exécuter simultanément.
Le moteur Map/Reduce est toujours considérablement plus lent que le framework d'agrégation, pour deux raisons principales :
-
Le moteur JavaScript est interprété, tandis que le framework d'agrégation exécute du code C++ compilé
-
Le moteur JavaScript exige toujours que chaque document examiné soit converti de BSON en JSON ; si vous enregistrez la sortie dans une collection, le jeu de résultats doit ensuite être reconverti de JSON en BSON
Il n'y a pas de changements significatifs dans Map/Reduce entre 2.4 et 2.6.
Je ne recommande toujours pas d'utiliser Map/Reduce pour l'agrégation en temps réel dans MongoDB version 2.4 ou 2.6.
4) Si vous avez vraiment besoin de Map/Reduce, vous pouvez également consulter l'adaptateur Hadoop. Vous trouverez plus d'informations ici :
- http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
- http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
- http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start