Poly-Td Partie1 2019
Poly-Td Partie1 2019
Poly-Td Partie1 2019
M1
4I803
Bases de Données Réparties
TD
Partie 1
URL : www-bd.lip6.fr/wiki/doku.php/site/enseignement/master/bdr/start
Hachage
Optimisation de requêtes
UPMC - UFR 919 - Master d’informatique - 4I803
TD 1 : Index , Arbre B+
Notations et conventions
Nombre de valeurs dans un nœuds. Pour un arbre B+ d'ordre d, le nombre de valeurs qu'un nœud peut contenir est :
dans l'intervalle [1, 2.d] pour la racine,
dans l'intervalle [d, 2.d] pour les nœuds intermédiaires et les feuilles.
Certains exercices n'indiquent pas l'ordre de l'arbre mais directement le nombre de valeurs dans un nœud.
Dessin d'un arbre. Pour repérer facilement les nœuds d'un arbre quand on le dessine, on peut attribuer un nom à chaque
nœud : R pour la racine, Ni pour les nœuds intermédiaires et Fi pour les feuilles. On peut utiliser la syntaxe suivante pour
représenter le contenu d'un nœud : N( v1, v2, …) où N est le nom du nœud et les vi sont les valeurs.
Insertion d'une valeur en cas de débordement : quand la feuille F déborde, on garde les d+1 plus petites valeurs dans F, les
d autres valeurs vont dans une nouvelle feuille. Quand le nœud intermédiaire N déborde on garde les d plus petites valeurs
dans N, les d plus grandes valeurs vont dans un nouveau nœud. La valeur restante est insérée dans le nœud père.
Suppression d'une valeur. Si le nœud ne contient que d valeurs avant la suppression, alors on considère d'abord la
redistribution avec le nœud voisin (de même père) situé à gauche, puis avec celui situé à droite. Si aucune redistribution n'est
possible, on considère la fusion avec le voisin (de même père) situé à gauche, puis avec celui situé à droite. Une suppression
avec redistribution nécessite d'ajuster le contenu du nœud père. Une suppression avec fusion nécessite de supprimer une
valeur dans le nœud père.
Décompte du nombre de nœuds lus et écrits. Une opération d'insertion ou de suppression peut nécessiter de lire, modifier ou
créer des nœuds. On appelle L le nombre de nœuds lus pendant une opération, et respectivement E le nombre de nœuds écrits
ou créés.
4) Select * from Livre where année=2016 and prix=20 and auteur like ‘T%’;
Répondre à partir des informations détaillées ci-dessus en justifiant votre réponse. Le SGBD utilise des index seulement si
le coût est inférieur à celui d’un parcours séquentiel.
Question 3 : Quels sont la cardinalité et le coût de la requête ? Select * from Livre where année >=2013;
Question 4 : Quels sont la cardinalité et le coût de la requête ? Select * from Livre where année >=2000;
Question 5 : La requête suivante utilise-t-elle un index ? Select * from Livre where prix=10;
Question 6 : Détailler le pseudo-code pour exécuter la requête affichant les livres à 80 euros publiés entre 2000 et 2002
(soit 3 années) : select * from Livre where année between 2000 and 2002 and prix=80;
Rmq, deux index sont utilisés.
Question 7 : La requête suivante utilise l’index sur l’attribut prix. Select sum(prix) from Livre ;
L’index contient une racine, un niveau de nœuds intermédiaires et un niveau de feuilles. Chaque valeur dans une feuille est
associée à une liste de ROWID. Détailler l’exécution de la requête : quelles lectures (quels nœuds de l’index, quelles listes
de ROWID, ... ) et quels calculs ?
UPMC – UFR 919 – Master d’informatique 4I803 page 3
d) Représenter l’arbre A3 après suppression de la clé 8 dans A2. On considère la redistribution éventuelle avec
le voisin de gauche d’abord.
e) Combien de clés au maximum peut on supprimer dans l’arbre A3 sans qu’il perde un niveau ? Donner un
exemple de clés que l’on peut supprimer.
EXERCICES DE RAPPEL
On considère un arbre B+ d'ordre d=2. La racine de l'arbre A1 contient la valeur 50. Un seul niveau intermédiaire contient
(tous nœuds confondus) les valeurs 8, 18, 32, 40 73, 85. Les feuilles contiennent (toutes feuilles confondues) les valeurs 1,
2, 5, 6, 8, 10, 18, 27, 32, 39, 41, 45, 52, 58, 73, 80, 91, 99.
1) Dessinez l'arbre A1.
2) Dessiner l'arbre A2 après l'insertion de la valeur 9 dans A1. Combien valent L et E ?
3) Dessiner l'arbre A3 après l'insertion de la valeur 3 dans A1. Combien valent L et E ?
4) a) Dessiner l'arbre A4 après suppression de la valeur 8 dans A1. Si nécessaire, on envisage une redistribution à gauche.
Combien valent L et E ?
b) Même question mais en considérant uniquement la redistribution à droite si possible, sinon fusionner 2 feuilles.
5) Montrer l'état de l'arbre résultant, à partir de l'arbre A1, de l'insertion de la clé 46 suivie de la suppression de la clé 52
6) Montrer l'état de l'arbre résultant, à partir de l'arbre A1, de la suppression successive des clés 32, 39, 41, 45 et 73.
UPMC - UFR 919 – M1 BDR - 4I803
TD 2 : Hachage extensible
Notations et conventions
Pour toutes les tables de hachage étudiées en TD, on limite le nombre de valeurs dans un paquet à 4 au maximum. Ceci
permet d’étudier plus facilement sur des petites structures les cas d’insertion avec d’éclatement et de suppression avec
fusion. On utilise la notation suivante :
Le répertoire est noté R [P0, P1, P2,..., Pk-1 ] PG=pg avec
Pi ... les noms d’un paquet,
pg la profondeur globale.
Rmq : le répertoire contient k cases avec k = 2pg
Un paquet est noté Pi(vj, ..., ....) PL=pl avec
Pi le nom du paquet, par exemple P0, P1, A ou B
Vj. les valeurs que contient le paquet,
pl la profondeur locale du paquet Pi.
On peut aussi préciser le contenu d’une case particulière du répertoire avec R[i]= Pj (avec R[0] étant la 1ère case).
Suppression : Lors d’une suppression, si un paquet devient vide, on tente de le fusionner seulement si sa profondeur locale
est égale à la profondeur globale, sinon il reste vide.
1
UPMC – UFR 919 – Master d’informatique M1 BDR page 2
Exercice 2 (17-5) : Table de hachage extensible pts
Un paquet peut contenir au maximum 2 valeurs (rmq : seulement 2, pas 4).
Question 1. T1 a un répertoire R [P0, P1, P2, P3, P4, P5, P6, P7]. Le contenu des paquets est :
P0 (16, 104) P4 (4, 12)
P1 (1, 137) P5 (21)
P2 (10, 42) P6 (14)
P3 (19) P7 (15)
On supprime 19 dans T1. On obtient T2. Quel est son répertoire? Quels sont le contenu et la PL de chaque paquet modifié ?
Question 2. Soit R[A,B] le répertoire de T3. Les valeurs dans les paquets sont : 1, 23, 24.
Quels sont le contenu et la PL de A et B ?
On insère 3 dans T3. On obtient T4. Quel est son répertoire? Quels sont le contenu et la PL de chaque paquet ?
Exercice 3 (p15)
1) La table de hachage T0 contient seulement les valeurs 1, 4, 5, 6, 9, 14, 25. De combien de paquets a-t-on besoin au
minimum? Préciser leur contenu, leur PL, le contenu du répertoire.
2) On insère 7 dans T0. On obtient T1. Représenter T1. Préciser ce que contient chaque case du répertoire R
3) On insère 13 dans T1 obtenu à la question précédente. On obtient T2. Représenter T2.
4) On considère la table T3 avec les paquets A(10), B(16), C(17,31), D(30), E(36). Représenter T3. Rmq : vous devez
préciser le contenu de chaque case du répertoire (R[0] est différent de A, la taille du répertoire est une puissance de 2).
5) On supprime 10 dans T3. On obtient T4. Représenter T4
6) On supprime 30 dans T4 obtenu à la question précédente. On obtient T5. Représenter T5.
2
UPMC – UFR 919 – Master d’informatique M1 BDR page 3
2) Dans T1, on insère successivement 6 puis 18. Quels sont les paquets créés et/ou modifiés et leur contenu ? Préciser aussi
les cases modifiées du répertoire.
3) Dans T1, on insère successivement 3 valeurs dans le paquet E. Est-ce que cela a pour effet de doubler la taille du
répertoire ?
4) Dans T1, on supprime 9 puis 29. Quels sont les paquets supprimés et/ou modifiés et leur contenu ?
5) Dans T1, on supprime 8. Quels sont les paquets supprimés et/ou modifiés et leur contenu ?
6) On a un million (106) de valeurs à indexer. Quelle sera la taille minimale du répertoire ?
7) Question bonus : index bi-attribut. On considère la relation Restau(a, b, c) contenant 200 triplets. Les valeurs a, b, c sont
des entiers. On crée un index avec la commande :
create index IAB on Restau (a, b);
L’index utilise des techniques de hachage avec des paquets contenant au plus 4 valeurs. On veut utiliser un répertoire en
forme de matrice pour pouvoir accéder à une case du répertoire en fonction de la valeur de a et de celle de b. Préciser la (ou
les) fonction(s) de hachage à utiliser et expliquer comment accéder au triplet dont les valeurs (a, b) valent (12, 130).
Question 1. On considère un répertoire de profondeur globale PG=1. Avec 2 paquets P0 et P1 tels que
R=[P0,P1]. Initialement les deux paquets contiennent :
P0(4,8) P1(1,3)
On insère la valeur 12.
a) Est-ce que cette insertion provoque plus d’un éclatement ? Quelle sera la profondeur globale de la table
obtenue après l’insertion ?
b) Détailler la table obtenue après insertion. Préciser le contenu des paquets modifiés ou créés, et leur
profondeur locale (PL).
Question 2. On a un répertoire de profondeur PG=3. Les paquets contiennent les valeurs : 1, 7, 8, 10, 11, 16, 20.
a) De combien de paquets a-t-on besoin au minimum? Préciser leur contenu, leur PL, les liens entre les cases et
les paquets
b) On insère 19. Détailler la table obtenue en précisant seulement les paquets, les liens et les profondeurs
modifiés.
Question 3. Répartition d’une table de hachage. Pour indexer un attribut dont le domaine a de nombreuses
valeurs, on veut construire une « grande » table de hachage dont le répertoire a 32 cases et autant de paquets. Or,
on suppose que la plus grande table tenant dans la mémoire d’une machine a un répertoire de 8 cases et 8
paquets de 2 valeurs. Ainsi, on propose de répartir l’index sur 4 machines M0 à M3 gérant chacune la table de
hachage T0 à T3 respectivement. Pour chaque Ti, la profondeur est PG=3.
Initialement, chaque Ti a déjà 8 paquets (PL=3) notés Pi,0 à Pi,7. Il y a une valeur et une place libre dans chaque
paquet.
On insère la valeur v = 49. Décrire les étapes de l’insertion, et préciser dans quelle Ti et quel paquet est insérée
la valeur 49.
EXERCICES DE RAPPEL
Exercice 6 (rappel): Hachage extensible
On considère une base de données contenant la relation Personne (nom, prénom, ville). On veut indexer les personnes sur
l’attribut ville. La relation contient 11 villes différentes dont les codes sont 1, 4, 5, 7, 10, 12, 15, 16, 19, 21, 32. Pour cela,
on construit une structure de hachage extensible contenant une entrée pour chacune des 11 valeurs.
1) Initialement, on veut construire une table de hachage avec suffisamment de place pour contenir les 11 valeurs. Avec au
plus 4 valeurs par paquets, combien faut-il de paquets au minimum? Quelle doit être la taille minimale du répertoire
pour atteindre ces paquets ?
3
UPMC – UFR 919 – Master d’informatique M1 BDR page 4
2) Dessiner la table de hachage, nommée T1, après avoir inséré les 11 valeurs. Représenter le répertoire avec le nom des
paquets qu’il contient et sa profondeur globale. Représenter chaque paquet avec les valeurs qu’il contient et sa
profondeur locale.
3) Expliquer pas à pas comment retrouver le paquet contenant la valeur 7.
4) Insérer 13
5) Insérer 20
6) Insérer 29
7) On considère la table obtenue. Donner un exemple de plus petit ensemble de valeurs à supprimer pour obtenir une
division par 2 du répertoire.
4
UPMC - UFR 919 – Master d’informatique - 4I803
TD Optimisation de requêtes
Notations et conventions
Dans tous les exercices, on suppose que la distribution des attributs est uniforme. Les attributs sont tous indépendants les
uns des autres.
On s’intéresse au coût des opérations en termes de quantité d’accès aux données. L’unité de coût est soit la page
(exercices 1 et 2), soit le nuplet (ex. 3).
Une opération (sélection, projection, jointure) qui accède à une table stockée dans le SGBD a un coût.
Une opération de sélection (ou projection) qui accède au résultat d’une requête R ne rajoute pas de coût supplémentaire car
on peut évaluer la sélection (ou la projection) sur chaque nuplet résultant de R, sans accéder à aucune autre donnée de la
base.
Le coût de la jointure notée A ⋈ A.a=B.a B représente la quantité d’accès à la relation B nécessaire pour évaluer la
jointure.
Si B n’est pas une table de la base mais une requête, alors on stocke B comme une table temporaire dans le SGBD avant
d’effectuer la jointure.
Le nombre de pages d’une relation est P(A) = card(A)/10 car on suppose qu’il y a 10 nuplets par page, quelle que soit la
relation. On néglige le coût des opérateurs traités en pipeline.
Question 1 : On dispose des index non plaçants suivants :
Livre(numL), Livre(prix),
Stock(numL), Stock(quantité)
Etape 2 : trier E1 sur numL et l’écrire temporairement dans T, puis calculer E2 = σ prix=10 (T ⋈ Livre ).
Etape 3 : trier E2 sur numM puis calculer R1 = titre,ville σ ville<>’Paris’ (E2 ⋈ Magasin )
Soit la requête :
select *
from R, S
where a = c and b =1
Pour chaque question, énumérer tous les plans équivalents (notés P1 à P4) et calculer leur coût. Pour cela, représenter un
plan d’exécution sous la forme d’un arbre d’opérateurs. Donner le coût et la cardinalité de chaque opérateur de l’arbre,
donner le coût total de l’arbre.
1) Il y a seulement un index sur R.a et un index sur R.b,
2) Il y a seulement un index sur S.c
3) Il y a seulement un index sur R.b et un index sur S.c.
UPMC – UFR 919 – Master d’informatique 4I803 page 3
Exercice 3 : Optimisation de requêtes de sélection
Soit le schéma relationnel décrivant l'organisation d'un laboratoire en départements contenant des employés et
des projets.
Emp (Enum, salaire, age, Dnum)
Dept (Dnum, Pnum, budget, statut)
Proj (Pnum, code, description)
Tous les attributs sont des nombres entiers sauf statut et description qui sont des chaînes de caractères. Les
attributs soulignés forment une clé. La clé de Dept est composée de deux attributs, (l'attribut Dnum seul n'est
pas une clé primaire de Dept).
La taille d'un n-uplet est respectivement de 20 octets pour Emp, 40 octets pour un Dept et 2000 octets pour Proj.
Le nombre de n-uplets par relation et respectivement de 20 000 pour, Emp, 5000 pour Dept et 1000 pour Proj.
La taille d'une page, sur le disque ou en mémoire, vaut 4000 octets. La fonction page(R) retourne le nombre de
pages contenant les n-uplets de R.
La distribution des valeurs des attributs est uniforme. Les attributs sont indépendants. Le domaine de l'âge des
employés est l'ensemble des nombres entiers de 20 à 69 inclus : {20, 21, …, 69}. Le domaine des budgets est
l'ensemble des multiples de 1000 inclus dans ]100 000, 600 000].
On suppose que tous les index sont des arbres B+. Un index sur l'attribut A est dit plaçant si les données sont
triées sur le disque dans l'ordre des valeurs de A. Un index sur l'attribut A est dit non plaçant si les données ne
sont pas triées sur le disque dans l'ordre de A.
L'estimation du coût des opérations repose sur le modèle suivant:
• Le coût d'une lecture séquentielle de la relation R est égal au nombre de pages de R.
• Le coût d'une sélection avec un prédicat pred de la forme a op v
où a est un attribut de type entier et op est l'opérateur = (égal) , < (inférieur à) ou < (supérieur à)
coût( σ pred (R) ) = card(σ pred (R)) si l'attribut a est indexé par un index non plaçant,
coût( σ pred (R) ) = page(R) * card(σ pred (R)) / card(R) si l'attribut a est indexé par un index plaçant,
3) Pour chaque relation (Joueur, Club et Finance) estimer le nombre de nuplets qui sont sélectionnés après avoir traité les
prédicats de sélection et avant de traiter les jointures.
4) D'après la réponse à la question précédente, quel est l'arbre de jointure de coût minimum que l'optimiseur construit ?