Spideo creates TV and movie recommendation engines to enable content discovery. It also provides data and analytics to optimize marketing strategy for our customers.
Our engines handle millions of requests per day. We want to offer deeper insight on how users interact with content and personalized recommendation.
We will present why and how we are using Cassandra for:
* Real time analytics
* Filtering data
* Computation of cardinality
6. Service de recommandation “content centric”
Toujours expliquer la recommandation pour créer un lien
de confiance avec les utilisateurs
7. Les Avantages des algorithmes de Spideo :
- Temps réels
- Scalables
- Explicables
- A fait ses preuves
Algorithmes de recommandation innovants
Mood-Based
Discovery
Related ContentProfile-Based
Suggestions
Semantic Search
9. Plan
1. Spideo
2. Analytics
3. Pourquoi Cassandra ?
4. Etude de cas
I. Compteur avec filtres
II. Top 10
III. Utilisateurs actifs
5. Conclusion
10. Content and
User Metrics
Business Rules User
Segmentation
Des analytics...
...pour aider nos clients à bien analyser et mieux monétiser
leurs services
11. Plan
1. Spideo
2. Analytics
3. Pourquoi Cassandra ?
4. Etude de cas
I. Compteur avec filtres
II. Top 10
III. Utilisateurs actifs
5. Conclusion
14. 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
40. Si on normalise :
=> Problème : toute la table sera remontée en RAM pour faire le count
40
41. 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
42. Dans cette modélisation, on aura autant
de partitions que de combinaison
possibles de
(mood, theme, format)
42
43. Cardinalité pour un contenu
43
(mood, theme, format)
1 + 3 1 + 8 1 + 1
= 4 x 9 x 2 = 72
50. 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
51. 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:
52. 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:
53. 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.
54. 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
55. Plan
1. Spideo
2. Analytics
3. Pourquoi Cassandra ?
4. Etude de cas
I. Compteur avec filtres
II. Top 10
III. Utilisateurs actifs
5. Conclusion
73. Plan
1. Spideo
2. Analytics
3. Pourquoi Cassandra ?
4. Etude de cas
I. Compteur avec filtres
II. Top 10
III. Utilisateurs actifs
5. Conclusion
74. 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
75. 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