4i083 Polytd Partie2 2018 Num Pages
4i083 Polytd Partie2 2018 Num Pages
4i083 Polytd Partie2 2018 Num Pages
4I803
Bases de Données Réparties (BDR)
TD - Partie 2
URL : www-bd.lip6.fr/wiki/doku.php/site/enseignement/master/bdr/start
1
UPMC - UFR 919 - Master d’informatique - M1 4I803
Soit la base de données AutoRoul d’une chaîne de garages automobiles qui contient les tables suivantes :
Question 1. Il y a un site informatique par ville. L’allocation des fragments se fait donc selon la ville. Par exemple,
Personnev représente le fragment de la relation Personne stocké sur le site Sv de la ville v.
Définir les fragments de la base de données AutoRoul et leur allocation. Personnev, Garagev...
Question 2. La fragmentation que vous proposez est-elle disjointe ? Sinon, quelles sont les tables dont la
fragmentation n’est pas disjointe ?
Question 3. On suppose maintenant qu’il y a un site informatique par marque, et non plus par ville. L’allocation
des fragments se fait donc selon la marque. Par exemple, Clientm représente le fragment de la relation Client
stocké sur le site Sm de la marque m.
Compléter le tableau suivant afin de définir les fragments de la base de données AutoRoul et leur allocation.
Question 3. Exprimer la requête R sur les fragments ainsi définis. Pour cela, reprendre l’expression de la
question 2, remplacer les relations par leur expression en termes de fragments, puis appliquer les sélections le
plus tôt possible. Répondre en dessinant un arbre avec la racine en haut du cadre et les feuilles en bas du
cadre. Entourer le(s) sous-arbre(s) inutile(s) à supprimer.
Question 4. Appliquer la distributivité de la jointure sur l’union puis supprimer à nouveau le(s) sous-arbre(s)
inutile(s). Répondre en dessinant l’arbre obtenu et en entourant le(s) sous-arbre(s) inutile(s).
Question 5. On suppose que la requête est posée sur le site S1. Quelles données doivent être transférées sur le
2
M1 BDR 4I803
réseau pour exécuter le plan d’exécution trouvé à la question 4. Que peut-on en conclure sur l’efficacité des
simplifications faites aux questions 3 et 4 ?
Chaque marque possède un site informatique dans chaque ville, qui doit stocker les données nécessaires aux salons
de cette marque dans la ville. L’allocation des fragments se fait donc selon la marque et la ville. Par exemple,
Personnem,v représente le fragment de la relation Personne stocké sur le site Sm,v de la marque m dans la ville v.
Question 1. Compléter le tableau suivant afin de définir les fragments de la base de données CoifPlus et leur
allocation. On précise qu’un site doit stocker non seulement les coiffeurs qui travaillent dans les salons
correspondants, mais aussi tous les coiffeurs de la ville correspondante car ils peuvent être appelés d’urgence pour
un remplacement imprévu.
Question 2. La fragmentation que vous proposez est-elle disjointe ? Sinon, quelles sont les tables dont la
fragmentation n’est pas disjointe ?
Question 3. Exprimer la requête R sur les fragments ainsi définis. Pour cela, reprendre l’expression de la
question 2, remplacer les relations par leur expression en termes de fragments, puis appliquer les sélections le
plus tôt possible. Répondre en dessinant un arbre avec la racine en haut du cadre et les feuilles en bas du
cadre. Entourer le(s) sous-arbre(s) inutile(s) à supprimer.
Question 4. Appliquer la distributivité de la jointure sur l’union puis supprimer à nouveau le(s) sous-arbre(s)
inutile(s). Répondre en dessinant l’arbre obtenu.
Question 5. On suppose que la requête est posée sur le site S1. Quelles données doivent être transférées sur le
réseau pour exécuter le plan d’exécution trouvé à la question 4. Que peut-on en conclure sur l’efficacité des
simplifications faites aux questions 3 et 4 ?
3
M1 BDR 4I803
EDF maintient une base de données pour surveiller et gérer la consommation d’électricité en Île de France. Le
schéma est composé de 4 tables (les clés primaires sont soulignées) :
L’attribut comp identifie une compétition sportive auquel un sportif obtient un classement. Seuls 10% des sportifs
de la base ont déjà participé à une compétition, les autres ne pratiquent le sport qu’en tant que loisir. On suppose
que la distribution des valeurs des attributs est uniforme.
Le coût d’un plan d’exécution d’une requête est composé d’un coût de transfert (unité tt) et d’un coût d’accès au
disque (unité tio), tous deux en nombre de pages.
Sportif (respectivement Performance) est indexée par un arbre-B+ de hauteur 2 (respectivement 3) sur ids. Le
coût d’accès à un n-uplet de Sportif connaissant la valeur de ids est donc de 2 tio (respectivement 3 tio). On
suppose que tous les nuplets de Performance correspondant à une valeur de ids tiennent dans une seule page.
Soit la requête R1 posée sur S3 (le résultat doit être délivré sur S3)
4
M1 BDR 4I803
Question 1
Exprimer en SQL la question suivante: “Donner le nom des cardiologues qui ont traité un ou plusieurs patients
hospitalisés dans un service de gérontologie.”
5
M1 BDR 4I803
Question 2
Proposer (et justifier) une bonne décomposition de la base hospitalière sur ces trois sites. On pourra utiliser la
fragmentation horizontale et/ou verticale ainsi que la réplication des données, en se basant sur les hypothèses
suivantes (H1 à H5) :
• H1: Les sites Strasbourg et Colmar ne gèrent que les hôpitaux correspondants.
• H2 : Les infirmiers sont employés dans un service donné.
• H3 : Les docteurs travaillent le plus souvent sur plusieurs hôpitaux (ou cliniques).
• H4 : La gestion des lits d’hôpitaux est locale à chaque hôpital.
• H5 : On désire regrouper la gestion des frais d’hospitalisation au centre régional.
Pour chaque fragment, on donnera sa définition en algèbre relationnelle à partir du schéma global.
Question 3
Indiquer comment se calcule chaque relation de la base globale à partir de ses fragments.
Question 4
Proposer un plan d’exécution réparti pour la requête SQL vue en Question 1, sachant maintenant que les données
sont réparties sur les trois sites selon la décomposition proposée à la Question 2.
Question 6
Définir le nouveau schéma global intégrant la base Belfort.
Chaque relation du schéma global (Service2, Salle2, …Acte2) est définie en fonction des fragments sur les 4
sites.
Question 7
L’hypothèse H5 est-t-elle toujours respectée après l’intégration de la base Belfort ?
Si non, quelles sont les modifications de schéma nécessaires pour respecter H5 ?
Question 8
Proposer une décomposition et un plan d’exécution pour la question SQL précédente après l’intégration de la
base “Belfort”.
6
M1 BDR 4I803
Question 1.
a) Calculer la taille d’un tuple du résultat.
b) Calculer la cardinalité du résultat.
c) Calculer la taille (en nombre de pages) du résultat de cette requête.
Question 2.
On suppose que toutes les jointures sont faites en utilisant l’algorithme de tri-fusion, dont le coût dépend du
nombre de pages (noté p()) des relations participant à la jointure. On a :
Par exemple, pour une jointure entre 2 relations locales non triées et lorsque le tri nécessite de stocker
temporairement les morceaux de R et S triés, on a :
On demande de calculer le coût de l’exécution de cette requête pour les différents plans d’exécution suivants :
Plan P1: On calcule la requête à Naples en envoyant la relation Service à Naples ; le résultat est envoyé à
Londres.
Plan P2: On calcule la requête à Berlin en envoyant la relation Employés à Berlin ; le résultat est envoyé à Londres
Plan P3: On calcule la requête à Londres, en envoyant les deux relations à Londres.
Plan P4: On calcule la requête à Berlin puis à Naples, en utilisant une semi-jointure à Berlin ; on envoie le résultat
final à Londres. (attention, la semi-jointure peut amener à créer des relations temporaires qu'il faudra intégrer
dans le coût)
Plan P5: On calcule la requête à Naples puis à Berlin en utilisant une semi-jointure à Naples ; on envoie le résultat
à Londres.
7
M1 BDR 4I803
Question 3.
D’après vos réponses, quel est le plan qui minimise les transferts ? Est-ce forcément le plan le plus intéressant ?
Quel est le meilleur plan ?
8
M1 BDR 4I803
Question 1. Calculer la jointure naturelle entre EMPLOYES et SERVICES, en utilisant la stratégie qui
consiste à envoyer tous les fragments de la plus petite relation vers les sites contenant les n-uplets de la
plus grande relation. L’algorithme de jointure utilisé est le trifusion, dont le coût est de 3(M+N)Cd, M
et N étant les tailles des relations (N et M sont exprimées ici en nombre de pages) participant à la jointure.
Question 2. Quel est l’employé le mieux payé ? (en cas de dupliqués, la requête doit renvoyer tous les
n-uplets répondant au critère).
Question 1. Décrivez brièvement le plan d’évaluation de la requête R1, et calculez son coût en termes
de temps d’accès (td) et temps d’envoi (ts). On donnera le coût total de la requête, ainsi que le coût en
temps écoulé (si plusieurs opérations sont effectuées en parallèle, le temps écoulé est le maximum du
temps pris par chacun des processeurs pour faire son travail).
R1 . Quel est le joueur le mieux payé ?
Question 2. La relation Joueurs est maintenant stockée dans un SGBD réparti comprenant 15 sites. Elle
est partitionnée horizontalement sur les 15 sites, selon les valeurs de l’attribut salaire, en stockant les n-
uplets vérifiant la condition salaire <=100000 sur le premier site, les n-uplets vérifiant la condition
100000 <salaire<=200000 sur le second site, et ainsi de suite. La base est complétée par la relation
Equipes suivante :
Equipes (eq-id : integer, cap-id : integer, pays: string)
Le champ cap-id de la relation Equipes est le joueur-id du capitaine de l’équipe. La relation Equipes
comprend 4500 pages, et est répartie horizontalement selon l’attribut eq-id. On suppose que la répartition
est uniforme (on a le même nombre de n-uplets sur chaque site), et aléatoire (il n’y a pas de critère pour
répartir les n-uplets sur les sites). Les n-uplets de la relation Equipes ont une taille de 20 octets.
Décrivez brièvement les plans d’exécution des requêtes R1 et R2, et donnez leur coût en fonction de td
et ts.
R1. Quel est le joueur le mieux payé ?
R2. Faire la jointure naturelle des relations Joueurs et Equipes en utilisant la stratégie qui consiste à
envoyer tous les fragments de la plus petite relation sur chaque site contenant les n-uplets de la plus
grande relation.
9
M1 BDR 4I803
Réplicateur Réplicateur
SGBD SGBD
Site S1 Site S2
Chaque site héberge un SGBD et une application. Une application produit une charge constituée de lectures et
d'écritures. Pour maintenir les sites à jour, on ajoute un module de gestion des répliques (intergiciel appelé
réplicateur). Si une donnée est répliquée sur plusieurs sites, une écriture doit être traitée sur toutes les répliques.
Une lecture est traitée localement si possible.
Soit un fragment F et deux sites S1, S2. Le coût pour lire (resp. écrire) un nuplet vaut 1 (resp. 2). Le coût pour
transférer un nuplet vaut 3. Ainsi, on a le modèle de coût suivant :
Lecture locale : LL = 1
Ecriture locale : EL = 2
Lecture distante, depuis Si, d'un nuplet de Sj (avec ij) : LD = 4
Ecriture distante, depuis Si, d'un nuplet de Sj (avec ij) : ED = 5
On souhaite allouer F sur un ou plusieurs sites de manière à minimiser le coût de traitement des applications.
Question 1
Une application Ai produit, sur le site Si , une charge valant 6*n lectures et n écritures de F (toutes les applications
produisent la même charge). On veut calculer, en fonction de n, la quantité de lectures et d’écritures traitées par
les SGBD des sites S1 et S2.
1.1) On suppose que F est seulement sur S1. Quel est le coût des traitements sur chaque site ?
1.2) On suppose maintenant que F est répliqué sur S1 et S2. Quel est le coût des traitements sur chaque site ?
Question 2
On complète l'architecture initiale avec un troisième site S3 et son application A3. Les applications produisent la
charge suivante : A2 produit 3 fois plus de traitements que A1, A3 produit 4 fois plus de traitements que A1.
Chaque application produit 10 fois plus de lectures que d'écritures. A1 produit n écritures et 10*n lectures.
On veut savoir s’il est intéressant d’allouer F sur S3 ; plus précisément, dans le cas où F ne serait pas alloué sur
S3, quelle serait l'augmentation (ou la diminution) du coût que cela induirait pour les traitements de A3.
2.1.a) Quelle est, en fonction des 3 variables n, L (lecture) et E (écritures) la charge produite par chaque
application.
2.1.b) Est-il nécessaire d'allouer F sur S3 pour minimiser globalement le coût des traitements ? Justifier
brièvement.
10
M1 BDR 4I803
2.1.c) Le fait d’allouer F sur S3 a-t-il un impact sur le coût de traitement des lectures de A3 ? Si oui, quelle est la
différence de coût pour traiter les lectures de A3 en comparaison avec une configuration où F n’est pas sur S3 ?
Donner une réponse en fonction de n.
2.1.d) Quelle est l’allocation pour laquelle F n’est pas sur S3 et les écritures sont minimisées ? Dans ce cas, quel
est en fonction de n, le coût de traitement des écritures produites par A3 ?
2.1.e) Quelle est l’allocation pour laquelle F est sur S3 et les écritures sont maximisées ? Dans ce cas, quel est
en fonction de n, le coût de traitement des écritures produites par A3 ?
2.1.f) Finalement, quelle est, en fonction de n, la plus petite augmentation (ou la plus forte diminution) de coût
apportée par une configuration où F n’est pas sur S3.
2.2) Quel est le coût des traitements si F est seulement sur S3 ?
2.3) Quel est le coût des traitements si F est répliquée sur S2 et S3 ?
2.4) Quel est le coût des traitements si F est répliquée sur S1, S2 et S3 ?
2.5) Quelle allocation minimise globalement le coût des traitements ?
Transactions
Exercice 1 : (ref 1-01) Verrouillage réparti de données répliquées
1. Quel est le problème posé lorsqu’on veut verrouiller une donnée répliquée ?
2. Qu’est ce qu’un verrou global , un verrou local ?
3. On suppose qu’un gestionnaire de verrou centralise les demandes de verrou et d’accès aux données. Expliquer son
fonctionnement en cas de données répliquées. Quels sont les avantages et défauts d’une telle approche ?
Pour accéder à une réplique, il faut avoir le verrou global sur la donnée. Il faut donc s’adresser au gestionnaire de verrou global. L’avantage est la simplicité :
dès que le gestionnaire global me donne le verrou, j’ai automatiquement les verrous sur les répliques. Le défaut est lié à la centralisation : il faut mettre en
œuvre ce gestionnaire et y accéder sans cesse, risque de goulot d’étranglement et risque en cas de panne de ce site.
4. On cherche maintenant à ne pas mettre en place de gestionnaire centralisé, mais de tirer parti des gestionnaire de verrous
et d’accès locaux. Pour cela, les transactions doivent respecter le protocole suivant :
lorsqu’elles ont réussi à verrouiller un certain nombre de répliques d’une donnée, les transactions peuvent déduire qu’elle ont
accès à la donnée. On dit qu’elle obtiennent un verrou logique sur la donnée grâce aux verrous physiques qu’elles ont obtenus
sur les répliques. On suppose qu’une donnée d est répliquée sur n sites.
a. On suppose que n=3. Montrer qu’en obtenant au moins 2 verrous physiques exclusifs, une transaction peut avoir
un verrou logique exclusif sur d et donc accès en écriture à d, donc à toutes ses répliques.
b. Soit k (resp. k’) le nombre de verrous physiques exclusifs (resp. partagés) à obtenir pour en déduire un verrou
logique exclusif (resp. partagé). Donner la valeur minimale de k (resp. k’) en fonction de n que le protocole doit
respecter pour que le verrouillage logique fonctionne.
11
M1 BDR 4I803
Seq : L1(y), L3(z), L2(z), E3(z), L3(t), L1(t), L1(z), E4(t), L2(t), L3(x), L4(y), E1(x)
Question 2 : On suppose maintenant un contrôle de concurrence par verrouillage deux-phases strict sur la
séquence Seq : une demande de verrou se fait juste avant l’opération correspondante, le relâchement des verrous
se fait juste après la dernière opération de la transaction. Les transactions lectrices obtiennent toujours le verrou
partagé sur un granule si c’est possible, même si des transactions écrivaines sont en attente sur le granule.
Assiste-t-on à un interblocage ? Si oui, montrez l’état de la table des verrous à l’instant où se produit l’interblocage
(en indiquant quelle est l’opération de Seq qui génère l’interblocage). Sinon, montrez l’ordre produit par le
contrôleur de concurrence (noter Vi pour la validation de la transaction Ti).
Remarque : la promotion de verrou est possible. Rappel : lorsqu’une transaction T demande un verrou exclusif
sur un granule g, qu’elle possède déjà un verrou partagé sur g, et qu’aucune autre transaction ne verrouille g, alors
le verrou partagé est promu en verrou exclusif afin de satisfaire la demande de T.
12
M1 BDR 4I803
JDBC
Exercice 1 (4-17): Requêtes réparties avec JDBC pts
Soit la base de données répartie sur les sites S1 à S4 :
Sur S1
Mécanicien (idpers, idgarage, niveau) // un mécanicien travaille dans un garage
Garage (idgarage, nom, ville, jourdefermeture)
Sur S2 :
Réparation (idmecanicien, immat, date, intervention) // le mécanicien a réparé le véhicule immat
Habilité (idgarage, marque) // le garage peut réparer des véhicules de la marque
Sur S3 :
Personne (idpers, nom, prenom, age, tél) // un mécanicien ou un client
Possède (immat, marque, modele, idclient) // le véhicule immat (avec sa marque et son modèle) appartient
à idclient
Les autres tables (Tarif et Client) sont sur S4. Tous les programmes JDBC s’exécutent sur S0 et peuvent se
connecter au site Si avec l’URL urli.
Question 1 : Soit la requête globale R1:
select v.marque, m.nom, m.prénom
from Personne m, Réparation r, Possède v
where m.idPers = r.idMecanicien and v.immat = r.immat
and r.intervention = ‘remplacement moteur’ and r.date = ‘16/5/2017’
On traite cette requête avec JDBC en faisant des jointures par boucles imbriquées et en commençant par traiter
les sélections sur les sites concernés.
a) Quelle(s) requête(s) non paramétrée(s) faut-il exécuter ? Pour chacune, donner son code SQL et préciser sur
quel site elle s’exécute.
b) Quelle(s) requête(s) paramétrée(s) faut-il exécuter ? Pour chacune, donner son code SQL et préciser sur quel
site elle s’exécute.
Question 2 : Soit la requête globale R2 affichant le jour de fermeture du Garage central d’Aix s’il est habilité
pour la marque du modèle Medusa. Le résultat ne contient aucun doublon.
select distinct g.idgarage, g.jourdefermeture
from Garage g, Habilité h, Possède v
where g.idgarage = h.idgarage and h.marque = v.marque
and v.modèle = ‘Medusa’
and g.nom = ‘Garage central’
and g.ville = ‘Aix’
On traite cette requête avec JDBC en faisant des jointures par boucles imbriquées et en commençant par pousser
les sélections sur les sites concernés.
a) Quelle(s) requête(s) non paramétrée(s) faut-il exécuter ? Pour chacune, donner son code SQL et préciser sur
quel site elle s’exécute.
b) Quelle(s) requête(s) paramétrée(s) faut-il exécuter ? Pour chacune, donner son code SQL et préciser sur quel
site elle s’exécute.
Question 3 : Soit la requête globale R3 : « les garages (idgarage, nom, ville) qui ne sont PAS habilités pour
réparer la marque ‘Carapid’ ». Ecrire la procédure J3 pour qu’elle affiche le résultat de R3 en transférant le moins
de données possible vers S0.
1 void J3() {
2 s1 = DriverManager.getConnection(url1); // site S1
3 (…) idem pour les connexions s2, s3 et s4
13
M1 BDR 4I803
Question 2 : Soit la requête globale R1 affichant l’identifiant, le nom et le niveau des coiffeurs ayant des rendez-
vous à 8h du matin :
select distinct p.idPers, p.nom, c.niveau,
from Coiffeur c, RDV r, Pers p
where r.idCoiffeur = c.idPers and c.idPers = p.idPers
and r.heure=8 ;
14
M1 BDR 4I803
a) On suppose que R1 contient 10 coiffeurs parmi les 1000 coiffeurs existants. Compléter la procédure J1 pour
qu’elle affiche le résultat de R1 en transférant le moins de données possible vers S0.
1 void J1() {
2 s1 = DriverManager.getConnection(url1); // site S1
3 s2 = DriverManager.getConnection(url2); // site S2
4
5 Statement S = ________.createStatement();
6
7 PreparedStatement P =
b) On veut traiter R1 en faisant une jointure par fusion des résultats d’une requête posées sur S1 et d’une autre
posée sur S2. Ecrire en SQL les requêtes que le programme JDBC pose sur chaque site.
Question 3 : Soit la requête globale R2:
select * from RDV r
where r.idCoiffeur in ( select c.idPers
from Coiffeur c, Salon s
where c.idSalon = s.idSalon and s.ville = ‘Aix’)
On traite cette requête avec JDBC en faisant des jointures par boucles imbriquées et en poussant les sélections sur
les sites S1 ou S2.
a) Combien de requêtes non paramétrées sont nécessaires ? Pour chacune, donner son code SQL et préciser sur
quel site elle s’exécute.
b) Combien de requêtes paramétrées sont nécessaires ? Pour chacune, donner son code SQL et préciser sur quel
site elle s’exécute.
Les programmes java, proposés par la suite, sont des extraits de programmes complets, suffisants pour
comprendre ce que fait le programme. Ils s’exécutent sur S0 et accèdent aux sites S1 et S2. Seul le site S0 peut
accéder à S1 et S2 par JDBC (connexion avec l’url1 pour S1 et l’url2 pour S2).
15
M1 BDR 4I803
3
4 PreparedStatement q1 = s1.prepareStatement("select ids from Perf
5 group by ids having count(*) >= ? ");
6 q1.setInt(1, X);
7 ResultSet r1 = q1.executeQuery();
8 int c=0;
9 while(r1.next()) { c = c+1; } // fin du while
10 out.println(c);
11 q1.close(); s1.close();
12 }
Question 3 : Définir A3(int X) qui affiche le numéro des sportifs qui ont été classés au moins 2 fois au rang X
(dans 2 compétitions différentes).
16