Spideo: Movie Recommendation Analytics with Cassandra (Français)

76
Analytics Spideo Cassandra Day 1 Mouna Damak [email protected] Paul de Monchy [email protected] Randa Zarkik [email protected] / @AFCRanda Mardi 16 juin 2015

Transcript of Spideo: Movie Recommendation Analytics with Cassandra (Français)

Page 1: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Analytics Spideo Cassandra Day

1

Mouna Damak [email protected] Paul de Monchy [email protected] Randa Zarkik [email protected] / @AFCRanda

Mardi 16 juin 2015

Page 2: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 3: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 4: Spideo: Movie Recommendation Analytics with Cassandra (Français)

4

Qu’allez vous regarder ce soir ?

 

75%  d’indécis  devant  leur  TV    

Page 5: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Rendez-moi mon vendeur du vidéoclub !

Page 6: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Service de recommandation “content centric” Toujours expliquer la recommandation pour créer un lien de confiance avec les utilisateurs

Page 7: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Les Avantages des algorithmes de Spideo : -  Temps réels -  Scalables -  Explicables -  A fait ses preuves

Algorithmes de recommandation innovants

Mood-Based Discovery

Related Content Profile-Based Suggestions

Semantic Search

Page 8: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Quelques clients actuels de nos solutions

Page 9: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 10: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Content and User Metrics

Business Rules User Segmentation

Des analytics... ...pour aider nos clients à bien analyser et mieux monétiser leurs services

Page 11: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 12: Spideo: Movie Recommendation Analytics with Cassandra (Français)

12

Il était une fois … analytics

Page 13: Spideo: Movie Recommendation Analytics with Cassandra (Français)

13

Page 14: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Must have

-  Scalabilité

-  Tolérance aux pannes

-  Haute disponibilité

-  Critères de performance : . Écriture : 2000 logs/s . Lecture : < 60 ms/requête sur une période d’1 mois

14

Page 15: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Base de données distribuée

15

Page 16: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Oui mais laquelle ?

16

Page 17: Spideo: Movie Recommendation Analytics with Cassandra (Français)

17

Page 18: Spideo: Movie Recommendation Analytics with Cassandra (Français)

18

Page 19: Spideo: Movie Recommendation Analytics with Cassandra (Français)

19

Mature

Intuitive

Flexible

Performante

Distribuée

“ Hype ”

Page 20: Spideo: Movie Recommendation Analytics with Cassandra (Français)

20

Le POC

●  Une requête complexe ●  Temps de réponse à ISO config hardware ●  Une semaine pour l’implémenter en Cassandra et PostreSQL

Page 21: Spideo: Movie Recommendation Analytics with Cassandra (Français)

21

Page 22: Spideo: Movie Recommendation Analytics with Cassandra (Français)

22

Cassandra 36 ms

PostreSQL ~ 3 s Après tuning ~ 1 s

Temps de réponse sur toute l’année et tous les segments

=> 28x plus rapide

Page 23: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Le CAP

23 sources: Cassandra: the Definitive Guide.

Page 24: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Les cerises sur le gâteau

24

Page 25: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Timeseries

25

Page 26: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Counter

26

Page 27: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Le vote

27

Page 28: Spideo: Movie Recommendation Analytics with Cassandra (Français)

And the winner is ...

28

Page 29: Spideo: Movie Recommendation Analytics with Cassandra (Français)

29

Page 30: Spideo: Movie Recommendation Analytics with Cassandra (Français)

30

Page 31: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Concrètement, comment ça marche?

31

Page 32: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 33: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Rappel dashboard

33

Page 34: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Compteurs avec filtres

34

[Mood]

[Theme]

[Format]

Page 35: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Envies (moods)

35

Page 36: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Thèmes

36

Quelques thèmes

Page 37: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Format

37

Page 38: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Définition du use case

38

Nombre de vues sur les films qui correspondent à l’envie rire, et au thème « en voyage »

Page 39: Spideo: Movie Recommendation Analytics with Cassandra (Français)

La requête d’abord

39

Page 40: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Si on normalise :

=> Problème : toute la table sera remontée en RAM pour faire le count

40

Page 41: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Si on dénormalise:

41

CREATE TABLE watches( mood text, theme text, format text, day int, total counter, PRIMARY KEY ((mood,theme, format), day)

) CLUSTERING ORDER BY (day ASC)

# partition = Filtre

clustering column

Page 42: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Dans cette modélisation, on aura autant de partitions que de combinaison

possibles de

(mood, theme, format)

42

Page 43: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Cardinalité pour un contenu

43

(mood, theme, format)

1 + 3 1 + 8 1 + 1

= 4 x 9 x 2 = 72

Page 44: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Cardinalité totale

44

(mood, theme, format)

1 + 23 1 + 749 1 + 12

= 24 x 750 x 13 = 234 000

Page 45: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Un watch de film Rire et En voyage => On écrit 8 fois ( 2 * 2 * 2)

45

mood

Page 46: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Avantage : Temps de réponse instantané

Inconvénient :

Nombre d’écriture important

46

Page 47: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 48: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

