sql >> Base de Datos >  >> NoSQL >> MongoDB

Map-Reduce el rendimiento en MongoDb 2.2, 2.4 y 2.6

Este es 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 la versión 2.2 de MongoDB. El motor Map/Reduce aún requiere que cada registro se convierta de BSON a JSON, los cálculos reales se realizan utilizando el motor de JavaScript integrado (que es lento) y todavía hay un único bloqueo de JavaScript global, que solo permite un único subproceso de JavaScript. para ejecutarse a la vez.

Ha habido algunas mejoras incrementales en Map/Reduce para clústeres fragmentados. En particular, la operación de reducción final ahora se distribuye en varios 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) 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 Map/Reduce se pueden reescribir para usar Aggregation Framework. Por lo general, se ejecutan más rápido (una mejora de la velocidad 20 veces superior a Map/Reduce es común en la versión 2.2), hacen un uso completo del motor de consulta existente y puede ejecutar varios 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 V8, y ya no hay un bloqueo de JavaScript global, lo que significa que varios subprocesos Map/Reduce pueden ejecutarse simultáneamente.

El motor Map/Reduce sigue siendo considerablemente más lento que el marco de agregación, por dos razones principales:

  • Se interpreta el motor JavaScript, mientras que Aggregation Framework ejecuta código C++ compilado

  • El motor de JavaScript aún requiere que cada documento que se examina se convierta de BSON a JSON; si está guardando la salida en una colección, el conjunto de resultados debe convertirse de JSON 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 Mapear/Reducir, también puede consultar el adaptador Hadoop. Hay más información aquí:

  • 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