Map-Reduce vs. Aggregation Pipeline dans MongoDB

Principaux enseignements

  • MapReduce et le pipeline d’agrégation sont deux méthodes de traitement des données complexes dans MongoDB. Le cadre d’agrégation est plus récent et plus efficace.
  • MapReduce consiste à spécifier des fonctions distinctes de mappage et de réduction à l’aide de JavaScript, tandis que le pipeline d’agrégation utilise les opérateurs intégrés de MongoDB.
  • Le pipeline d’agrégation est recommandé par MongoDB pour de meilleures performances, mais MapReduce offre plus de flexibilité et convient aux systèmes de fichiers distribués comme Hadoop.

MapReduce et le pipeline d’agrégation sont les deux méthodes que vous pouvez utiliser pour traiter des données complexes dans MongoDB. Le cadre d’agrégation est plus récent et connu pour son efficacité. Mais certains développeurs préfèrent encore s’en tenir à MapReduce, qu’ils considèrent comme plus confortable.

En pratique, vous souhaitez choisir l’une de ces méthodes d’interrogation complexes, car elles permettent d’atteindre le même objectif. Mais comment fonctionnent-elles ? En quoi sont-elles différentes, et laquelle devriez-vous utiliser ?

Comment fonctionne MapReduce dans MongoDB ?

MapReduce dans MongoDB vous permet d’effectuer des calculs complexes sur un grand volume de données et d’agréger le résultat en un morceau plus complet. La méthode MapReduce comporte deux fonctions : map et reduce.

Lorsque vous travaillez avec MapReduce dans MongoDB, vous spécifiez les fonctions map et reduce séparément à l’aide de JavaScript et insérez chacune d’entre elles dans le fichier intégré mapReduce intégrée.

La fonction map divise d’abord les données entrantes en paires clé-valeur, généralement sur la base d’un regroupement cartographié. C’est là que vous indiquez comment vous souhaitez regrouper les données. La fonction reduce exécute ensuite des calculs personnalisés sur les valeurs de chaque groupe de données et agrège le résultat dans une collection distincte stockée dans la base de données.

Fonctionnement du pipeline d’agrégation dans MongoDB

Le pipeline d’agrégation de MongoDB est une alternative améliorée à MapReduce. Comme MapReduce, il vous permet d’effectuer des calculs complexes et des transformations de données directement dans la base de données. Mais l’agrégation ne nécessite pas l’écriture de fonctions JavaScript dédiées qui peuvent réduire les performances des requêtes.

Au lieu de cela, il utilise les opérateurs MongoDB intégrés pour manipuler, regrouper et calculer les données. Il agrège ensuite les résultats après chaque requête. Ainsi, le pipeline d’agrégation est plus personnalisable puisque vous pouvez structurer les résultats comme vous le souhaitez.

Voir aussi :  Comment utiliser le module de calendrier de Python

Comment les requêtes diffèrent entre MapReduce et l’agrégation

Supposons que vous souhaitiez calculer les ventes totales d’articles en fonction des catégories de produits. Dans le cas de MapReduce et de l’agrégation, les catégories de produits deviennent les clés, tandis que les sommes des articles de chaque catégorie deviennent les valeurs correspondantes.

Prenons un exemple de données brutes pour l’énoncé du problème décrit, qui ressemble à ceci :

Résolvons ce scénario de problème en utilisant MapReduce et un pipeline d’agrégation pour différencier leurs requêtes et leurs méthodes de résolution de problèmes.

La méthode MapReduce

En utilisant Python comme langage de programmation de base, la méthode mapReduce du scénario décrit précédemment ressemble à ceci :

Si vous l’exécutez sur les données de l’échantillon original, vous obtiendrez une sortie comme celle-ci :

En y regardant de plus près, vous devriez voir que les processeurs map et reduce sont des fonctions JavaScript à l’intérieur de variables Python. Le code les transmet à la fonction mapReduce qui spécifie une collection de sortie dédiée (section_totaux).

Utilisation d’un pipeline d’agrégation

En plus d’offrir une sortie plus fluide, la requête par pipeline d’agrégation est plus directe. Voici à quoi ressemble l’opération précédente avec le pipeline d’agrégation :

L’exécution de cette requête d’agrégation donnera les résultats suivants, qui sont similaires aux résultats de l’approche MapReduce :

Performance et rapidité des requêtes

Le pipeline d’agrégation est une version actualisée de MapReduce. MongoDB recommande d’utiliser le pipeline d’agrégation plutôt que MapReduce, car le premier est plus efficace.

Nous avons essayé de vérifier cette affirmation en exécutant les requêtes de la section précédente. Lorsqu’elles ont été exécutées côte à côte sur une machine dotée de 12 Go de RAM, le pipeline d’agrégation s’est avéré plus rapide, avec une moyenne de 0,014 seconde pendant l’exécution. La même machine a mis en moyenne 0,058 seconde pour exécuter la requête MapReduce.

