CESI: Intro Big Data - ajout tuile + exercice BDD orientée graphe

This commit is contained in:
wpetit 2018-09-05 07:30:09 +02:00
parent a29c349d75
commit 8f84189ed5
5 changed files with 122 additions and 0 deletions

View File

@ -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
---
#### 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
---

View File

@ -0,0 +1,7 @@
version: '2.2'
services:
cayley:
image: quay.io/cayleygraph/cayley
ports:
- 64210:64210
command: [ "--verbose", "10", "-l", "10" ]

View File

@ -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 });
});
});
});
```

View File

@ -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" .