CESI: Intro Big Data - ajout tuile + exercice BDD orientée graphe
This commit is contained in:
parent
a29c349d75
commit
8f84189ed5
|
@ -117,10 +117,60 @@ William Petit - S.C.O.P. Cadoles
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
#### 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
|
#### 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
|
## Exploitation des données et cadre légal
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,7 @@
|
||||||
|
version: '2.2'
|
||||||
|
services:
|
||||||
|
cayley:
|
||||||
|
image: quay.io/cayleygraph/cayley
|
||||||
|
ports:
|
||||||
|
- 64210:64210
|
||||||
|
command: [ "--verbose", "10", "-l", "10" ]
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Gizmo
|
||||||
|
|
||||||
|
## Trouver les plats préférés de chaque personne
|
||||||
|
|
||||||
|
```js
|
||||||
|
g.V().Has("<has_favorite_dish>").Tag("source").Out("<has_favorite_dish>").Tag("target").All()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Afficher l'ensemble des relations du réseau social
|
||||||
|
|
||||||
|
```js
|
||||||
|
g.V().Has("<friend_of>").Tag("source").Out("<friend_of>").Tag("target").All()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Trouver les amis des amis de Jean
|
||||||
|
|
||||||
|
```js
|
||||||
|
g.V("<jean>").Tag("source").Out("<friend_of>").ForEach(function(directFriend) {
|
||||||
|
|
||||||
|
g.Emit({ id: directFriend.id, source: "<jean>", target: directFriend.id });
|
||||||
|
|
||||||
|
g.V(directFriend.id).Out("<friend_of>").ForEach(function(friendOfFriend) {
|
||||||
|
g.Emit({id: friendOfFriend.id, source: directFriend.id, target: friendOfFriend.id });
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Trouver les amis des amis de Jean qui aiment un plat commun
|
||||||
|
|
||||||
|
```js
|
||||||
|
var jean = g.V("<jean>");
|
||||||
|
var jeanFavoriteDishes = jean.Out("<has_favorite_dish>");
|
||||||
|
|
||||||
|
jean.Out("<friend_of>").ForEach(function(directFriend) {
|
||||||
|
g.V(directFriend.id).Out("<friend_of>").ForEach(function(friendOfFriend) {
|
||||||
|
jeanFavoriteDishes.Intersect(g.V(friendOfFriend.id).Out("<has_favorite_dish>")).ForEach(function(favoriteDish) {
|
||||||
|
g.Emit({ id: directFriend.id, source: "<jean>", target: directFriend.id });
|
||||||
|
g.Emit({ id: friendOfFriend.id, source: directFriend.id, target: friendOfFriend.id });
|
||||||
|
g.Emit({ id: favoriteDish.id, source: friendOfFriend.id, target: favoriteDish.id });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
|
@ -0,0 +1,21 @@
|
||||||
|
<jean> <friend_of> <silvia> .
|
||||||
|
<silvia> <friend_of> <jean> .
|
||||||
|
<camille> <friend_of> <charlie> .
|
||||||
|
<charlie> <friend_of> <camille> .
|
||||||
|
<camille> <friend_of> <charlie> .
|
||||||
|
<charlie> <friend_of> <jean> .
|
||||||
|
<jean> <friend_of> <charlie> .
|
||||||
|
<nicolas> <friend_of> <camille> .
|
||||||
|
<camille> <friend_of> <nicolas> .
|
||||||
|
<nicolas> <friend_of> <silvia> .
|
||||||
|
<silvia> <friend_of> <nicolas> .
|
||||||
|
|
||||||
|
<jean> <has_age> 25 .
|
||||||
|
<camille> <has_age> 30 .
|
||||||
|
<silvia> <has_age> 26 .
|
||||||
|
<charlie> <has_age> 32 .
|
||||||
|
|
||||||
|
<jean> <has_favorite_dish> "Boeuf bourguignon" .
|
||||||
|
<camille> <has_favorite_dish> "Boeuf bourguignon" .
|
||||||
|
<silvia> <has_favorite_dish> "Gateau au chocolat" .
|
||||||
|
<charlie> <has_favorite_dish> "Crepe" .
|
Loading…
Reference in New Issue