sort - Map-Reduce el rendimiento en MongoDb 2.2, 2.4 y 2.6
map reduce (1)
Encontré esta discusión: MongoDB: Terrible rendimiento de MapReduce . 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?
Aquí está el estado actual de la funcionalidad de Map / Reduce en MongoDB
1) La mayoría 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 para la agregación en tiempo real en MongoDB versión 2.2
2) Comenzando con MongoDB 2.2, ahora hay un nuevo Framework 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 pueden reescribirse 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, eche un vistazo a estos enlaces:
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
3) Ha habido 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 motor de asignación / reducción es aún considerablemente más lento que el marco de agregación, por dos motivos principales:
El motor de JavaScript se interpreta, mientras que el Marco de agregación ejecuta el código compilado de C ++
El motor de JavaScript todavía requiere que cada documento examinado se convierta de BSON a JSON; si está guardando el resultado en una colección, el conjunto de resultados debe ser convertido de JSON nuevamente a BSON
No hay cambios significativos en Map / Reduce 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 de Hadoop. Hay más información aquí: