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