MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Desempenho do Map-Reduce no MongoDb 2.2, 2.4 e 2.6


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