Aqui está o estado atual da funcionalidade para Mapear/Reduzir no MongoDB
1) A maioria das limitações de desempenho para Map/Reduce ainda permanecem no MongoDB versão 2.2. O mecanismo Map/Reduce ainda exige que cada registro seja convertido de BSON para JSON, os cálculos reais são realizados usando o mecanismo JavaScript incorporado (que é lento) e ainda há um único bloqueio global de JavaScript, que permite apenas um único thread JavaScript para correr de uma só vez.
Houve algumas melhorias incrementais no Map/Reduce para clusters fragmentados. Mais notavelmente, a operação de redução final agora é distribuída em vários fragmentos, e a saída também é fragmentada em paralelo.
Eu não recomendaria Map/Reduce para agregação em tempo real no MongoDB versão 2.2
2) A partir do MongoDB 2.2, agora existe um novo Aggregation Framework. Esta é uma nova implementação de operações de agregação, escrita em C++ e totalmente integrada à estrutura do MongoDB.
A maioria dos trabalhos Map/Reduce pode ser reescrito para usar o Aggregation Framework. Eles geralmente são executados mais rápido (melhoria de velocidade de 20x vs. Map/Reduce é comum na versão 2.2), eles fazem uso total do mecanismo de consulta existente e você pode executar vários comandos de agregação em paralelo.
Se você tiver requisitos de agregação em tempo real, o primeiro lugar para começar é com o Aggregation Framework. Para obter mais informações sobre a estrutura de agregação, dê uma olhada nestes links:
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
3) Houve melhorias significativas no Map/Reduce no MongoDB versão 2.4. O mecanismo JavaScript SpiderMonkey foi substituído pelo mecanismo JavaScript V8 e não há mais um bloqueio global de JavaScript, o que significa que vários encadeamentos Map/Reduce podem ser executados simultaneamente.
O mecanismo Map/Reduce ainda é consideravelmente mais lento que a estrutura de agregação, por dois motivos principais:
-
O mecanismo JavaScript é interpretado, enquanto o Aggregation Framework executa o código C++ compilado
-
O mecanismo JavaScript ainda exige que todos os documentos examinados sejam convertidos de BSON para JSON; se você estiver salvando a saída em uma coleção, o conjunto de resultados deverá ser convertido de JSON de volta para BSON
Não há mudanças significativas no Map/Reduce entre 2.4 e 2.6.
Ainda não recomendo usar o Map/Reduce para agregação em tempo real no MongoDB versão 2.4 ou 2.6.
4) Se você realmente precisa de Mapear/Reduzir, também pode consultar o Adaptador Hadoop. Tem mais informações aqui:
- 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