Exemple: Top 10 des contenus les plus regardés

48

Page 49: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

49

Page 50: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

50

CREATE TABLE watches_per_content(

day text, content_id text, nb_of_watch counter, total counter static, PRIMARY KEY ((day), content_id)

# partition clustering column

1- Table de compteur: compter le nombre de vues par contenu

Page 51: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

 Map<day,  SortedMap<content_id,nb_of_watch>>  

51

01-01-2015 52 175 id_Divergent id_The_Other_Women id_Noah

20 067 18 081 14 027

# partition total

1- Table de compteur:

Page 52: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

Map<day,  SortedMap<nbwatch,SortedMap<content,_>>  

52

01-01-2015 20 067 18 081 14 027

Divergent The Other Women Noah

# partition

2- Table de tri:

Page 53: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

53

CREATE TABLE content_ranking( day text, nb_of_watch bigint, content_id text, PRIMARY KEY ((day), nb_of_watch, content_id)

) CLUSTERING ORDER BY (nb_of_watch DESC, content_id ASC)

Ordre sur le nb de vues

2- Table de tri: trier les contenus par nombre de vues.

Page 54: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Classement Top 10

54

CREATE TABLE content_ranking( day text, nb_of_watch bigint, content_id text, PRIMARY KEY ((day), nb_of_watch, content_id)

) CLUSTERING ORDER BY (nb_of_watch DESC, content_id ASC)

CREATE TABLE watches_per_content( day text, content_id text, nb_of_watch counter, total counter static, PRIMARY KEY ((day), content_id)

Table où on écrit Table où on lit Batchs

Page 55: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 56: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

56

Page 57: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

Nombre d’utilisateurs uniques qui interagissent avec notre système

sur une période donnée (arbitraire)

57

Page 58: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

58

Exemple: Nombre de vues

Page 59: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

59

Page 60: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

+  Écrire : Simple update -  Lire : SELECT count(*) WHERE day=”16-06-2015”

60

CREATE TABLE active_users( day text, user_id text, nb_of_watch counter, PRIMARY KEY ((day), user_id)

# partition clustering column

1ère Approche: Table de compteurs

Page 61: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

61

Page 62: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

+  Écrire : Simple update -  Lire : SELECT count(*) WHERE month=”06-2015”

62

1ère Approche: Table de compteurs

CREATE TABLE active_users_by_week( day text, user_id text, nb_of_watch counter, PRIMARY KEY ((week), user_id)

CREATE TABLE active_users_by_month( day text, user_id text, nb_of_watch counter, PRIMARY KEY ((month), user_id)

Page 63: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

+  Lecture instantanée -  Batchs (précalculs) -  Pas de période aléatoire

63

2ème Approche: Mettre les count en cache

CREATE TABLE active_users_by_day_cache( day text, users bigint, PRIMARY KEY (day)

# partition

Page 64: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

+  Période quelconque -  Lent

64

3ème Approche: Utiliser des Sets

CREATE TABLE active_users_with_set( day text, user_ids set<text>, PRIMARY KEY (day)

# partition

Page 65: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

65

3ème Approche: Utiliser des Sets

Page 66: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

66

Page 67: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

67

Page 68: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

http://fr.slideshare.net/doanduyhai/distributed-algorithms-for-big-data-geecon

Approche Espace requis Cardinalité Marge d’erreur

Set 10M 67 801 0%

HyperLogLog 512 octets 70 002 3%

68

4ème Approche: HyperLogLog : cardinalité estimée d’éléments uniques

Page 69: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

69

4ème Approche: HyperLogLog

Page 70: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

70

4ème Approche: HyperLogLog

CREATE TABLE active_users_with_hll( day text, hll blob, PRIMARY KEY (day)

hll-jour-1 ⋃ hll-jour-2 = hll sur deux jours

https://github.com/aggregateknowledge/java-hll

Page 71: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

71

4ème Approche: HyperLogLog

Approche Cardinalité Temps de réponse

Set 1 666 883 7 s

HyperLogLog 1 712 563 25 ms

× 28

Marge d’erreur : 2.7%

Page 72: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Utilisateurs actifs

72

Page 73: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Plan 1.  Spideo 2.  Analytics 3.  Pourquoi Cassandra ? 4.  Etude de cas

I. Compteur avec filtres II. Top 10 III. Utilisateurs actifs

5.  Conclusion

Page 74: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Conclusion - Quelques chiffres

●  ~ 1 350 000 écriture / 24 h / client ●  ~ 20 log / s / client ●  objectif 2000 log / s (demande d’un client) ●  Au démarrage :

o  1 cluster : 3 machine à 160 go o  temps de réponse maxi 2s pour un an

74

Page 75: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Conclusion

●  Écrire les requêtes avant de concevoir le modèle. ●  Se permettre de répliquer les données. ●  Ne pas hésiter à chercher dans la littérature.

75

Page 76: Spideo: Movie Recommendation Analytics with Cassandra (Français)

Conclusion

Questions ?

Remarques ?

Recommandations ?

76

[email protected] [email protected] [email protected] / @AFCRanda