Netflix : utilisation de S3 en high availability
recommandation : | analyser les notes des utilisateurs sur les filmes qu'ils ont vu → prédire les filmes pour lesquels ils donneraient de bonnes notes (0 à 5). |
---|
triplet : [utilisateur, filme, note (,date) ]
⇒ c'est énorme, beaucoup de calculs | ⇒ c'est extrêmement lent. | On veut mettre à jour continuellement. |
---|
Oracle ne marchait plus. Ils ont essayé S3.
On veut des morceaux fragments disjoints. Puis on les alloue aux différents sites, avec un peu de redondance si utile.
select * from R where hashkey = hash(A)
select * from R,S where R.A = S.B
select * from R where 10 ≤ R.A < 100
On se rapproche à des fragmentation qui ressemble aux requêtes.
nclient | nom | ville |
C1 | Dupont | Paris |
---|---|---|
C2 | Martin | Lyon |
C3 | Martin | Paris |
C4 | Smith | Lille |
create table client1 as select * from client where ville = 'Paris';
nclient | nom | ville |
C1 | Dupont | Paris |
---|---|---|
C3 | Martin | Paris |
create table client2 as select * from client where ville != 'Paris' ;
nclient | nom | ville |
C2 | Martin | Lyon |
C4 | Smith | Lille |
Une partie où ville = Paris
et l'autre avec ville != Paris
. On peut reconstituer la table initiale par union
create view client as select * from client1 union select * from client2;
voir slide
Utilisation d'une clè étrangère:
create table cde1 as select cde.* from cde, client1 where cde.client = client1.nclient
create table cde2 as select cde.* from cde, client2 where cde.client = client2.nclient
Propriétés de la fragmentation horizontale dérivée : recopier formules de slide 13
sdss sky server
cde1 = cde(ncde, nclient)
cde2 = cde(ncde, produit, qté)
: copier de slide 15
Un moteur de requête analyse la fragmentation par rapport au schéma de fragmentation, et génère des requêtes sur fragments. Puis, il fait une optimisation avec le schéma d'allocation.
select A from R where B=b |
fragmentation : R = R1 ∪ R2 |
---|
select A from R1 where B=b union select A from R2 where B=b |
Optimisation : |
R1 = R1@Site1 R2=R2@Site2 R2=R2@Site3 |
Réécriture | mettre la requete sous forme d'un arbre algébrique (feuille = relation, noeud = op. relationnel |
---|---|
Reconstruction | remplacer chaque feuille par le programme de reconstruction de la relation globale |
Transformation | appliquer des techniques de réduction pour éliminer les opérations inutiles |
Notations utilisées | S : select J : join P : project |
voir slide 26
Règle : éliminer l'accès aux fragments inutiles.
Exemple :
select * from Client where ville='Lyon'
Client1
car Lyon
n'est jamais Paris
Règle : éliminer l'accès aux relations de base qui n'ont pas d'attributs utiles pour le résultat final
select nclient from Cde
Règle distribuer les jointures par rapport aux unions et appliquer les réduciton pour la fragmentation horizontale
Exemple |
---|
: slides 28-31