Überblick über das POET-Datenbanksystem Inhalt Einführung

Werbung
Inhalt
n
Überblick über das
POET-Datenbanksystem
n
n
Einführung
Architektur (Java Binding)
Java Binding (ODMG)
n
n
Kurzvortrag im Rahmen der Vorlesung
Datenbanksysteme II
n
n
Beispiel: Ferienhaus Datenbank
Einschränkungen
Konformität zum ODMG Standard
Fragen
FU-Berlin im WS03/04
1
by Jürgen Broß
2
Einführung
n
Architektur
Gründung der Poet Software GmbH 1993
n
n
n
Hauptsitz in Hamburg
Börsennotiertes Unternehmen
Zwei Produktreihen:
n
n
n
n
Binding Language
n
Katalogplattform: Poet X-Solutions
Datenbanksystem: FastObjects
n
n
Produktreihe FastObjects:
n
n
n
Unterstützt C++ und Java
Objektorientierte Datenbank
wird in verschiedenen Versionen angeboten (t7, e7, j2)
j2 in 100% Java geschrieben < 500KB (für eingebettete
Systeme)
n
Java Binding mit ODMG oder JDO
ODMG-Gruppe 2001 aufgelöst, JDO soll anstelle des ODMG
Java Bindings treten
Smalltalk Binding nicht unterstützt
3
Architektur
n
4
Architektur
Java Binding (postprocessing)
n
Java source file
Dictionary
n
javac
Java class file
ptj –enhance
n
Property file
ptj.opt
n
Java enhanced
class file
dictionary
enthält alle Informationen über die Struktur der persistenten
Klassen
‡ Klassenschema
kann verschiedene Versionen von Klassen verwalten
teilt der DB mit, wie Klassen gelesen und geschrieben
werden müssen
Database
5
6
1
Architektur
n
Architektur
Datenbank
n
n
n
n
n
n
n
ist ein Verzeichnis des Dateisystems
enthält hauptsächlich die beiden Dateien
objects.dat und objects.idx
Datenbank & Dictionary
n
n
Dictionary ist auch eine DB, also auch ein Verzeichnis
(_objects.dat, _objects.idx)
Ein Dictionary kann von mehreren Datenbanken benutzt werden
objects.dat ‡ enthält persistente Objekte
objects.idx ‡ enthält Indexinformationen
Name der Datenbank entspricht Namen des Verzeichnisses
Objekte werden in kanonischer Form in der DB abgelegt
n
n
n
Dictionary
Plattformunabhängigkeit
Anwendungen in unterschiedlichen Bindings können auf die
gleiche DB zugreifen
proprietäres Format (andere Implementierungen können nicht
auf DB zugreifen)
Datenbank
Datenbank
Datenbank
7
Architektur
n
Datenbank
n
n
n
Objektnetzwerk
Persistance by reachability
(unabhängig von Sichtbarkeit)
Wurzelobjekte werden mit
eindeutigem Namen an
Datenbank gebunden
Interface Database {
…
public void bind(Object o, String name);
public Object lookup(String name);
…
}
n
8
Architektur
n
Objektnetzwerk
Transaktionen
n
n
RDBMS
OODBS
Erstellen, Zugriff und
Modifikation von persistenen
Objekten nur innerhalb einer
Transaktion möglich
Transaktionen können
verschachtelt werden
(nicht mehr ODMG Standard)
‡ jede Transaktion hat ihren
eigenen Puffer
n
Alle Objekte, die von einem
persistenten Objekt
referenziert werden, müssen
persistenten Klassen
angehören
n
besonders nützlich bei GUI
Programmierung (Wizards)
txn.begin(); //Level 1
// some Product objects to work with . . .
Product firstProduct = . . .
Product secondProduct = . . .
Product thirdProduct = . . .
firstProduct.setTitle( “Ferrari" );
txn.begin(); //Level 2
secondProduct.setTitle( “Porsche" );
txn.begin(); //Level 3
secondProduct.setTitle( “Mercedes" );
thirdProduct.setTitle( "Stock Fishing" );
txn.commit(); //commit to transaction level 2
txn.commit(); // commit to level 1
txn.abort(); // abort to level 0
Verschiedene Threads können
sich eine Transaktion “teilen”
‡ eigene Synchronisation
notwendig
9
Architektur
n
n
n
Einfügen: persistance by reachability garantiert beim Einfügen,
dass alle referenzierten Objekte persistent werden
Löschen:
n
n
n
Architektur
Referentielle Integrität
n
n
Interface Constraints
public interface Constraints{
public void postRead();
public void preWrite() throws ConstraintViolation;
public void preDelete() throws ConstraintViolation;
}
ODMG Standard sieht garbage collection vor
Persistente Objekte, die nicht mehr referenziert werden oder per
Namen gebunden sind, werden automatisch gelöscht
Nachteil: FastObjects weicht hier vom Standard ab
‡ Programmierer muss sich selber um referentielle Integrität kümmern
Datenintegrität
n
10
Datenintegrität nicht durch Anweisungen oder Deklarationen im
Datenbankschema zu gewährleisten
‡Programmierer muss sich um Integrität der Daten kümmern
11
n
Beispiel
class Provider implements Constraints{
private SetOfObject houses;
private Address address;
private Date birthday;
transient int age; // don’t make it persistent
…
public void postRead(){
// berechne Alter aus aktuellem Datum und Geburtstag
}
public void preWrite() throws Constraint Violation{
// prüfe z.B. die Addressangaben auf Integrität
}
public void preDelete() throws ConstraintViolation{
Iterator iter = houses.iterator();
while(iter.hasNext())
Database.current().deletePersistent(iter.next()); //may cascade
}
}
12
2
Architektur
Architektur
FastObjects Sperr-Typen
Angeforderte Sperre
Gehalte
ne
Sperre
Rv
D
Rv
W
W
v
W
Dv
W
DvR
Exc
None
+
+
+
+
+
+
ReadvDe
lete
+
+
+
-
-
-
ReadvWr
ite
+
+
-
-
-
-
WritevWr
ite
+
-
-
-
-
-
Deletev
Write
-
-
-
-
-
-
DeletevR
ead
-
-
-
-
-
-
Exc
-
-
-
-
-
-
Standard
FastObjects
Transaction.READ
READvDELETE
n
Transaction.UPGRADE
WRITEvWRITE
n
Transaction.WRITE
DELETEvWrite
Transaction.DELETE
DELETEvREAD
n
n
Mapping der Sperr-Typen kann
dynamisch verändert werden
‡java.util.Properties
‡myTransaction.setProperties(props)
n
n
n
n
n
n
Ein mit einem eindeutigen Namen an die DB gebundenes
Wurzelobjekt ist nicht mehr notwendig
‡Objekte über Extents erreichbar
FastObjects-API stellt Extent Klasse zur Verfügung
Extents
txn.begin()spiegeln Vererbungsstruktur wieder
Extent ext = Der
new Extent(Person.class);
Beispiel:
Extent von Kunde ist eine Untermenge des
int size = ext.size();
Extents
von Person
while(ext.hasNext()){
… persistente Klasse hat standardmäßig einen Extent
jede
}
Extents
werden automatisch von FastObjects verwaltet
txn.commit();
‡ Verwaltung verschlechtert die Performance
‡ so wenig Extents wie möglich nutzen (in ptj.opt ausschalten)
13
14
Architektur
Indexstrukturen
n
Extents sind im ODMG 3.0 Standard nicht vorgesehen
FastObjects unterstützt Extents:
n
Architektur
n
Extents
ODMG Java
Indexe können auf Membervariablen
persistenter Objekte angelegt
werden
mehrdimensionale Indexe möglich
Indexsystem von FastObjects ist
erweiterbar
‡Drittanbieter können FastObjects
Service Provider Interface (SPI)
nutzen
Indexe werden werden in ptj.opt
deklariert
ptj.opt
/*
* CLASS
* Provider
*
*/
[classes\Provider]
persistent = true
schema = FerienhausSchema
hasExtent = true //optional
useIndexes = ProviderNameIndex
/*
* INDEX
* ProviderNameIndex
*
*/
[indexes\ProviderNameIndex]
class = Provider
members = name
n
Objektzugriffsverhalten (Access Patterns)
n
n
Nur sinnvoll bei Client-Server-Architektur
Zweischneidiges Schwert:
n
n
n
Lösung:
n
n
n
n
Bei Zugriff auf ein persistentes Objekt wollen wir nicht direkt alle
referenzierten Objekte mitübertragen ‡ Traffic sparen
Wir wollen nicht jedes referenzierte Objekt bei explizitem Zugriff
einzeln übertragen ‡ Verbindungsoverhead sparen
Lege mit Access Patterns fest welche Zugriffspfade in welcher Tiefe
genutzt werden
Gesamtzahl der zu übertragenden Objekte kann beschränkt werden
Access Patterns werden in der ptserver.cfg Datei angegeben
Zu beachten:
n
Access Patterns gelten für alle Versionen einer Klasse
‡ Access Patterns die sich auf Instanzvariablen beziehen, die eine
Version der Klasse nicht mehr besitzt werden für diese ignoriert
15
ptserver.cfg Datei:
[schemata\dict\accessPatterns]
usedPatterns = FriendsAndRelatives
maxPreloadObjects = 7
[schemata\dict\accessPatterns\FriendsAndRelatives]
pattern = *.Person.father:2, *.Person.mother:4,
*.Person.friends[0-$]:1
Architektur
father
friends
Architektur
n
Person
1
level 0
16
Objektauflösung
n
mother
n
Java: Objekte werden per Referenz modifiziert, Objektvariablen
enthalten Zeiger auf Speicheradresse
Wohin zeigt eine Objektvariable, wenn sie ein persistentes Objekt
referenziert?
n
Person
2
Person
3
Person
5
n
Person
4
level 1
n
friends
n
mother
FastObjects implementiert Objektvariablen als spezielle
Referenzobjekte, die die eigentliche Referenz kapseln
Referenzobjekte dienen als Proxy und liefern die eigentlichen Objekte
nur, wenn auf diese wirklich zugegriffen wird
Basistypen wie int, float, double, … werden nicht gekapselt und direkt
in den Speicher geladen
FastObjects behandelt folgende Typen als Basistypen:
n
n
father
Person
6
level 2
Person
7
Person
8
n
n
eindimensionale Arrays von Java-Basistypen
String, Date und eindimesionales Array von beiden
alle durch FastObjects definierten Collections (SetOfObject, BagOfObject,…)
com.poet.Blob
Person
7
17
18
3
Architektur
Architektur
n
//…
Product product = db.lookup(“Ferrari”);
//…
REFERENCE
Application variable
Product product
DIRECT
Data-member
String title
value: “Ferrari”
resolves
Jedes Objekt in der DB hat eine eindeutige ObjectID
zugeordnet
ObjectID: (<db>:<HVal>-<LVal>#<blkid>,<classid>
OBJECT
Person
DIRECT
Data-member
int year
value: 1999
REFERENCE
Data-member
Person manager
Objektidentität
n
OBJECT
Product
DIRECT
Data-member
String name
value: “Enzo”
resolves
19
Komponente
Beschreibung
<db>
Datenbankidentifikation innerhalb der Anwendung (ändert sich je
nachdem in welcher Reihenfolge versch. Datenbanken geöffnet
werden)
<HVal>
High-order bytes (Konstante für den gesamten Lebenszyklus des
Objekts)
<LVal>
Low-order bytes (Konstante für den gesamten Lebenszyklus des
Objekts)
<blkid>
Blockadresse des Objekts in der Datenbankdatei
<classid>
Interne Identifizierung für die zugehörige Klasse
20
OQL Einschränkungen
n
n
n
n
n
n
n
n
In SELECT keine kommagetrennte Liste möglich
‡ es können keine Strukturtypen selektiert werden
Nur zwei Mengendefinitionen in FROM Klausel möglich. Die
Mengen sind entweder Extents, eingebettete Mengen oder das
Resultat einer verschachtelten Anfrage
nur ein Extent in FROM Klausel
Kein DISTINCT Operator
Kein Zugriff auf Methoden der Objekte, also auch kein late
binding
GROUP BY nicht implementiert
Ausser COUNT keine weitere Aggregatfunktion
Keine Vergleichsoperatoren für Mengen (Inklusion,…)
21
4
Herunterladen