260 lines
6.9 KiB
Markdown
260 lines
6.9 KiB
Markdown
<!-- $theme: default -->
|
||
|
||
<style>pre, table { font-size: 0.6em !important; }</style>
|
||
|
||
# Introduction au "Big Data"
|
||
|
||
William Petit - S.C.O.P. Cadoles
|
||
|
||
---
|
||
<!-- page_number: true -->
|
||
|
||
---
|
||
|
||
## 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 et définitions
|
||
|
||
---
|
||
|
||
### Historique
|
||
|
||
- 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
|
||
|
||
---
|
||
|
||
### 3 caractéristiques de la problématique
|
||
|
||
---
|
||
|
||
### Volume
|
||
|
||
<p style="text-align:center">
|
||
<img style="width:80%" src="img/The-total-amount-of-data-generated-on-earth-exceeded-one-zettabyte-in-2010It-is.png">
|
||
</p>
|
||
|
||
[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:
|
||
|
||
`<William>` `<kind_of>` `<Person>`
|
||
`<William>` `<work_for>` `<Cadoles>`
|
||
`<Cadoles>` `<kind_of>` `Entreprise>`
|
||
etc...
|
||
|
||
---
|
||
|
||
#### Exemple avec le projet Cayley
|
||
|
||
---
|
||
|
||
#### Exercice
|
||
|
||
Soit Jean, Silvia, Camille, Charlie et Nicolas cinq membres d'un même réseau social.
|
||
|
||
- Jean est ami avec Silvia.
|
||
- Silvia est amie avec Jean.
|
||
- Camille est ami avec Charlie.
|
||
- Charlie est amie avec Jean.
|
||
- Nicolas est ami avec Camille.
|
||
- Nicolas est ami avec Silvia.
|
||
|
||
Les relations sont évidemment bidirectionnelles.
|
||
|
||
Chaque personne a également les attributs suivants:
|
||
|
||
- Un age
|
||
- Un plat préféré
|
||
|
||
---
|
||
|
||
##### Consignes
|
||
|
||
1. Représenter sous forme de triplets ces 4 entités et leurs relations d'amitiés respectives.
|
||
|
||
2. Écrire la requête (Gizmo) permettant de récupérer la liste des plats préférés d'une personne.
|
||
|
||
3. Écrire la requête (Gizmo) permettant de récupérer la liste des "amis d'amis" d'une personne.
|
||
|
||
4. Écrire la requête (Gizmo) permettant de récupérer la liste plats préférés partagés avec des "amis d'amis".
|
||
|
||
[Documentation de l'API Gizmo](http://localhost:64210/docs/GizmoAPI)
|
||
|
||
---
|
||
|
||
## Exploitation des données et cadre légal
|
||
|
||
---
|
||
|
||
### Qu'est ce qu'une données à caractère personnel ?
|
||
|
||
> Toute information identifiant **directement ou indirectement** une personne physique (ex. nom, no d’immatriculation, no de téléphone, photographie, date de naissance, commune de résidence, empreinte digitale...).
|
||
>
|
||
> -- CNIL
|
||
|
||
[Source](https://www.cnil.fr/fr/definition/donnee-personnelle)
|
||
|
||
---
|
||
|
||
### Le RGPD
|
||
|
||
[Voir la page de la CNIL](https://www.cnil.fr/fr/reglement-europeen-sur-la-protection-des-donnees-ce-qui-change-pour-les-professionnels)
|