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 redução de mapa utilizando estágios do pipeline de agregação, 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.
collection fragmentada como entrada
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.
collection fragmentada como saída
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, uma tarefa de pós-processamento de redução de mapa para cada fragmento que possui um bloco. Durante o pós-processamento, cada fragmento extrairá os resultados para seus próprios blocos dos outros fragmentos, executará a redução/finalização final e gravará localmente na coleta 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.