Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| eadl:bloc5:fm3:td3 [2026/11/01 10:51] – jcheron | eadl:bloc5:fm3:td3 [2026/11/05 00:45] (Version actuelle) – [Schémas des trois flux] jcheron | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Projet - Concevoir un pipeline Hadoop résilient et dimensionné ====== | ====== Projet - Concevoir un pipeline Hadoop résilient et dimensionné ====== | ||
| + | <WRAP info round> | ||
| * **Module :** Big Data et traitement massif | * **Module :** Big Data et traitement massif | ||
| * **Durée :** 6 heures | * **Durée :** 6 heures | ||
| * **Organisation :** équipes de 2 personnes | * **Organisation :** équipes de 2 personnes | ||
| - | * **Environnement :** Hadoop sur Docker Compose (cluster fourni, identique à celui du TD2) | + | |
| + | | ||
| * **Technologies autorisées :** HDFS, YARN, MapReduce Streaming et/ou Hive | * **Technologies autorisées :** HDFS, YARN, MapReduce Streaming et/ou Hive | ||
| * **Technologie exclue pour ce projet :** Spark, traité dans l' | * **Technologie exclue pour ce projet :** Spark, traité dans l' | ||
| * **AWS :** interdit pour ce projet (aucun risque de facturation) | * **AWS :** interdit pour ce projet (aucun risque de facturation) | ||
| + | </ | ||
| ===== 1. Contexte : le lendemain de la grande promotion ===== | ===== 1. Contexte : le lendemain de la grande promotion ===== | ||
| - | Vous rejoignez l’équipe data de **MarchéPlus**, | + | Vous rejoignez l'équipe data de **MarchéPlus**, |
| - | Aujourd’hui, les données sont traitées par un script exécuté sur une machine unique. Le rapport est parfois en retard, les relances produisent des résultats incohérents et personne ne sait combien de temps les données doivent rester disponibles. | + | Aujourd'hui, les données sont traitées par un script exécuté sur une machine unique. Le rapport est parfois en retard, les relances produisent des résultats incohérents et personne ne sait combien de temps les données doivent rester disponibles. |
| - | Votre équipe doit proposer et démontrer une solution Hadoop pour ce traitement. Il ne s’agit pas seulement de faire fonctionner un job : vous devez **faire des choix d’architecture, | + | Votre équipe doit proposer et démontrer une solution Hadoop pour ce traitement. Il ne s'agit pas seulement de faire fonctionner un job : vous devez **faire des choix d'architecture, |
| ==== Besoin métier ==== | ==== Besoin métier ==== | ||
| - | Chaque nuit, trois flux sont déposés : | + | Chaque nuit, **trois flux distincts** |
| - | * les commandes ; | + | |
| - | * les consultations de produits ; | + | |
| - | * les annulations et retours. | + | |
| Le traitement doit produire, pour chaque journée : | Le traitement doit produire, pour chaque journée : | ||
| - | * le chiffre d’affaires net par catégorie ; | + | * le chiffre d'affaires net par catégorie |
| * le nombre de commandes par catégorie ; | * le nombre de commandes par catégorie ; | ||
| * les cinq produits les plus consultés par catégorie ; | * les cinq produits les plus consultés par catégorie ; | ||
| Ligne 34: | Ligne 35: | ||
| Les équipes métier veulent consulter les résultats **avant 6 h**. Une journée de données peut être corrigée ou complétée le lendemain : le pipeline doit donc permettre une reprise ou un recalcul sans publier silencieusement un résultat incohérent. | Les équipes métier veulent consulter les résultats **avant 6 h**. Une journée de données peut être corrigée ou complétée le lendemain : le pipeline doit donc permettre une reprise ou un recalcul sans publier silencieusement un résultat incohérent. | ||
| - | ==== Contraintes communiquées par l’entreprise ==== | + | ==== Contraintes communiquées par l'entreprise ==== |
| - | * En moyenne, **120 Go de données compressées** arrivent chaque nuit. | + | * En moyenne, **120 Go de données compressées** arrivent chaque nuit, tous flux confondus. |
| * Pendant les promotions, le volume peut atteindre **1,5 fois le volume moyen**. | * Pendant les promotions, le volume peut atteindre **1,5 fois le volume moyen**. | ||
| * Les fichiers arrivent entre minuit et 3 h ; le traitement doit se terminer avant 5 h 30, afin de laisser une marge avant la publication. | * Les fichiers arrivent entre minuit et 3 h ; le traitement doit se terminer avant 5 h 30, afin de laisser une marge avant la publication. | ||
| + | * Les trois flux n' | ||
| * Les données brutes doivent être conservées **90 jours**. | * Les données brutes doivent être conservées **90 jours**. | ||
| * Les données intermédiaires de calcul ne sont nécessaires que pendant le traitement et les reprises. | * Les données intermédiaires de calcul ne sont nécessaires que pendant le traitement et les reprises. | ||
| * Les résultats agrégés doivent rester disponibles pendant **deux ans**. | * Les résultats agrégés doivent rester disponibles pendant **deux ans**. | ||
| * Les identifiants clients ne doivent pas apparaître dans les rapports métier. | * Les identifiants clients ne doivent pas apparaître dans les rapports métier. | ||
| - | * L’équipe dispose d’un budget limité et ne veut pas laisser un cluster actif en permanence | + | * L'équipe dispose d'un budget limité et ne veut pas laisser un cluster actif en permanence. |
| - | * Une interruption d’un nœud ne doit pas entraîner automatiquement la perte définitive des données ou du résultat. | + | * Une interruption d'un nœud ne doit pas entraîner automatiquement la perte définitive des données ou du résultat. |
| <WRAP question round> | <WRAP question round> | ||
| - | **À vous d’identifier les ambiguïtés.** | + | **À vous d'identifier les ambiguïtés.** |
| - | Le cahier des charges ne précise pas, par exemple, si les fichiers tardifs modifient les rapports déjà publiés ni quelle règle métier appliquer à une commande annulée après la clôture de la journée. Formulez des hypothèses explicites plutôt que d’ignorer ces questions. | + | Le cahier des charges ne précise pas, par exemple, si les fichiers tardifs modifient les rapports déjà publiés, ni quelle règle métier appliquer à une commande annulée après la clôture de la journée, ni ce qu'il faut faire si le flux d' |
| </ | </ | ||
| - | ===== 2. Données | + | ===== 2. Données |
| - | ==== Environnement fourni | + | Un jeu de données réduit est fourni, **volontairement bien plus petit que les volumes réels**. Il se compose de trois fichiers CSV (avec en-tête), plus un lot correctif, dans le dossier '' |
| + | ==== Schémas des trois flux ==== | ||
| - | | + | **Flux 1 : '' |
| - | * un dossier hôte '' | + | |
| - | * un jeu de données réduit | + | |
| - | | + | |
| - | ==== Format des données ==== | + | <sxh text; |
| + | commande_id, | ||
| + | </ | ||
| - | Un seul format de fichier CSV pour les trois flux : | + | **Flux 2 : '' |
| - | <sxh text> | + | <sxh text; |
| - | date_evenement, | + | session_id, |
| </ | </ | ||
| - | ^ Colonne ^ Description ^ | + | **Flux 3 : '' |
| - | | date_evenement | Jour métier auquel l'événement est rattaché | + | |
| - | | commande_id | + | <sxh text; |
| - | | client_id | Identifiant client (donnée à ne pas exposer dans les rapports) | | + | annulation_id, |
| - | | produit_id | + | </ |
| - | | type_evenement | '' | + | |
| - | | montant | Montant en euros (vide attendu pour '' | + | **Lot correctif : '' |
| - | | horodatage | Date et heure réelles d' | + | |
| + | <sxh text; | ||
| + | commande_id, | ||
| + | </ | ||
| + | |||
| + | Les dix premières colonnes reprennent le schéma du flux 1 : le lot correctif ne porte que sur les commandes. | ||
| + | |||
| + | Remarques sur les schémas : | ||
| - | Un événement est dit **tardif** lorsque son '' | + | |
| + | * le flux 3 **ne contient pas la catégorie** : il faut la retrouver en rattachant l' | ||
| + | * le flux 2 n'a **aucun lien avec les commandes** : il alimente uniquement le top 5 ; | ||
| + | * '' | ||
| - | Le jeu contient | + | ==== Qualité |
| - | * lignes dupliquées ; | + | Comme ceux que livrent les systèmes sources réels, ce jeu de données n'est pas propre. Explorez-le avant de coder : c' |
| - | * champs vides (certains attendus, d'autres anormaux | + | |
| - | * montants invalides (négatifs, non numériques, | + | |
| - | * événements tardifs ; | + | |
| - | * lignes | + | |
| - | * annulations ou retours associés à une commande, y compris une annulation dont la commande est absente du lot. | + | |
| - | Vous pouvez compléter le jeu ou fabriquer quelques | + | Pour vos tests (fichier corrompu, flux manquant, |
| ==== Règles métier à définir ==== | ==== Règles métier à définir ==== | ||
| Ligne 95: | Ligne 102: | ||
| Avant de coder, décidez et documentez : | Avant de coder, décidez et documentez : | ||
| - | * comment calculer le chiffre d’affaires net ; | + | * comment calculer le chiffre d'affaires net (prix, quantité, devise, annulation partielle ou totale, retour) |
| - | * comment traiter les doublons | + | * quelle clé identifie de manière unique une ligne de commande, et comment traiter les doublons ; |
| * que faire des lignes invalides ou incomplètes ; | * que faire des lignes invalides ou incomplètes ; | ||
| + | * que faire d'une annulation orpheline ; | ||
| + | * à quelle journée rattacher une annulation (celle de la commande ou celle de l' | ||
| * comment classer les événements tardifs ; | * comment classer les événements tardifs ; | ||
| + | * que faire si un flux est absent ou incomplet au moment du traitement ; | ||
| * comment départager les produits à égalité dans le top 5 ; | * comment départager les produits à égalité dans le top 5 ; | ||
| * quelles données peuvent apparaître dans les sorties. | * quelles données peuvent apparaître dans les sorties. | ||
| - | Il n’y a pas nécessairement une seule réponse possible. En revanche, une règle non documentée ne pourra pas être considérée comme un choix maîtrisé. | + | Il n'y a pas nécessairement une seule réponse possible. En revanche, une règle non documentée ne pourra pas être considérée comme un choix maîtrisé. |
| ===== 3. Votre mission ===== | ===== 3. Votre mission ===== | ||
| - | Concevez une solution Hadoop qui répond au besoin de MarchéPlus, | + | Concevez une solution Hadoop qui répond au besoin de MarchéPlus, |
| - | Le travail est organisé en **paliers**. Le palier 1 est obligatoire ; les paliers 2 et 3 sont à traiter dans l' | + | ==== Paliers de réalisation ==== |
| - | ==== Palier | + | Les paliers sont cumulatifs. **Le palier |
| - | === A. Architecture | + | ^ Palier ^ Contenu ^ Statut ^ |
| + | | 1 | Nettoyage des flux, **jointure commandes/ | ||
| + | | 2 | Nombre de commandes par catégorie, mécanisme de publication fiable, test d' | ||
| + | | 3 | Top 5 des produits consultés par catégorie, traitement du lot correctif, tests de montée en charge | Extension | | ||
| - | Définissez le chemin des données depuis leur arrivée jusqu’à la publication des résultats. Précisez notamment : | + | ==== A. Architecture et parcours des données ==== |
| + | |||
| + | Définissez le chemin des données depuis leur arrivée jusqu'à la publication des résultats. | ||
| + | |||
| + | Précisez notamment : | ||
| * où se trouvent les données brutes ; | * où se trouvent les données brutes ; | ||
| * quelles données sont stockées dans HDFS et pendant combien de temps ; | * quelles données sont stockées dans HDFS et pendant combien de temps ; | ||
| - | * où se trouvent les résultats qui doivent survivre à la suppression du cluster | + | * où se trouvent les résultats qui doivent survivre à la suppression du cluster ; |
| - | * quels composants interviennent dans le traitement | + | * quels composants interviennent dans le traitement ; |
| * à quel moment un résultat peut être considéré comme publiable. | * à quel moment un résultat peut être considéré comme publiable. | ||
| - | === B. Traitement | + | ==== B. Stockage |
| - | Implémentez au minimum | + | Estimez le volume à stocker **dans l' |
| - | * une agrégation | + | * du volume moyen et du volume de pointe |
| - | * un traitement des lignes invalides, avec une sortie séparée permettant | + | * du **taux |
| - | * une vérification | + | * de la durée de conservation retenue pour les données de travail |
| + | * du facteur de réplication HDFS ; | ||
| + | * de la marge de capacité que vous souhaitez garder. | ||
| - | Le traitement peut utiliser | + | Expliquez pourquoi |
| - | **N’utilisez pas Spark pour cette séance.** | + | ==== C. Traitement et qualité des données ==== |
| - | ==== Palier 2 : résilience, | + | Implémentez au minimum (palier 1) : |
| - | === C. Relance | + | * le nettoyage |
| + | * **la jointure entre les lignes de commande et les annulations/ | ||
| + | * une agrégation du chiffre d' | ||
| + | * un traitement | ||
| + | * une vérification de la cohérence d'au moins un résultat (par exemple : brut − annulations | ||
| - | Décrivez | + | Le traitement peut utiliser |
| - | | + | Le nettoyage des données est attendu en **MapReduce Streaming**, sauf justification contraire dans le registre des décisions. |
| - | | + | |
| - | | + | |
| - | | + | |
| - | Proposez un mécanisme qui évite qu’un résultat incomplet ou périmé soit présenté comme le résultat officiel. Pistes possibles | + | **Calcul de contrôle, avant votre premier job.** Copiez les deux extraits ci-dessous dans '' |
| - | **Pour rendre l' | + | <sxh text; |
| + | commande_id, | ||
| + | CMD1073051, | ||
| + | CMD1073061,1, | ||
| + | CMD1073061, | ||
| + | CMD1073089,1,CL007415, | ||
| + | CMD1073089, | ||
| + | CMD1073093, | ||
| + | CMD1073104, | ||
| + | CMD1073104, | ||
| + | CMD1073337, | ||
| + | CMD1073337, | ||
| + | CMD1074687, | ||
| + | CMD1074687, | ||
| + | CMD1074687, | ||
| + | CMD1074687, | ||
| + | CMD1075106, | ||
| + | </ | ||
| - | === D. Persistance indépendante du cluster === | + | <sxh text; |
| + | annulation_id, | ||
| + | ANN0196112, | ||
| + | ANN0196652, | ||
| + | ANN0198204, | ||
| + | ANN0198163, | ||
| + | ANN0198196, | ||
| + | </ | ||
| - | Démontrez que vos résultats validés survivent à la destruction du cluster : copie vers '' | + | **N'utilisez pas Spark pour cette séance.** |
| - | Expliquez pourquoi **une réplication HDFS ne suffit pas à assurer la persistance des données après la destruction du cluster**. | + | ==== D. Relance et publication des résultats ==== |
| - | ==== Palier 3 : dimensionnement et extensions ==== | + | **Persistance hors cluster.** Le dossier '' |
| - | === E. Stockage et capacité (scénario réel) === | + | Décrivez ce qui se passe si : |
| - | Estimez | + | * le job échoue |
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| - | * du volume moyen et du volume | + | Proposez un mécanisme qui évite qu'un résultat incomplet ou périmé soit présenté comme le résultat officiel (par exemple : sorties temporaires |
| - | * du **taux de décompression** que vous supposez (les 120 Go sont compressés : le volume décompressé est bien plus grand, précisez votre hypothèse) ; | + | |
| - | * de la durée de conservation retenue pour les données de travail ; | + | **Test d' |
| - | * du facteur de réplication HDFS ; | + | |
| - | * de la marge de capacité que vous souhaitez garder. | + | ==== E. Dimensionnement et montée en charge ==== |
| - | === F. Dimensionnement et montée en charge === | + | Proposez une configuration cible pour le scénario réel, même si vous ne pouvez tester que sur un petit cluster. |
| - | Proposez une configuration cible pour le scénario réel, même si vous ne pouvez tester que sur un petit cluster. | + | Distinguez les rôles des nœuds et expliquez : |
| * dans quel cas vous ajouteriez des nœuds de calcul ; | * dans quel cas vous ajouteriez des nœuds de calcul ; | ||
| Ligne 175: | Ligne 223: | ||
| * pourquoi ces deux décisions ne sont pas équivalentes ; | * pourquoi ces deux décisions ne sont pas équivalentes ; | ||
| * quels indicateurs vous surveilleriez pour vérifier que le dimensionnement convient ; | * quels indicateurs vous surveilleriez pour vérifier que le dimensionnement convient ; | ||
| - | * quelles limites pourraient apparaître lorsque le volume augmente. | + | * quelles limites pourraient apparaître lorsque le volume augmente |
| - | Faites apparaître au moins un calcul de capacité | + | Faites apparaître |
| - | === G. Extensions | + | Pour tester la montée en charge |
| - | + | ||
| - | * top 5 des produits | + | |
| - | * nombre de commandes par catégorie ; | + | |
| - | * liste d' | + | |
| - | * pseudonymisation | + | |
| ===== 4. Contraintes de réalisation ===== | ===== 4. Contraintes de réalisation ===== | ||
| - | * Travaillez avec l’environnement local fourni. | + | * Travaillez avec l'environnement local fourni |
| - | * **N’utilisez pas AWS** pour ce projet. | + | * **N'utilisez pas AWS** pour ce projet. |
| * Le cluster de démonstration ne doit pas être présenté comme équivalent à une infrastructure de production. | * Le cluster de démonstration ne doit pas être présenté comme équivalent à une infrastructure de production. | ||
| - | * Ne vous contentez pas d’un schéma théorique : votre pipeline doit produire un résultat vérifiable sur le jeu de données réduit. | + | * Ne vous contentez pas d'un schéma théorique : votre pipeline doit produire un résultat vérifiable sur le jeu de données réduit. |
| - | * Vous pouvez vous répartir le travail, mais chaque membre de l’équipe doit être capable d’expliquer l’architecture et les limites de la solution | + | * Vous pouvez vous répartir le travail, mais chaque membre de l'équipe doit être capable d'expliquer l'architecture, la jointure |
| + | |||
| + | ===== 5. Usage de l'IA générative ===== | ||
| + | |||
| + | <WRAP important round> | ||
| + | **Première phase sans IA.** L' | ||
| + | |||
| + | Pourquoi : c'est la partie du projet où l'on apprend le plus, et celle qu'une IA ferait le plus volontiers | ||
| + | </ | ||
| + | |||
| + | Après cette phase, | ||
| + | |||
| + | * **vous restez responsables** de tout ce que vous livrez : un script produit par une IA que vous ne savez pas expliquer sera considéré comme non maîtrisé ; | ||
| + | * **les choix d' | ||
| + | * **vérifiez systématiquement** ce qu' | ||
| + | * ne transmettez pas de données sensibles ; | ||
| + | * **tracez votre usage** : une demi-page indiquant pour quelles tâches vous avez utilisé l'IA, ce que vous avez corrigé ou rejeté, et une erreur ou imprécision que vous avez relevée dans ses réponses. | ||
| - | ===== 5. Déroulé indicatif de la séance | + | ===== 6. Étapes conseillées |
| - | ^ Durée indicative ^ Travail attendu ^ | + | - **Sans IA :** lire le cas, explorer les données, relever les ambiguïtés et formuler les hypothèses. |
| - | | 30 min | Lire le cas, relever les ambiguïtés et formuler les hypothèses | + | - **Sans IA :** dessiner |
| - | | 30 min | Dessiner | + | - **Sans IA :** calculer dans un tableur le résultat attendu sur l' |
| - | | 1 h 45 | Palier 1 : mise en œuvre | + | - Point avec l' |
| - | | 1 h 15 | Palier | + | - Mettre |
| - | | 45 min | Palier 3 : estimation de capacité, scaling, limites | + | - Tester les erreurs, la relance |
| - | | 1 h 15 | Rédaction finale du dossier, puis restitution | + | - Estimer la capacité, |
| + | - Finaliser le dossier | ||
| + | - Présentation et questions individuelles. | ||
| - | Vous pouvez organiser votre travail autrement, mais réservez du temps pour les tests et la restitution. Les paliers 2 et 3 peuvent être menés en parallèle par des sous-groupes différents. | + | Vous pouvez organiser votre travail autrement, mais ne sacrifiez pas les tests et la restitution |
| - | ===== 6. Livrable ===== | + | ===== 7. Livrable ===== |
| Remettez un dossier court comprenant : | Remettez un dossier court comprenant : | ||
| - | - un schéma d’architecture montrant les données, les stockages et les traitements ; | + | - un schéma d'architecture montrant les données, les stockages et les traitements ; |
| - un registre des hypothèses et décisions ; | - un registre des hypothèses et décisions ; | ||
| - les scripts, requêtes ou commandes nécessaires pour reproduire le traitement ; | - les scripts, requêtes ou commandes nécessaires pour reproduire le traitement ; | ||
| - | - une preuve d’exécution : sortie du job, nombre de lignes traitées | + | |
| - | - un test de reprise ou d’échec, accompagné d’une explication du comportement observé | + | |
| - | - la preuve de survie des résultats après recréation du cluster | + | - la description de la jointure et la vérification de sa justesse (par exemple : nombre d' |
| + | - un test de reprise ou d'échec, accompagné d'une explication du comportement observé ; | ||
| - une estimation de capacité et de dimensionnement, | - une estimation de capacité et de dimensionnement, | ||
| - | - une synthèse précisant ce qui devrait changer avant un déploiement réel. | + | - une synthèse précisant ce qui devrait changer avant un déploiement réel ; |
| + | - la note d' | ||
| ==== Registre des hypothèses et décisions ==== | ==== Registre des hypothèses et décisions ==== | ||
| Ligne 223: | Ligne 286: | ||
| ^ Sujet ^ Hypothèse ou choix ^ Justification ^ Conséquence ou limite ^ | ^ Sujet ^ Hypothèse ou choix ^ Justification ^ Conséquence ou limite ^ | ||
| | Fichier tardif | | | | | | Fichier tardif | | | | | ||
| - | | Annulation | + | | Doublons et clé d' |
| - | | Doublons | + | | Annulation |
| - | | Lignes invalides | + | | Rattachement d'une annulation à une journée | | | | |
| + | | Flux manquant ou incomplet | ||
| + | | Choix de la jointure | ||
| | Données conservées dans HDFS | | | | | | Données conservées dans HDFS | | | | | ||
| - | | Données conservées hors cluster | | | | | ||
| | Relance du job | | | | | | Relance du job | | | | | ||
| | Publication du résultat | | | | | | Publication du résultat | | | | | ||
| - | | Taux de décompression | | | | | ||
| | Dimensionnement | | | | | | Dimensionnement | | | | | ||
| Ligne 241: | Ligne 304: | ||
| </ | </ | ||
| - | ===== 7. Critères | + | Chaque membre pourra être interrogé individuellement sur n' |
| + | |||
| + | ===== 8. Critères | ||
| ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^ | ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^ | ||
| - | | Cohérence de l’architecture | Schéma | + | | Cohérence de l'architecture | Schéma |
| - | | Compréhension de Hadoop | Confusion HDFS / YARN / moteur | Rôles correctement distingués | Rôles distingués et illustrés par des observations | + | | Compréhension de Hadoop | Confusion |
| - | | Qualité du traitement | Résultat | + | | Qualité du traitement | Résultats |
| - | | Gestion de la reprise | Reprise seulement décrite | + | | Gestion de la reprise | Relance écrase ou duplique les sorties |
| - | | Dimensionnement | Chiffres sans hypothèses | Calcul | + | | Dimensionnement | Chiffres sans hypothèses | Calculs |
| - | | Prise de recul | Prototype présenté comme production | Limites listées | Limites hiérarchisées, | + | | Prise de recul | Prototype présenté comme production | Limites |
| - | | Défense des choix | Réponses récitées, un seul membre répond | Chacun explique sa partie | Chacun explique l' | + | | Maîtrise et usage de l'IA | Code non expliqué, aucune trace | Usage tracé, sorties vérifiées | Erreurs de l'IA identifiées et corrigées, décisions clairement humaines |
| + | | Défense des choix | Un seul membre répond | Chacun explique sa partie | Chacun explique l' | ||
| <WRAP tip round> | <WRAP tip round> | ||
| - | Une solution qui traite le petit fichier le plus rapidement possible n’est pas nécessairement la meilleure. Vous serez aussi évalués sur votre capacité à distinguer **stockage temporaire et persistant**, | + | Une solution qui traite le petit fichier le plus rapidement possible n'est pas nécessairement la meilleure. Vous serez aussi évalués sur votre capacité à distinguer **stockage temporaire et persistant**, |
| </ | </ | ||