# Introduction au "Big Data" William Petit - S.C.O.P. Cadoles --- --- ## Vocabulaire --- ### Qu'est ce qu'une "donnée" ? > Une donnée est une description élémentaire d’une réalité. C’est par exemple une observation ou une mesure. [...] > > Elle est dépourvue de tout raisonnement, supposition, constatation, probabilité. > > -- [Wikipédia](https://fr.wikipedia.org/wiki/Donn%C3%A9e) **Exemples** - Température = 25°C - Total de personnes dans la salle = 10 --- ### Qu'est ce qu'une "information" ? > Une information est une interprétation contextualisée d'une donnée ou d'un ensemble de données. Elle est porteuse de "sens". **Exemple** - Température = 25°C -> Il fait chaud - Total de personnes dans la salle = 10 -> C'est un petit groupe --- ## Contexte --- ### Historique et définition - Première mention du terme en 1997 - Issue des réflexions liées à l'explosion de la génération et l'usage des données - Une définition aux contours flous: > [...] ensemble de données devenus si volumineux qu'ils dépassent l'intuition et les capacités humaines d'analyse et même celles des outils informatiques classiques de gestion de base de données ou de l'information -- _Wikipédia_ > Extremely large data sets that may be analysed computationally to reveal patterns, trends, and associations, especially relating to human behaviour and interactions. -- _Oxford Dictionnary_ --- ### 3 caractéristiques de la problématique --- ### Volume
[Zaslavsky, Arkady & Perera, Charith & Georgakopoulos, Dimitrios. (2012). Sensing as a Service and Big Data. CoRR, abs/1301.0159.](https://www.researchgate.net/publication/234017925_Sensing_as_a_Service_and_Big_Data) --- ### Vitesse La fréquence de génération de données ne cesse d'augmenter. Être en capacité de traiter ce flux constant de données en temps réel est un défi. > **Exemple** > > Sur Twitter, environ 500 millions de messages sont envoyés par jour sur la plateforme. C'est environ **6000 messages/seconde.** [Source](http://www.internetlivestats.com/twitter-statistics/) > > Sur Snapchat, sur le 3eme trimestre de 2017, les utilisateurs s'envoyaient jusqu'à **3.5 milliards de 'snap' par jour**. [Source](https://www.statista.com/statistics/257128/number-of-photo-messages-sent-by-snapchat-users-every-day/) --- ### Variété L'avancée de la technologie aidant, les types des données généréess aujourd'hui sont multiples: texte, image, vidéo, son mais aussi modèle 3D, transactions de cryptomonnaies... Toutes ces données prennent des formes extrêmement diverses. --- ## Aperçu technique des solutions --- ### Stockage des données --- ### Présentation d'Apache Hadoop et HDFS --- ### Traitement des données --- #### Le modèle "MapReduce" - Inventé par Google - Inspiré des méthodes `map()` et `reduce()` que l'on retrouve classiquement dans les langages dits "fonctionnels". - Modèle qui permet de paralléliser massivement le traitement de données. - Très adapté aux opérations de filtrage/aggrégation. --- **Découpage du traitement** ![center](./img/Mapreduce.png) [Source](https://fr.wikipedia.org/wiki/MapReduce#/media/File:Mapreduce.png) --- ## Bases de données "NoSQL" --- ### Base de donnée orientée clé/valeur Mode de stockage représentant le corpus de données sous la forme d'un ou plusieurs tableaux associatifs. Chaque clé (unique au sein d'une même collection) est associée à une valeur, qui peut être de différents types suivant le moteur utilisé. - **Usage** Stockage temporaire (cache), index, séries chronologiques, base de données embarquées... - **Exemples** [LevelDB](http://leveldb.org/), [Redis](https://redis.io/), [Memcached](https://www.memcached.org/) --- **Exercice** Implémenter avec le langage de votre choix une "micro" base de données embarquée orientée clé/valeur. Les données devront être persistentes. Votre implémentation devra permettre les opérations suivantes: - Sauvegarder une valeur associée à une clé - Récupérer une valeur associée à une clé - Itérer sur les clés existantes dans la base de données --- **Exemple d'API** ```js cont bbd = new BDD("./my/file.db"); // Récupérer une clé dans la base de données var val = bdd.get("my-key1"); // Enregistrer une valeur dans la base de données bdd.set("my-key2", "foobar"); // Itérer sur le clés de la base de données bdd.forEachKeys(function(key) { console.log(key); }); ``` --- ### Base de données orientée document Mode de stockage représentant les données sous la forme de collections de "documents". Un document est un objet comportant des attributs valués. Un attribut peut lui même être un objet. - **Usage** Stockage de données structurées (XML, JSON) avec ou sans schémas. - **Exemples** [MongoDB](https://www.mongodb.com/), [Elasticsearch](https://www.elastic.co/) --- ### Base de données orientée colonne Mode de stockage organisant les données sous forme de colonnes plutot que par rang comme les bases de données SQL classiques. - **Usage** Stockage de données dédiées à l'analyse statistiques et aux opérations d'aggrégation/filtrage par colonne. - **Exemples** [Apache HBase](https://github.com/apache/hbase) --- ### Base de données orientée graphe --- #### Le concept de "triplet" Un triplet est une structure de données pouvant être représenté sous la forme `(sujet, prédicat, objet)`. Un corpus de triplets permet de représenter un graphe orienté. Exemple: `