objektorientierte datenbanken prof. dr. stefan böttcher fachbereich 17 - informatik universität...
Post on 05-Apr-2015
108 Views
Preview:
TRANSCRIPT
Objektorientierte Objektorientierte DatenbankenDatenbanken
Prof. Dr. Stefan BöttcherFachbereich 17 - Informatik
Universität Paderborn
Einordnung von OODBEinordnung von OODB
• Trend zum Internet Trend zum Internet => HTML + CGI + Programmiersprache=> HTML + CGI + Programmiersprache=> HTML/XML + Java + Datenbank => HTML/XML + Java + Datenbank
• Trend zu Multi-Tier-Architekturen Trend zu Multi-Tier-Architekturen => Middle-Ware (Java/Corba) + => Middle-Ware (Java/Corba) + Frontend + Datenbank (Backend) Frontend + Datenbank (Backend)
• Trend zur OO-ModellierungTrend zur OO-Modellierung=> UML -> Java/C++ + Datenbank=> UML -> Java/C++ + Datenbank
2-Tier-Architektur mit 2-Tier-Architektur mit Common Gateway Interface Common Gateway Interface (CGI)(CGI)
CGI-Programm
BrowserProdukt-
datenbankHTML-
Seite
+ minimale Anforderung an den Client + Server: CGI-Programm in beliebiger Sprache+ Robust - Session-lose Kopplung: keine zwischenzeitliche Interaktion - hohe Serverlast- Sicherheitsrisiken
Client Server
ruft
generierteSeite
Eingabe
3-Tier-Architektur (mit Java und 3-Tier-Architektur (mit Java und DB)DB)
BrowserApplet
Produkt-datenbank
HTML-Seite
+/- geringe Anforderung an den Client +/- 2 Server: Java-Anwendung (portabel) und DB-Zugriff + Robust + Session-Konzept bei Kopplung: zwischenzeitliche Interaktion + geringere Serverlast als bei CGI Anwendungslast zwischen Client und Application-Server verteilbar + weniger Sicherheitsrisiken (durch Sandbox)
Client Application-Server DB-Server
RMI
Eingabe
Business-Logik (Java)
DB-Zugr.Programm
RMI
Ziele von Datenbanken Ziele von Datenbanken
• Daten gegen Verlust sichern (Persistenz)Daten gegen Verlust sichern (Persistenz)
• Atomizität von TransaktionenAtomizität von Transaktionen
• Isolation von TransaktionenIsolation von Transaktionen
• Konsistenzerhaltung persistenter DatenKonsistenzerhaltung persistenter Daten
• Effiziente AnfragebearbeitungEffiziente Anfragebearbeitung
• Benutzer-nahe ModellierungBenutzer-nahe Modellierung
Warum objektorientiert? Warum objektorientiert?
Software-Engineering verlangt: Software-Engineering verlangt:
• Wartbarkeit / Modularität (von Software)Wartbarkeit / Modularität (von Software)
• Anpaßbarkeit Anpaßbarkeit
• Erweiterbarkeit Erweiterbarkeit
• WiederverwendbarkeitWiederverwendbarkeit
OO Analyse -> OO Design -> OO Programm OO Analyse -> OO Design -> OO Programm
Zusätzliche Eigenschaften Zusätzliche Eigenschaften objekt-orientierter objekt-orientierter DatenbankenDatenbanken• Typkonstruktoren und komplexe Objekte,Typkonstruktoren und komplexe Objekte,
• Klassen, Methoden und Kapselung, Klassen, Methoden und Kapselung,
• Vererbung, Redefinition und späte Bindung,Vererbung, Redefinition und späte Bindung,
• Orthogonale Persistenz Orthogonale Persistenz
• Objekt-Identität Objekt-Identität
ODMG-Datenmodell ODMG-Datenmodell (Beispiel)(Beispiel)
Bestellung
Verk.bnrTeil
Bez.tnr
Kunde
Adr.knr
ODMG-Datenmodell ODMG-Datenmodell (Beispiel)(Beispiel)
class Bestellungclass Bestellung(extent Bestellungen)(extent Bestellungen){ attribute int bnr ; { attribute int bnr ; attribute string verkäufer ; attribute string verkäufer ; relationship Teil teil inverse Teil::best ; relationship Teil teil inverse Teil::best ; relationship Kunde ku inverse Kunde::best ; relationship Kunde ku inverse Kunde::best ; ... ...}}
ODMG-Datenmodell ODMG-Datenmodell (Beispiel)(Beispiel)
class Kundeclass Kunde(extent Kunden)(extent Kunden){ attribute int knr ; { attribute int knr ; attribute struct Adresse (int plz, sring ort, attribute struct Adresse (int plz, sring ort, string str, int hausnr) adresse ; string str, int hausnr) adresse ; relationship list<Bestellung> best relationship list<Bestellung> best inverse Bestellung::ku ; inverse Bestellung::ku ; ... ...}}
ODMG-Datenmodell ODMG-Datenmodell (Beispiel)(Beispiel)
class Teilclass Teil(extent Teile)(extent Teile){ attribute int tnr ; { attribute int tnr ; attribute string bezeichnung ; attribute string bezeichnung ; relationship set<Bestellung> best relationship set<Bestellung> best inverse Bestellung::teil ; inverse Bestellung::teil ; ... ...}}
ODMG-Datenmodell ODMG-Datenmodell TypkonstruktorenTypkonstruktoren
• Basistypen: int nr; string bezeichnung; ...Basistypen: int nr; string bezeichnung; ...
• Tupelkonstruktor: struct(int plz, string ort, ...)Tupelkonstruktor: struct(int plz, string ort, ...)
• Objektkonstruktor: Teil(int nr, string bez)Objektkonstruktor: Teil(int nr, string bez)
• Kollektionen:Kollektionen: Array<Kunde> Array<Kunde> kunden; kunden; List<Bestellung> List<Bestellung> best; best; Bag<Teil> Bag<Teil> teile; teile; Set<Bestellung> Set<Bestellung> best; best;
ODMG-Datenmodell: ODMG-Datenmodell: VererbungVererbung
class Eilbestellung extends Bestellungclass Eilbestellung extends Bestellung( extent Eilbestellungen )( extent Eilbestellungen ){{ attribute int attribute int priorität ; priorität ; attribute Date attribute Date deadline ; deadline ; ... ...}}
Erbt Attribute und Methoden von BestellungRedefinition von Methoden möglich
Persistenzkonzepte (1)Persistenzkonzepte (1)
Ortogonale PersistenzOrtogonale PersistenzTyp des Objektes ist unabhängig von Typ des Objektes ist unabhängig von seiner Lebenszeit seiner Lebenszeit => persistente und transiente Objekte gleich=> persistente und transiente Objekte gleich
(nicht: erben von einer Klasse PersistentObjekt)(nicht: erben von einer Klasse PersistentObjekt)
Persistenz-unabhängiger Code: Persistenz-unabhängiger Code: gleicher Code für persistente und transiente gleicher Code für persistente und transiente Bestellung => nur eine Klasse BestellungBestellung => nur eine Klasse Bestellung
Persistenzkonzepte (2)Persistenzkonzepte (2)
Persistenz durch explizites binden in die DB Persistenz durch explizites binden in die DB
db.bind( bestellung33 , hp5l ) ; db.bind( bestellung33 , hp5l ) ; Objekt-Ref. , globaler Name Objekt-Ref. , globaler Name
Persistenz durch Erreichbarkeit: Persistenz durch Erreichbarkeit:
bestellung33.teil.bezeichnung ;bestellung33.teil.bezeichnung ;
ist auch persistent in DBist auch persistent in DB
Transaktionen Transaktionen
Transaction-Objekte - Factory-Idee
...Transaction txn ; try{ txn.begin() ; ... ; db.bind(...) ; ... db.lookup(...) ; ... ; db.delete( ... ) ; } catch( ODMGException e) { txn.abort() ; }txn.commit() ; ...
Transaktionen Transaktionen (Sperrkonflikte)(Sperrkonflikte)
read write upgrade
read o.K. - o.K.
write - - -
upgrade o.K. - -
upgrade-Sperre : jetzt read, später writeVermeidung von Deadlocks
Sperrdauer bis Transaktionsende
Anfragesprache OQLAnfragesprache OQL
Welches Teil hat Kunde nr 7 bestellt ? Welches Teil hat Kunde nr 7 bestellt ? select b.teil.bezeichnung select b.teil.bezeichnung from Bestellungen b from Bestellungen b where where b.ku.knr = 7b.ku.knr = 7
Wo wohnt der Kunde, der Teil 33 bestellt hat ?Wo wohnt der Kunde, der Teil 33 bestellt hat ?select struct (plz: ad.plz , ort: ad.ort)select struct (plz: ad.plz , ort: ad.ort)from Bestellungen bfrom Bestellungen bwhere where b.teil.tnr = 33 and b.teil.tnr = 33 and
b.ku.adresse = ad b.ku.adresse = ad
Joins in kommerziellen OODBMS nicht unterstütztJoins in kommerziellen OODBMS nicht unterstützt
Sprach-Bindings Sprach-Bindings (z.B. Java-Binding, C++-(z.B. Java-Binding, C++-Binding)Binding)
Idee: Nur 1 Sprache für ProgrammiererIdee: Nur 1 Sprache für Programmierer
C++ - Binding: z.B. Templates für List, Set, ...C++ - Binding: z.B. Templates für List, Set, ...
Java - Binding: Java - Binding: erweitert java.util.List und java.util.seterweitert java.util.List und java.util.setrelationships, Schlüssel, Extents werden relationships, Schlüssel, Extents werden nicht vom ODMG-Java-Bindung unterstützt,nicht vom ODMG-Java-Bindung unterstützt,
aber: z.B. Poet-JavaODMG bietet Extents anaber: z.B. Poet-JavaODMG bietet Extents an
Effizienz von relationalen Effizienz von relationalen im Vergleich zu OO-im Vergleich zu OO-DatenbankenDatenbanken
Vorteile von OODBVorteile von OODB+ Pfadausdrücke in Queries+ Pfadausdrücke in Queries+ gut für stark strukturierte Daten+ gut für stark strukturierte Daten+ keine Modellierungsbruch -> Effizienz+ keine Modellierungsbruch -> Effizienz
Vorteil von RDBMSVorteil von RDBMS+ große Mengen exakt gleichartiger, + große Mengen exakt gleichartiger, nicht unterstrukturierter Daten nicht unterstrukturierter Daten -> Standard-Anfrageoptimierung -> Standard-Anfrageoptimierung
Kompilierungskonzepte Kompilierungskonzepte (Java)(Java)
Precompiler Precompiler Options-Datei sagt, welche Klassen des Options-Datei sagt, welche Klassen des Java-Programms Persistenz-fähig sindJava-Programms Persistenz-fähig sind
(z.B. Poet)(z.B. Poet)
Post-CompilerPost-CompilerOptions-Datei sagt, welche Klassen des Options-Datei sagt, welche Klassen des Java-Programms Persistenz-fähig sindJava-Programms Persistenz-fähig sind
(z.B. Versant)(z.B. Versant)
SystemeSysteme
Poet und VersantPoet und Versant+ nahe am ODMG-Standard + nahe am ODMG-Standard + High-level DB-Operationen+ High-level DB-Operationen+/- Plattenzugriff auf Objekt-Level+/- Plattenzugriff auf Objekt-Level
ObjektStoreObjektStore+/- etwas weiter entfernt vom Standard+/- etwas weiter entfernt vom Standard-/+ Plattenzugriffe auf Page-Level-/+ Plattenzugriffe auf Page-Level
O2O2+ erfüllt voll ODMG-Standard+ erfüllt voll ODMG-Standard- nicht mehr am Markt- nicht mehr am Markt
Zusammenfassung OODBZusammenfassung OODB• passen zu Internet/Middleware/OOPpassen zu Internet/Middleware/OOP
• verkürzen Entwicklungszeit / kein Modellbruchverkürzen Entwicklungszeit / kein Modellbruch
• sind mächtiger als relationale DBsind mächtiger als relationale DB
• sind meistens effizienter als relationale DBsind meistens effizienter als relationale DB
• sind standardisiert, Produkte sind verfügbarsind standardisiert, Produkte sind verfügbar
• geringerer Marktanteil als relationale DB,geringerer Marktanteil als relationale DB,aber steigende Tendenzaber steigende Tendenz
Kompilierungskonzepte Kompilierungskonzepte am Beispiel von Poet am Beispiel von Poet (Java)(Java)
Options-Datei ( ptjavac.opt in Version 5.1 bzw. ptj.opt in 6.1) sagt, welche Klassen des Java-Programms Persistenz-fähig sind
[schemata\my_dict1] ; so heisst das Dictionary (=Schema) oneFile = false
[databases\my_base1] ; so heisst die DatenbankoneFile = false
[classes\Liefert] ; daraus wird Dictionary-Info generiertpersistent = true ; diese Klasse ist persistent
Kompilierungskonzepte Kompilierungskonzepte am Beispiel von Poet am Beispiel von Poet (Java)(Java)
Precompiler (Version 5.1) Übersetzen von Java-Programmen mit Zugriff auf die Datenbank > ptjavac -classpath '%CLASSPATH%' *.java
Post-Compiler (Version 6.1) > javac *.java - compilieren mit gewöhnlichen Java-Compiler > ptj -enhance -inplace -create
Programme starten mit > java Bind poet://LOCAL/my_base1 obj1 > java Lookup poet://LOCAL/my_base1 obj1 > java Delete poet://LOCAL/my_base1 obj1
Beispielklasse: LiefertBeispielklasse: Liefert
class Liefert{ String lieferant, teil ; int preis, lieferzeit ; java.util.Date uhrzeit ;
public Liefert( String l, String t, int p, int z ) { lieferant=l ; teil=t ; preis=p ; lieferzeit=z ; } public String toString() { return lieferant + " " + teil + " " + preis + " " + lieferzeit + " um " + uhrzeit ; }}
Uni-BeispielUni-Beispiel
Angestellter
namepnr
Professor
Vorlesung
namevnr
Assistent
leiter
chef
vorl.
assis*
*
top related