Pipeline Map-Reduce vs. Agregação no MongoDB
Principais conclusões
O MapReduce, uma técnica utilizada pelo MongoDB para manipulação complexa de dados, foi substituído pelo Aggregation Pipeline em termos de eficiência e inovação.
O MapReduce no MongoDB fornece um mecanismo para processar grandes conjuntos de dados, dividindo-os em partes menores e distribuindo o trabalho por vários nós em um cluster. Essa abordagem permite o processamento paralelo eficiente de dados. Por outro lado, a estrutura de agregação depende de operadores integrados para executar operações como filtragem, classificação e agrupamento no conjunto de dados armazenado no próprio banco de dados. Esses operadores são projetados para serem usados com tipos de dados específicos e fornecem um processo mais simplificado em comparação com a personalização necessária no MapReduce.
O MongoDB sugere a utilização de seu pipeline de agregação para otimizar o desempenho, no entanto, o MapReduce oferece um maior grau de versatilidade e é adequado para sistemas de arquivos distribuídos, como os encontrados no Hadoop.
O MapReduce e o pipeline de agregação são duas abordagens populares utilizadas para lidar com tarefas complexas de processamento de dados no domínio do MongoDB. Embora a estrutura de agregação represente uma inovação mais recente, ela foi aclamada por seu desempenho excepcional. No entanto, ainda existe um contingente de desenvolvedores que continuam a favorecer o MapReduce como seu método preferido, citando a familiaridade e a facilidade de uso como fatores determinantes por trás dessa preferência.
Em essência, é essencial selecionar uma dessas estratégias de consulta intrincadas porque todas levam ao mesmo resultado. No entanto, é crucial entender seus mecanismos subjacentes, distinções e uso ideal.
Como funciona o MapReduce no MongoDB
mapeamento e redução.
Ao utilizar o MapReduce no contexto do MongoDB, delineará as operações de mapeamento e redução de forma independente, empregando JavaScript e incorporando-as, respectivamente, na construção de consulta mapReduce inerente.
A função de mapa serve para dissecar as informações recebidas em pares chave-valor, que normalmente são baseados em categorizações predefinidas. É nesta conjuntura que se determina o método pelo qual os dados devem ser agrupados. Posteriormente, a função de redução realiza cálculos personalizados nos valores associados a cada conjunto de dados e compila o resultado em um repositório separado mantido no banco de dados.
Como funciona o pipeline de agregação no MongoDB
O pipeline de agregação do MongoDB serve como um substituto mais avançado para o MapReduce, permitindo que os usuários realizem cálculos complexos e manipulações de dados dentro do próprio banco de dados. Ao contrário do MapReduce, que exige a criação de funções JavaScript específicas adaptadas para otimizar a eficiência da consulta, o processo de agregação elimina esse requisito, resultando em funcionalidade simplificada, mantendo recursos de alto desempenho.
Em vez de depender de bibliotecas externas para manipulação de dados, esse método utiliza os recursos dos operadores integrados do MongoDB para executar operações como agrupamento e computação. Os resultados são então agrupados em um pipeline de agregação, proporcionando um alto grau de flexibilidade em termos de estruturação da saída final.
Como as consultas diferem entre MapReduce e agregação
Para determinar os números de vendas agregadas para várias categorias de produtos usando uma estrutura MapReduce com agregação de dados, as categorias de produtos servem como identificadores exclusivos ou “chaves”, enquanto os subtotais das vendas de itens individuais constituem os “valores” associados para cada respectiva chave.
Dada uma declaração de problema particular e um conjunto de dados que o acompanha, muitas vezes é útil fornecer uma amostra representativa dos dados para ilustrar suas características e estrutura. No caso da declaração do problema fornecida, um conjunto hipotético de dados brutos pode ser apresentado da seguinte forma:pythonimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import Accuracy_scoredf=pd.read_csv(‘data.csv’) # lê no dataframe de um arquivo CSVX=df[[‘feature1’,‘feature2’]] # seleciona recursos relevantesy=df[’target’] # target variabletrain_size=int(0.8 * len(df)) #
Podemos abordar esse problema utilizando a estrutura MapReduce em conjunto com um pipeline para agregação, pois isso nos permitirá distinguir as diferenças em nossas técnicas de consulta e solução de problemas.
O Método MapReduce
Empregando o Python como base para a programação, a implementação do MapReduce da situação problemática acima mencionada assume a seguinte forma:
import pymongo
client = pymongo.MongoClient(
"mongodb://localhost/"
)
db = client.my_database
sales = db["sales"]
map_function = """
function() {
emit(this.Section, this.Sold);
}
"""
reduce_function = """
function(key, values) {
return Array.sum(values);
}
"""
result = db.command(
"mapReduce",
"sales",
map=map_function,
reduce=reduce_function,
out="section_totals"
)
doc = [doc for doc in db.section_totals.find()]
print(doc)
Ao executar esta operação no conjunto de dados inicial, a saída subsequente exibirá um padrão semelhante ao seguinte:
[{
'_id': 'Adidas',
'value': 9.0
},{
'_id': 'Nike',
'value': 12.0
}]
Após uma inspeção mais detalhada, pode-se observar que os processadores Map e Reduce dentro desse script são encapsulados como funções JavaScript, contidas em variáveis Python. Essas variáveis são subsequentemente passadas para a consulta MapReduce, que as direciona para uma coleção de saída alocada denotada pelo nome “seção\_totais”.
Como usar um pipeline de agregação
A incorporação do pipeline de agregação resulta em um resultado mais simplificado e direto em comparação com o método original. O seguinte ilustra o processo mencionado acima utilizando o pipeline de agregação:
import pymongo
client = pymongo.MongoClient("mongodb://localhost/")
db = client.funmi
sales = db["sales"]
pipeline = [
{
"$group": {
"_id": "$Section",
"totalSold": { "$sum": "$Sold" }
}
},
{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$totalSold"
}
}
]
result = list(sales.aggregate(pipeline))
print(result)
Espera-se que a execução dessa operação de agregação produza resultados muito semelhantes aos obtidos por meio de uma metodologia MapReduce:
[{
'Section': 'Nike',
'TotalSold': 12
},{
'Section': 'Adidas',
'TotalSold': 9
}]
Desempenho e velocidade da consulta
O MongoDB defende a utilização de seu pipeline de agregação avançado sobre o tradicional MapReduce devido à sua maior eficiência e funcionalidade simplificada.
Conduzimos um experimento na seção anterior em que tentamos fundamentar nossa afirmação executando as consultas simultaneamente em um computador equipado com 12 gigabytes de RAM. Os resultados indicaram que o pipeline de agregação teve um desempenho mais eficiente, levando em média apenas 0,014 segundos para ser executado. Por outro lado, o mesmo sistema levou aproximadamente 0,058 segundos para processar a consulta MapReduce.
Embora possa não ser uma medida precisa de desempenho, os dados parecem apoiar a sugestão do MongoDB. O impacto dessa discrepância pode parecer insignificante ao considerar consultas individuais; no entanto, seu efeito cumulativo torna-se substancial ao longo de inúmeras solicitações, variando de milhares a milhões.
Os prós e contras do MapReduce
Avalie as vantagens e desvantagens do MapReduce para identificar seus pontos fortes no processamento de dados.
Prós
Ao utilizar uma implementação separada das funções de mapa e redução, o RDD do Apache Spark fornece um maior grau de adaptabilidade, permitindo que os usuários adaptem seu pipeline de processamento de acordo com requisitos específicos.
Utilizando a integração perfeita deste aplicativo com o MongoDB, os usuários podem armazenar facilmente as saídas geradas em uma coleção recém-criada em seu banco de dados.
O MapReduce é uma ferramenta poderosa que pode ser utilizada em sistemas de arquivos distribuídos, como os encontrados no Hadoop, para integração perfeita com o MongoDB.
A vantagem de sua compatibilidade com linguagens de script externas, como JavaScript, aprimora sua escalabilidade e acessibilidade, tornando mais simples para indivíduos com experiência anterior em programação aplicar os conceitos de MapReduce de maneira eficaz.
Contras
A utilização de recursos externos de script é um pré-requisito para a implementação desse método, o que inevitavelmente resulta em eficiência reduzida quando comparada à do pipeline de agregação.
O MapReduce, embora seja uma solução eficaz para processar grandes quantidades de dados distribuídos em várias máquinas, pode exibir problemas de eficiência de memória ao lidar com conjuntos de dados intrincados que exigem um alto grau de poder computacional. Isso geralmente requer a utilização de vários nós de computação para gerenciar e processar efetivamente essas informações.
O processamento de dados em tempo real pode apresentar alguns desafios, pois a consulta pode ser afetada negativamente por um desempenho mais lento em comparação com cenários não em tempo real.
Prós e contras do pipeline de agregação
Examinar o pipeline de agregação com mais detalhes, levando em consideração suas vantagens e deficiências, produz uma compreensão mais profunda de seus recursos.
Prós
A investigação tende a ser de natureza multifacetada, caracterizada pela brevidade, clareza e facilidade de compreensão.
A implementação do pipeline de agregação demonstra uma melhoria impressionante na eficiência quando comparada aos métodos MapReduce tradicionais, resultando em uma atualização de desempenho notável.
O aplicativo possui um conjunto abrangente de operadores MongoDB integrados, permitindo que os usuários construam consultas com notável versatilidade e adaptabilidade.
⭐Suporta processamento de dados em tempo real.
A integração do pipeline de agregação no MongoDB pode ser realizada sem problemas, sem depender de scripts ou softwares externos.
Você tem a opção de estabelecer uma nova coleção em seu banco de dados MongoDB para armazenar os resultados gerados, caso precise preservá-los.
Contras
As limitações impostas pela abordagem do Flink para processar dados em comparação com o modelo MapReduce do Apache Spark são tais que podem não exibir o mesmo nível de adaptabilidade e versatilidade ao lidar com estruturas de dados complexas. Isso se deve à sua dependência do processamento de fluxo em vez de utilizar linguagens de script externas para agregação de dados, o que restringe a gama de métodos disponíveis para manipulação de dados.
A proficiência necessária para utilizar e compreender com eficácia as complexidades da implementação do MongoDB pode representar um obstáculo formidável para programadores que são novatos nesse sistema de banco de dados, sem exposição prévia a seus recursos e funcionalidades.
Quando você deve usar MapReduce ou Aggregation Pipeline?
Ao determinar se deve utilizar MapReduce ou um pipeline de agregação para processamento de dados, é aconselhável avaliar cuidadosamente as necessidades específicas do projeto em questão em termos de requisitos de processamento de dados.
O MapReduce oferece uma solução ideal ao lidar com conjuntos de dados intrincados que exigem operações lógicas sofisticadas e processos algorítmicos em um sistema de gerenciamento de arquivos descentralizado. Ao adaptar as funções do MapReduce para atender a requisitos específicos e distribuí-las em várias unidades de computação, é possível dimensionar com eficiência suas tarefas de processamento de dados horizontalmente, em vez de priorizar a otimização do desempenho.
Em contraste, o pipeline de agregação se destaca no processamento de informações complexas que não exigem raciocínio ou metodologias personalizadas. Quando seus dados são armazenados exclusivamente no MongoDB, utilizar o pipeline de agregação torna-se uma escolha racional devido à sua ampla gama de operações integradas.
O pipeline de agregação oferece uma solução superior para processamento de dados em tempo real quando a eficiência computacional é de extrema importância. É recomendado como a opção preferida em tais cenários.
Execute cálculos complexos no MongoDB
O MongoDB emprega duas abordagens distintas para executar operações de processamento de big data e, embora cada metodologia tenha suas próprias características únicas, existem várias diferenças notáveis entre elas. Em contraste com a prática convencional de pré-recuperação de dados antes de realizar cálculos, o que pode resultar em desempenho mais lento, essas técnicas optam por realizar cálculos diretamente sobre as informações residentes no próprio banco de dados. Essa abordagem direta da computação gera uma execução de consulta mais simplificada, aumentando assim a eficiência geral.
Embora seja verdade que o pipeline de agregação tende a superar o MapReduce em termos de velocidade e eficiência, é importante observar que há certos cenários em que utilizar o MapReduce pode ser uma opção mais adequada. Apesar disso, seria ideal priorizar o uso do pipeline de agregação sempre que possível devido ao seu desempenho superior.