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

On dispose de 2 SGBD : site 1 et site 2

  • site 1 @ora11 :
CONNECT E1234567/E1234567@ora11 -- remplacer 1234567 par votre numéro d'étudiant
-- vérifier la connexion en affichant le nom du SGBD :
SELECT sys_context('USERENV', 'SESSION_USER') FROM dual;  -- doit afficher oracle
  • site 2 @ora10 :
CONNECT E1234567/E1234567@ora10 -- remplacer 1234567 par votre numéro d'étudiant
SELECT sys_context('USERENV', 'SESSION_USER') FROM dual; -- doit afficher ora10

Données:

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

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

Installation

Créer les tables J,C,F (déjà fait lors du TME précédent)

    CONNECT ... @ora11
    @base3

Supprimer les joueurs J du site 1 (les joueurs seront stockés seulement sur le site 2)

    CONNECT ... @ora11
    DROP TABLE J;
    DESC J         -- doit répondre: "table inconnue"

Créer la table J des joueurs dans le site 2 (ora10)

    CONNECT ... @ora10  
    @base3
    DROP TABLE C cascade constraints;
    DROP TABLE F;

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

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

Vérifier le bon fonctionnement du lien

    CONNECT ... @ora11
    DESC J@site2

Construire le schéma global

    CONNECT ... @ora11
    CREATE VIEW J AS
    SELECT *
    FROM j@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 *
    FROM J j1, C c1
    WHERE j1.cnum = c1.cnum;
    @p5
R2 : jointure avec sélection
    EXPLAIN plan FOR
    SELECT *
    FROM J j1, C c1
    WHERE j1.cnum = c1.cnum
    AND j1.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 j1.licence, c1.division
    FROM J j1, C c1
    WHERE j1.cnum = c1.cnum
    AND c1.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 j1 associée à la relation stockée sur le site dans lequel oracle doit traiter la jointure (i.e. le site 2).

    EXPLAIN plan FOR
    SELECT /*+ driving_site(j1) */ j1.licence, c1.division
    FROM J j1, C c1
    WHERE j1.cnum = c1.cnum
    AND c1.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.1520249478.txt.gz · Dernière modification: 05/03/2018 12:31 par hubert