Menu Docs

Map-Reduce e Coleções Fragmentadas

Observação

Pipeline de Agregação como uma Alternativa ao map-reduce

A partir do MongoDB 5.0, map-reduce está obsoleto:

  • Em vez de map-reduce, você deve usar um aggregation pipeline. aggregation pipeline fornece melhor desempenho e usabilidade do que a redução de mapa.

  • Você pode reescrever operações de map-reduce utilizando aggregation pipeline stages, como $group, $merge e outros.

  • Nas operações de map-reduce que exigem funcionalidade personalizada, você pode usar os operadores de agregação $accumulator e $function. Você pode usar esses operadores para definir expressões de agregação personalizadas no JavaScript.

Para obter exemplos de alternativas de aggregation pipeline para map-reduce, consulte:

map-reduce oferece suporte a operações em collection fragmentadas, tanto como entrada quanto como saída. Esta seção descreve os comportamentos de mapReduce específicos para collection fragmentadas.

Ao utilizar a collection fragmentada como entrada para uma operação de map-reduce, o mongos despachará automaticamente a tarefa de map-reduce para cada fragmento em paralelo. Não é necessária nenhuma opção especial. mongos aguardará a conclusão das tarefas em todos os shards.

Se o campo out para mapReduce tiver o valor sharded , o MongoDB fragmentará a collection de saída usando o campo _id como a chave de fragmento.

Para gerar saída para uma collection fragmentada:

  • Se a collection de saída não existir, crie primeiro a collection fragmentada.

  • Se a collection de saída já existir, mas não estiver fragmentada, map-reduce falhará.

  • Para uma nova collection fragmentada ou vazia, o MongoDB utiliza os resultados do primeiro estágio da operação de map-reduce para criar as parte iniciais distribuídas entre os fragmentos.

  • mongos despacha, em paralelo, um tarefa de pós-processamento de map-reduce para cada shard que possui um chunk. Durante o pós-processamento, cada shard extrairá os resultados de seus próprios chunks dos outros shards, executará a redução/finalização final e escreverá localmente na coleção de saída.

Observação

  • Durante a tarefa posterior de map-reduce, o MongoDB faz a divisão da parte conforme necessário.

  • O balanceamento de parte para a collection de saída é automaticamente evitado durante o pós-processamento para evitar problemas de simultaneidade.