2012-10-01 32 views
29

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

+0

Meybe marco de la agregación se cambie algo, en este momento MapReduce está presa lenta – user956584

+0

Cualquier idea de por qué es esto? ¿Todavía tiene un solo subproceso? – YMC

+1

http://stackoverflow.com/a/9434093/979474 o http://stackoverflow.com/a/11749738/979474 – user956584

Respuesta

56

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:

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í:

+3

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

Cuestiones relacionadas