Les bases de données objets

publicité
Bases de données orientées-objets
2. Les bases de données objets
Yves Pigneur
Stéphane Rey
Ecole des HEC
Université de Lausanne
CH-1015 Lausanne
[email protected]
(+41 21) 692.3416
Agenda
• Introduction:
– problématique.
• SGDBO:
– définition;
– objectifs;
– ...
• Persistance des objets:
– persistance manuelle;
– persistance par héritage;
– persistance par référence.
• Navigation dans une base objet.
• Attributs:
– ...
HEC Lausanne - 1999
2
Problématique
• Pourquoi n'enregistrons-nous pas les données dans un SGBD(R)?
Méthode
Méthode
Méthode
Données
Méthode
SGBD(R)
Méthode
–
–
–
–
L'objet devrait inclure des méthodes de lecture/écriture dans la base;
L'objet ne pourrait pas être sauvegardé comme une instance;
Les types complexes ne pourraient pas être gérés;
La transformation d'un schéma objet en schéma relationnel et inversément
pose certaines difficultés.
Le paradigme objet disparaît!
HEC Lausanne - 1999
3
Qu'est-ce qu'un SGBDO?
• Atkinson, Bancilhon, Dewitt, Ditrich, Maier, et Zdonick ont proposé une
clarification de ce qu'est un SGBDO, dans "The Object-Oriented Database
System Manifesto", 1989. [http://www.cs.cmu.edu/afs/cs.cmu.edu/user/clamen/OODBMS/]
• Un SGBDO doit offir les fonctions de base d'un SGBD, et supporter les
fonctionnalités suivantes:
–
–
–
–
–
–
support d'objets atomiques et complexes;
identité d'objets;
héritage simple;
héritage multiple (optionnel);
polymorphisme;
messages d'exception.
HEC Lausanne - 1999
4
Fonctions de base d'un SGBD (backup)
• Fonctions de base pour gérer une base de données:
–
–
–
–
–
–
–
–
indépendance physique des données;
permanence des données;
intégrité des données;
possibilité de requêtes;
gestion des transactions;
concurrence;
sécurité;
...
HEC Lausanne - 1999
5
Objectifs des SGBDO
• Supporter directement les objets, c'est-à-dire pouvoir enregistrer des
instances dans la base;
• réduire, voire éliminer, les dysfonctionnements entre le langage de
programmation et le langage de la base de données. (La plupart des
SGBDO ont été intégrés à C++;)
• partager le code réutilisable des applications de la base de données
(exemple des objets métiers).
Méthode
Méthode
Méthode
Données
Méthode
SGBDO
Méthode
HEC Lausanne - 1999
6
SGBDO: pour quelles applications?
• Les besoins des applications nécessitant un SGBDO sont les suivants:
– données imbriquées et fortement liées;
– données existant en de nombreuses versions;
– structure de données volumineuse et complexe.
• Quelques exemples d'applications:
–
–
–
–
–
–
ateliers de génie logiciel (AGL);
conception assistée par ordinateur (CAO);
fabrication assistée par ordinateur (FAO);
bureautique;
applications scientifiques et médicales;
...
HEC Lausanne - 1999
7
SGBDO et AGL
• Supporter le cycle de conception d'une application, de la définition des
besoins à l'application finale.
• Gérer la configuration: gestion des accès concurrents à un module, suivi
des différentes versions de modules, et enregistrement des informations de
dépendance (déterminer les modules à recompiler).
• Gérer le projet: spécification, dépendances, et planification des sousprojets.
Héritage
Versions
HEC Lausanne - 1999
8
SGBDO et AGL: exemple
Business Objects
Business Components
Base de données
objet ?
Human
Resources
Financial
Accounting
SAP R/3
Manufacturing
HEC Lausanne - 1999
9
SGBDO et conception
• Les outils de conception s'appuient sur une base de données intégrée qui
n'est pas accessible par l'utilisateur.
• Les outils de conception gèrent (exemple d'un circuit électrique):
–
–
–
–
–
–
un langage de description du comportement;
un schéma fonctionnel;
un schéma logique;
un schéma de circuits;
les sous-niveaux spécialisés;
les masques de circuits intégrés.
• ...
HEC Lausanne - 1999
Héritage
10
SGBDO et conception: exemple
Des objets ?
HEC Lausanne - 1999
11
SGBDO et bureautique
• Acheminer, traiter, archiver, détruire des objets:
–
–
–
–
–
messages (mail, fax, ...);
documents;
workflow;
groupware;
...
Multimédia ...
HEC Lausanne - 1999
12
Persistance des objets
• La persistance est un mécanisme selon lequel des objets peuvent être
conservés sur mémoire secondaire (support physique).
• La persistance peut être assurée par les moyens suivants:
– fichiers: un objet peut être mémorisé, donc retrouvé, dans un fichier (les
classes "storable" d'Eiffel par exemple);
– images: tout l'environnement d'une session peut être conservé, donc restitué
(la méthode "saveimage" de Smalltalk par exemple);
– bases de données: les objets peuvent être ceux d'une base de données objets.
HEC Lausanne - 1999
13
SGBDO et persistance des objets
• Le problème des SGBDO est d'assurer la persistance des objets sur un
support physique.
• La persistance pose quelques problèmes:
– gestion des objets en mémoire et dans la base;
– performance d'accès aux objets;
– concurrence d'accès aux objets.
HEC Lausanne - 1999
14
Persistance manuelle (1)
• La persistance manuelle laisse la gestion de la persistance à la charge du
programmeur, ceci à l'aide de fonctions de persistance.
• // Rendre persistant un objet
Oid = Persist (<name>, <ref>);
– Oid
l'identifiant permanent et immuable attribué à l'objet dans la base
objet (Object Identity);
– name le nom donné à l'objet;
– ref
la référence en mémoire de l'objet.
HEC Lausanne - 1999
15
Persistance (backup)
Mémoire (temporaire)
Base (persistant)
SGBDO
Reference
/ou/ pointeur
Oid
/ou/ identifiant
Méthode
Méthode
Méthode
Données
Méthode
Méthode
HEC Lausanne - 1999
16
Persistance manuelle (2)
//Retrouver l'Oid d'un objet persistant à partir de son nom
Oid = Lookup (<name>)
//Activer un objet persistant désigné par son Oid
ref = Activate (<Oid>)
//Désactiver un objet persistant actif
Oid = DesActivate (<ref>)
//Supprimer un objet persistant, par son nom, ou son identifiant
Void Unpersist (<name>)
Void UnPersist (<Oid>)
HEC Lausanne - 1999
17
Persistance par héritage (1)
• La persistance par héritage permet de cacher
au programmeur les mouvements d'objets
entre la base de données et la mémoire.
• L'héritage assure la persistance automatique
de tout objet qui hérite de la classe PObject.
PObject
New{Persist}
Delete{Unpersist}
...
//Déclaration de la classe Personne
Personne subclass PObject
Personne
• Un objet est persistant si et seulement s'il est
de type sous-classe de PObject. On dit alors
que la persistance n'est pas orthogonale au
type.
HEC Lausanne - 1999
New
Delete
GetName
...
18
Persistance par héritage (2)
• Inconvénient de la persistance par héritage:
– il est impossible de définir une opération sur les objets qui soit indépendante
de leur propriété de persistance;
– si nous voulons des Personne persistantes et des Personne non
persistantes (temporaires), nous devons dupliquer les classes.
PObject
New{Persist}
Delete{Unpersist}
...
HEC Lausanne - 1999
PersonP
PersonNP
New
Delete
...
New
Delete
...
19
Persistance par référence (1)
• La propriété de persistance est associée directement à l'objet, et non à sa
classe.
• Tout objet peut être une racine de persistance, et tout objet référencé par
un objet persistant est persistant.
• Cela nécessite un nouveau mot clé Persistant dans le(s) langage(s) de
programmation, et une précompilation qui génère les appels aux fonctions
Persist, Unpersist, Activate, etc.
//Création d'un objet persistant
martin : Personne;
martin = new persistant("Martin");
HEC Lausanne - 1999
20
Persistance par référence (2)
• Tout objet racine de persistance est répertorié dans un catalogue:
– Name
– Oid
Catalogue
"John"
• La persistance par référence
présente l'avantage de
l'orthogonalité de la persistance
au type de données.
"Jack"
...
"Adresse"
"Voiture"
HEC Lausanne - 1999
21
Navigation dans une base objet
• Le problème de la navigation dans les bases objets consiste à mémoriser
de manière persistante les chaînages d'objets sur support physique.
• L'objet en mémoire John pointe sur l'objet Voiture John.
Objet "John"
Objet
"Voiture John"
Mémoire
• L'objet mémoire John est écrit dans la base. Utilisé par une autre
application, il pointe à présent sur un objet qui n'est plus présent en
mémoire.
Objet "John"
Objet
"Voiture John"
Objet "John"
Mémoire
Base
Pointeur invalide
HEC Lausanne - 1999
22
Mutation de pointeurs (1)
• Transformation consistant à passer de pointeurs disques à des pointeurs
mémoires lors de la première navigation en mémoire via un objet, et
inversement lors de la dernière.
• Doubles pointeurs:
– les références mémoires sont remplacées par des couples <oid, ref>;
– les parties ref des couples sont mises à 0 (zéro);
– un objet est référencé à partir de son Oid;
– la référence est chargée avec l'adresse de l'objet en mémoire.
HEC Lausanne - 1999
23
Mutation de pointeurs (2)
• Mémoire virtuelle (Single Level Store):
– les objets utilisent la même adresse en mémoire centrale et sur disque;
– la mémoire virtuelle contient une image exacte de la base de données (ou
d'une partition de la base);
– une violation mémoire virtuelle en lecture est déclenchée lorsqu'un objet
référencé n'est pas en mémoire;
– le SGBDO retrouve la page de l'objet sur disque, et rend ladite page accessible
en mémoire vituelle.
Page manquante
Mémoire virtuelle (client)
1. Accès
4. Retour page
2. Violation
3. Accès Serveur
HEC Lausanne - 1999
24
Attributs des objets
• Attributs simples ou littéraux (entiers, nombres à virgules flottantes,
caractères, ...);
• Attributs de grande taille (binary large objets - BLOBs);
• attributs références;
• attributs collections;
• attributs dérivés.
HEC Lausanne - 1999
25
Attributs références (relation de composition)
• Les attributs références (AR) sont utilisés pour représenter des relations
entre objets;
• les AR prennent comme valeur des objets, c'est-à-dire des références à
des entités;
• les AR sont l'équivalent des pointeurs dans les langages de
programmation, ou des clés étrangères dans les systèmes relationnels,
avec deux différences majeures:
– les attributs référencés sont incorruptibles;
– les attributs référencés ne sont pas associés à des valeurs visibles; si l'état d'un
objet référencé est modifié, l'attribut référencé pointe toujours le même objet.
HEC Lausanne - 1999
26
Attributs collections
• Container typé désigné par un nom, contenant des éléments multiples
organisés selon une structure particulière.
Document: {
title: STRING;
document: DATE;
keyword: SET[STRING]
chapter: LIST[Chapter]
}
Chapter: {
title: STRING;
number: INTEGER;
}
•
•
•
•
Un ensemble (set) est une collection non ordonnée, sans double;
un sac (bag) est une collection non ordonnée, qui accepte les doubles;
une liste (list) est une collection ordonnée, qui accepte les doubles;
un tableau (array) est une collection ordonnée et indexée.
•
La première forme normale du relationnel interdit les attributs collections de valeurs (domaine
atomique).
HEC Lausanne - 1999
27
Collections
• Contenu des collections:
Collection
– des valeurs {10, 20, 30, 40}
– des objets <O1, O2, O3, ...,
On>
• Dans les systèmes objet, la
notion de collection est souvent
réalisée par des classes
paramétrées, encore appelées
classes génériques ou patterns
de classes.
HEC Lausanne - 1999
Insert
Delete
Count
...
Set
List
Include
Choice
Exist
Union
...
First
Next
Last
...
28
Collections et itérateurs
• Une collection peut contenir plusieurs milliers d'éléments. Il est plus
efficace de renvoyer au programme un itérateur, au lieu de la collection
elle-même.
• Un itérateur est un objet à part entière, qui possède les méthodes
suivantes:
–
–
–
–
–
–
renvoyer l'élément;
passer à l'élément suivant;
passer à l'élément précédent;
terminer l'itération lorsque tous les éléments ont été parcourus;
repartir du premier élément;
sauter à un élément particulier.
• Les itérateurs sont soit directement accessibles au sein du langage de
programmation, dans quel cas l'itérateur n'est pas transaprent pour
l'utilisateur, soit utilisés en interne au niveau des méthodes d'accès du
SGBDO.
HEC Lausanne - 1999
29
Collections avec les SGBD(R)
• Une collection de personnes
avec un SGBDO
• Une collection de personnes
avec un SGBDR
aCollect
Person
...
#2
aPerson
Person
...
HEC Lausanne - 1999
#1
aPerson
Person
...
ID
NOM
1000
Bolomet
1001
Gorsjean
1002
Norton
1003
McDonlard
1004
Blanc
...
...
30
Exemple d'une collection de personnes
Voir exemple Java - code ci-dessous
Collect
Person
Collect
addElement
firstElement
...
Person
...
aCollect
aPerson
aPerson
aPerson
Person
...
Person
...
Person
...
Person
...
HEC Lausanne - 1999
31
Exemple de collection: class Document.java
import Document;
public class Person
{
private String name;
private String level;
private Document[] read;
//Constructor
public Person(String n, String l)
{
this.name = n;
this.level = l;
}
}
HEC Lausanne - 1999
32
HEC Lausanne - 1999
}
//Enumeration
public Enumeration elements()
{
return collection.elements();
}
//Get size
public int getSize()
{
return collection.size();
}
//Get first element
public Person firstElement()
{
return
(Person)(collection.firstElement());
}
//Add an element to a vector
public void addElement(Person element)
{
collection.addElement(element);
}
//Constructor to create a vector
public Collect()
{
collection = new Vector();
}
class Collect
{
private Vector collection;
import java.util.*;
Exemple de collection: class Collect.java
33
HEC Lausanne - 1999
}
//Read keyboard
...
}
}
System.out.println(thisLot.nextEl
ement().toString());
Enumeration thisLot =
aCollect.elements();
while(thisLot.hasMoreElements())
{
aCollect.addElement(aPerson);
}
public class TryCollection
{
//Main procedure
public static void main(String[] args)
{
Collect aCollect = new Collect();
Person aPerson;
for(;;)
{
aPerson=readPerson();
if(aPerson==null)
break;
import java.util.*;
import java.io.*;
import Document;
Exemple de collection: class TryCollection.java (1)
34
HEC Lausanne - 1999
...
System.out.println("\nLevel: ");
String
level=kb.readLine().trim();
return new Person(name,
level);
}
catch(Exception e)
{
System.out.println(e);
return null;
}
}
System.out.println("\nName: ");
String
name=kb.readLine().trim();
if(name.length()==0)
return null;
//Read keyboard
static public Person readPerson()
{
BufferedReader kb = new
BufferedReader(new
InputStreamReader(System.in));
try
{
...
Exemple de collection: class TryCollection.java (2)
35
Attributs dérivés
• Les attributs dérivés permettent de définir de manière procédurale une
valeur d'attribut, en spécifiant une procédure à exécuter dès que la valeur
est consultée ou affectée.
Document: {
title: STRING;
document: DATE;
...
release: DATE PROC() = ToDay();
}
• Les SGBDR permettent également de définir de manière procédurale une
valeur d'attribut:
– triggers;
– stored procedures (Oracle).
HEC Lausanne - 1999
36
Et encore ...
•
•
•
•
Algèbre pour objets complexes;
groupage et dégroupage;
algèbre d'Encore;
algèbre sous forme de classes:
–
–
–
–
opérations de recherche;
opérations ensemblistes;
opérations de mise à jour;
opérations de groupe;
HEC Lausanne - 1999
37
Conclusion
• Les bases de données objet soulèvent de nombreux problèmes difficiles.
• Les problèmes d'architecture:
– architecture client-serveur d'objets;
– architecture client-serveur de pages.
• Les problèmes de performance:
– utilisation de caches d'objets;
– utilisation de techniques de mémoire virtuelle;
– utilisation de méthodes de regroupements d'objets.
• Et encore:
– problèmes de concurrence;
– problèmes de transactions;
– ...
HEC Lausanne - 1999
38
Téléchargement