Encontré esta discusión: MongoDB: Terrible MapReduce Performance. Básicamente, trata de evitar las consultas de MR de Mongo, ya que se trata de un subproceso único y no se supone que sea en tiempo real. Han pasado 2 años, y me pregunto qué ha cambiado desde entonces. Ahora tenemos MongoDb 2.2. Escuché que los MR ahora tienen múltiples hilos. Por favor, comparta sus ideas sobre el uso de MR para solicitudes en tiempo real, como la obtención de datos para solicitudes HTTP frecuentes de aplicaciones web. ¿Es capaz de usar efectivamente índices?Mapa-Reducir el rendimiento en MongoDb 2.2, 2.4 y 2.6
Respuesta
Aquí es el estado actual de la funcionalidad de map/reduce en MongoDB
1) La mayor parte de las limitaciones de rendimiento para map/reduce aún permanecen en MongoDB versión 2.2. El motor de Mapa/Reducción aún requiere que cada registro se convierta de BSON a JSON, los cálculos reales se realizan utilizando el motor de JavaScript incorporado (que es lento), y todavía hay un único bloqueo de JavaScript global, que solo permite un solo hilo de JavaScript para ejecutar en una sola vez.
Se han producido algunas mejoras incrementales de Map/Reduce para clústeres fragmentados. En particular, la operación de reducción final se distribuye ahora en múltiples fragmentos, y la salida también se fragmenta en paralelo.
No recomendaría map/reduce la agregación en tiempo real en MongoDB versión 2.2
2) A partir de MongoDB 2.2, ahora hay un nuevo marco de agregación. Esta es una nueva implementación de operaciones de agregación, escrita en C++, y estrechamente integrada en el marco MongoDB.
La mayoría de los trabajos de Map/Reduce se pueden reescribir para usar el Framework de Agregación. Por lo general, se ejecutan más rápido (20 veces la velocidad de mejora frente a Map/Reduce es común en la versión 2.2), hacen un uso completo del motor de consultas existente, y puede ejecutar múltiples comandos de agregación en paralelo.
Si tiene requisitos de agregación en tiempo real, el primer lugar para comenzar es con el Marco de agregación. Para obtener más información sobre el marco de agregación, echar un vistazo a estos enlaces:
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
3) se han producido mejoras significativas en map/reduce en MongoDB versión 2.4. El motor de JavaScript de SpiderMonkey ha sido reemplazado por el motor de JavaScript de V8, y ya no hay un bloqueo de JavaScript global, lo que significa que se pueden ejecutar varios hilos de Mapa/Reducir al mismo tiempo.
El Mapa/Reducir motor está todavía considerablemente más lento que el marco agregación, por dos razones principales:
El motor de JavaScript se interpreta, si bien el marco de agregación carreras compilan código C++
El motor de JavaScript todavía requiere que cada documento examinado se convierta de BSON a JSON; Si va a guardar el resultado en una colección, el conjunto de resultados a continuación debe ser convertida de nuevo a JSON BSON
No hay cambios significativos en el Mapa/Reducir entre 2,4 y 2,6.
Todavía no recomiendo usar Map/Reduce para la agregación en tiempo real en MongoDB versión 2.4 o 2.6.
4) Si realmente necesita Map/Reduce, también puede mirar el adaptador Hadoop. Hay más información aquí:
La próxima versión 2.4 tiene otro motor de javascript (V8) que debería mejorar el rendimiento. Para detalles, ver aquí: http://docs.mongodb.org/manual/release-notes/2.4/ – Kamarey
- 1. Cambio versión de Python por defecto desde 2.4 a 2.6
- 2. ¿Seguir el rendimiento de MongoDB?
- 3. Rendimiento de Mongodb en Windows
- 4. Cómo actualizar mongodb de 2.0 a 2.2 en mac osx
- 5. Instalar Python 2.6 en CentOS
- 6. Mejore el rendimiento en Mongodb usando el controlador java
- 7. Django y Python 2.6
- 8. MongoDB: Terrible rendimiento de MapReduce
- 9. Arrastrar y colocar en GWT 2.4
- 10. Advertencias de recuento en Python 2.4
- 11. El rendimiento de MongoDB en las consultas de agregación
- 12. ¿Qué versión de Python (2.4, 2.5, 2.6, 3.0) estandariza para los esfuerzos de desarrollo de producción (y por qué)?
- 13. hashlib/md5. Compatibilidad con python 2.4
- 14. hash SHA256 en Python 2.4
- 15. ¿Cómo mejorar el rendimiento de la actualización() y guardar() en MongoDB?
- 16. Cronometraje en el núcleo de Linux 2.6
- 17. Cómo lograr "AuthType None" en Apache 2.2
- 18. EL 2.2 con Tomcat 6.0.24
- 19. Maketrans en Python 2.6
- 20. ¿Cómo instalar MonoDevelop 2.4 de las fuentes?
- 21. argumento de línea de tiempo de fecha y hora en Python 2.4
- 22. cómo usar el fragmento en Android 2.2?
- 23. Pros y contras de MongoDB?
- 24. Evitar accidentalmente captura KeyboardInterrupt y SystemExit en Python 2.4
- 25. Rendimiento de MongoDB con una estructura de datos en crecimiento
- 26. QtDesigner con PyQt y Python 2.6
- 27. ¿Qué es el campo "__v" en MongoDB
- 28. Python 2.6+ str.format() y expresiones regulares
- 29. Uso del rendimiento y el rendimiento en Ruby
- 30. Usando JavaFX 2.2 Mnemónico (y aceleradores)
Meybe marco de la agregación se cambie algo, en este momento MapReduce está presa lenta – user956584
Cualquier idea de por qué es esto? ¿Todavía tiene un solo subproceso? – YMC
http://stackoverflow.com/a/9434093/979474 o http://stackoverflow.com/a/11749738/979474 – user956584