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 Données:

  • Le site 1 contient les Clubs (table C),
  • le site 2 contient les Joueurs (table J)

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

Installation

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

    @base3

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

    CONNECT E1234567/E1234567@ora11
    DROP TABLE J;
    DESC J (doit répondre: "table inconnue")

Créer la table J des joueurs dans le site 2 (le serveur du site 2 s'appelle ora10)

    CONNECT E1234567/E1234567@ora10  --(avec votre propre numéro d'étudiant)
    @base3
    DROP TABLE C cascade constraints;
    DROP TABLE F;

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

    CONNECT E1234567/E1234567@ora11
    DROP DATABASE link site2;
    CREATE DATABASE link site2 CONNECT TO E1234567 IDENTIFIED BY "E1234567" USING 'ora10'; --(avec votre propre numéro d'étudiant)

Vérifier le bon fonctionnement du lien

    DESC J@site2

Ajouter un club dans une nouvelle ville. Ce club n'a que 10 joueurs ce qui permettra, par la suite, de poser une requête de jointure très sélective.

   INSERT INTO C VALUES( 6000, 'petit club', 2, 'Combourg');

Construire le schéma global

   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

    SELECT *
    FROM J, C
    WHERE j.cnum = c.cnum;
R2 : jointure avec sélection
    SELECT *
    FROM J, C
    WHERE j.cnum = c.cnum
    AND salaire > 59000

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
    SELECT *
    FROM J, C
    WHERE j.cnum = c.cnum
    AND ville = 'Combourg';
  • 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).

    SELECT /*+ driving_site(j1) */ *
    FROM J j1, C c1
    WHERE j1.cnum = c1.cnum
    AND ville = 'Combourg';
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.1520245799.txt.gz · Dernière modification: 05/03/2018 11:29 par hubert