MongoDB: réplication et distribution avec des données ne tenant pas sur un seul noeud

Objectif

L'objectif de ce TP est de mettre en place la réplication et la distribution des données avec MongoDB pour traiter un volume de données dépassant la capaité d'une machine. Pour ce TP 3 machines supplémentaires vous seront allouées (soit 7 machines en tout). En vous appuyant sur le TP précédent, on mettra en place une configuration intégrant réplication et répartition des données.

Travail à réaliser

Le jeu de données consiste en une extraction de données astronomiques issues des prises de vue d'un télescope de grande envergure. Les données sont disponibles sous forme de fichiers CSV sur la machine MongoData dont l'ip vous aura été envoyée par mail. Une description succinte des fichiers CSV est disponible sous la forme un schéma relationnel exprimé en SQL. Ces descriptions sont également disponibles sur la machine MongoData. Le chargement des données pourra s'appuyer sur l'utilitaire mongoimport qui permet un chargement via des fichiers CSV. On essaiera au maximum de faire que les données dans mongo soient au format qui leur corresponde (e.g. un int et non un string si la donnée est numérique). Si un document (un tuple) possède un champ NULL, ce champ devra être supprimé du document mongo.

On configurera le stockage en mongo pour répondre efficacement aux requêtes suivantes (données ici en SQL, à traduire en script Mongo, cheat sheet):

  • SELECT * FROM SOURCE WHERE sourceid=29710725217517768
  • SELECT sourceid, ra, decl FROM SOURCE WHERE objectid=430209694171136
  • SELECT sourceid,objectid FROM SOURCE 
    WHERE ra BETWEEN 358.05 AND 358.09 AND decl BETWEEN 3.039 AND 3.067
  • SELECT objectid, COUNT(object(id)) FROM SOURCE GROUP BY objectid
  • SELECT objectid, avg(flux_Gaussian), avg(sourceWidth_SG) 
    FROM SOURCE 
    WHERE ra BETWEEN 358.05 AND 358.09 GROUP BY objectid
  • SELECT * 
    FROM SOURCE JOIN object ON (SOURCE.objectid = object.objectid) 
    WHERE ra BETWEEN 358.05 AND 358.09

Rendu

On rendra un rapport au format pdf sur spiral pour le 08/02/2014, qui comprendra:

  • Une description technique de la mise en place du cluster mongo et de la procédure de chargement des données.
  • Un argumentaire sur le choix de l'architecture du cluster mongo, ansi que sur les choix de stockage (e.g. quels index ?).
  • Une évaluation des performances, y compris concernant le chargement et, le cas échéant, comparant plusieurs manières d'exécuter les requêtes.