Voir aussi :  Comment remplacer les modèles par défaut dans django-allauth

Ce n’est pas un critère pour conclure sur leurs performances, mais cela semble confirmer la recommandation de MongoDB. Vous pouvez considérer cette différence de temps comme insignifiante, mais elle s’accumulera considérablement sur des milliers ou des millions de requêtes.

Le pour et le contre de MapReduce

Examinez les avantages et les inconvénients de MapReduce pour déterminer où il excelle dans le traitement des données.

Le pour

  • Il offre une plus grande souplesse de personnalisation puisque vous écrivez les fonctions map et reduce séparément.
  • Vous pouvez facilement enregistrer la sortie dans une nouvelle collection MongoDB à l’intérieur de la base de données.
  • Vous pouvez utiliser MapReduce dans des systèmes de fichiers distribués tels que Hadoop, qui s’intègre facilement à MongoDB.
  • Sa prise en charge des scripts tiers le rend plus évolutif et plus facile à apprendre que le pipeline d’agrégation. Ainsi, une personne ayant une formation en développement JavaScript peut mettre en œuvre MapReduce.

Contre

  • Il nécessite l’utilisation de scripts tiers, ce qui contribue à réduire ses performances par rapport au pipeline d’agrégation.
  • MapReduce peut être inefficace en termes de mémoire, nécessitant plusieurs nœuds, en particulier lorsqu’il s’agit de données trop complexes.
  • Il n’est pas adapté au traitement de données en temps réel, car les requêtes peuvent être lentes.

Avantages et inconvénients du pipeline d’agrégation

Qu’en est-il du pipeline d’agrégation ? L’examen de ses forces et de ses faiblesses permet d’en savoir plus.

Le pour

  • La requête est en plusieurs étapes, généralement plus courte, plus concise et plus lisible.
  • Le pipeline d’agrégation est plus efficace, offrant une amélioration significative par rapport à MapReduce.
  • Il prend en charge les opérateurs MongoDB intégrés qui vous permettent de concevoir votre requête de manière flexible.
  • Il prend en charge le traitement des données en temps réel.
  • Le pipeline d’agrégation est facilement intégrable dans MongoDB et ne nécessite pas de script tiers.
  • Vous pouvez créer une nouvelle collection MongoDB pour les sorties si vous avez besoin de les sauvegarder.

Cons

  • Il peut ne pas être aussi flexible que MapReduce lorsqu’il s’agit de traiter des structures de données plus complexes. Comme il n’utilise pas de script tiers, il vous limite à une méthode spécifique d’agrégation des données.
  • Sa mise en œuvre et sa courbe d’apprentissage peuvent représenter un défi pour les développeurs ayant peu ou pas d’expérience avec MongoDB.
Voir aussi :  Comment hacher et vérifier un mot de passe en Node.js avec bcrypt ?

Quand utiliser MapReduce ou Aggregation Pipeline ?

D’une manière générale, il est préférable de tenir compte de vos besoins en matière de traitement des données pour choisir entre MapReduce et le pipeline d’agrégation.

Idéalement, si vos données sont plus complexes et nécessitent une logique et des algorithmes avancés dans un système de fichiers distribué, MapReduce peut s’avérer utile. En effet, vous pouvez facilement personnaliser les fonctions MapReduce et les injecter dans plusieurs nœuds. Optez pour MapReduce si votre tâche de traitement des données nécessite une évolutivité horizontale plutôt qu’une efficacité.

En revanche, le pipeline d’agrégation est plus adapté au traitement de données complexes ne nécessitant pas de logique ou d’algorithmes personnalisés. Si vos données résident uniquement dans MongoDB, il est judicieux d’utiliser le pipeline d’agrégation car il comporte de nombreux opérateurs intégrés.

Le pipeline d’agrégation est également idéal pour le traitement des données en temps réel. Si vos besoins de calcul privilégient l’efficacité par rapport à d’autres facteurs, vous devriez opter pour le pipeline d’agrégation.

Exécuter des calculs complexes dans MongoDB

Bien que les deux méthodes MongoDB soient des requêtes de traitement de big data, elles présentent de nombreuses différences. Au lieu de récupérer les données avant d’effectuer les calculs, ce qui peut être plus lent, les deux méthodes effectuent directement des calculs sur les données stockées dans la base de données, ce qui rend les requêtes plus efficaces.

Cependant, l’un d’entre eux l’emporte sur l’autre en termes de performances, et vous avez deviné juste. Le pipeline d’agrégation l’emporte sur MapReduce en termes d’efficacité et de performances. Bien que vous souhaitiez à tout prix remplacer MapReduce par le pipeline d’agrégation, il existe encore des domaines d’application spécifiques où l’utilisation de MapReduce est plus judicieuse.

Cliquez pour évaluer cet article !
[Total: Moyenne : ]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *