Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdr:tmejointurerepartie

Ceci est une ancienne révision du document !


TME Jointure répartie

L'objectif de ce TME est de comprendre l'évaluation d'une requête de jointure entre 2 relations qui sont situées sur 2 sites distincts.

  • définir le schéma global qui offre un accès transparent à des données de plusieurs bases,
  • formuler une requête répartie,
  • comprendre l'ordre et l'emplacement des opérations permettant d'évaluer une requête répartie (quel site traite quelles opérations?).

Scénario

cd <votre repertoire de travail>
tar zxvf /Infos/bd/public/tmeJointureRep.tgz 
cd tmeJointureRep
emacs tmeJR.sql &

On dispose de deux SGBD hébergés sur des sites différents

  • Le site 1 s'appelle ora11 :
-- se connecter en remplaçant 1234567 par votre numéro d'étudiant
CONNECT E1234567/E1234567@ora11 
-- vérifier la connexion en affichant le nom du SGBD :
SELECT sys_context('USERENV', 'INSTANCE_NAME') FROM dual; 
-- doit afficher oracle
  • Le site 2 s'appelle ora10 :
-- se connecter en remplaçant 1234567 par votre numéro d'étudiant
CONNECT E1234567/E1234567@ora10
SELECT sys_context('USERENV', 'INSTANCE_NAME') FROM dual; 
-- doit afficher ora10

Données:

  • Le site 1 ora11 contient les Clubs dans la table Club(cnum, nom, division, ville)
  • le site 2 ora10 contient les Joueurs dans la table Stagiaire(licence, cnum, salaire, sport, profil)

La couche BDR est implémentée sur le site 1 appelé ora11

Installation

Créer la table Club sur le site 1

    CONNECT ... @ora11
    @tableClub
    DESC Club

Créer la table Stagiaire sur le site 2

    CONNECT ... @ora10  
    @tableStagiaire
    DESC Stagiaire

Relier les sites : La couche BDR (site1) doit pouvoir se connecter au site 2

    CONNECT ... @ora11
    DROP DATABASE link site2;
    -- remplacer 1234567 par votre numéro d'étudiant
    CREATE DATABASE link site2 CONNECT TO E1234567 IDENTIFIED BY "E1234567" USING 'ora10'; 
 

Vérifier le bon fonctionnement du lien

    CONNECT ... @ora11
    DESC Stagiaire@site2

Construire le schéma global

    CONNECT ... @ora11
    CREATE VIEW Stagiaire AS
    SELECT *
    FROM Stagiaire@site2;

Requêtes réparties

Pour chaque requête, répondre aux questions

  • Où est traitée chaque opération (sélection, projection, jointure, …) ?
  • Quelles sont les données transférées entre les sites pendant l'évaluation de la requête ?
R1 : Jointure seule avec un transfert volumineux

Afficher les joueurs avec leur club

    CONNECT ... @ora11
    EXPLAIN plan FOR
    SELECT s.prenom, s.profil, c.division
    FROM Stagiaire s, Club c
    WHERE s.cnum = c.cnum;
    @p5
R2 : Jointure avec sélection
SET linesize 120
    EXPLAIN plan FOR
    SELECT s.prenom, s.profil, c.division
    FROM Stagiaire s, Club c
    WHERE s.cnum = c.cnum
    AND s.salaire > 59000;
    @p5

La sélection est-elle poussée sur le site 2 ?

R3 Jointure très sélective
  • R3a : Jointure très sélective et avec un transfert volumineux
    EXPLAIN plan FOR
    SELECT s.prenom, s.profil, c.division
    FROM Stagiaire s, Club c
    WHERE s.cnum = c.cnum
    AND c.ville = 'Paris';
    @p5
  • R3b : jointure très sélective et avec un transfert faible.

La directive driving_site prend en argument le nom de la variable s associée à la table Stagiaire stockée sur le site dans lequel oracle doit traiter la jointure. Autrement dit, Oracle doit traiter la jointure sur le site 2 contenant Stagiaire.

    EXPLAIN plan FOR
    SELECT /*+ driving_site(s) */ s.prenom, s.profil, c.division
    FROM Stagiaire s, Club c
    WHERE s.cnum = c.cnum
    AND c.ville = 'Paris';
    @p5
Proposer d'autres requête pour illustrer les optimisations de requêtes réparties vues en cours.

Divers

Aller vers BDR

site/enseignement/master/bdr/tmejointurerepartie.1520342893.txt.gz · Dernière modification: 06/03/2018 14:28 par hubert