Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7)

Ähnliche Präsentationen


Präsentation zum Thema: "Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7)"—  Präsentation transkript:

1 Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7) zHeute: yTransaktionen, Sperren yODMG-OQL zLernziele: yAnwendung und Bewertung des ODMG-Standards Ralf Möller, FH-Wedel

2 Literatur

3 Geschachtelte Transaktionen Transaction txn = new Transaction(db); txn.begin();... txn.begin();... txn.begin();... txn.commit();... txn.abort();... txn.commit();

4 Automatische Synchronisation bei Abort zNormalerweise bleiben unter FastObjects-ODMG geänderte Objekte bei Transaktionsabbruch im Hauptspeicher bestehen zSynchronisation mit Hauptspeicherzustand auf Wunsch möglich:... Properties props = new Properties(); props.setProperty("restoreOnAbort", true); txn.setProperties(props);...

5 Sperren (Locks) zImplizite Sperren yVom System vergeben bei Zugriff auf Objekte yBei lookup Anforderung einer Lesesperre yBei Änderung Anforderung einer Schreibsperre yGgf. wartet Kontrollfluß bis Sperre verfügbar zExplizite Sperren yTransaction txn = new Transaction(); ytxn.lock(Object o, int level) xLevel: Transaction.READ, Transaction.WRITE, Transaction.DELETE yGgf. Ausnahmebehandlung falls Sperre nicht verfügbar

6 Beispiel Database db = new Database(); db.open(... ); Transaction txn = new Transaction( db ); Product product = (Product) db.lookup( "The Bug Zapper" ); System.out.println( product.getTitle() ); // The product object is now locked at the READ level. // This was done automatically by the database // manager. // If you want to ensure that the object is not being // read in another transaction, you can attempt to // obtain a WRITE level lock. try { txn.lock( product, Transaction.WRITE ); } catch ( LockNotGrantedException e ) { // the lock was not granted; handle // this as you wish }

7 Anwendung: Implementierung von Assoziationen zBeispiel: Mitarbeiter leitet Projekt zSei "leitet" eine N:1-Beziehung ohne Navigationsbeschränkung zEinführung von Instanzvariablen "leitet" mit Collection-Typ in der Klasse Mitarbeiter zEinführung einer Instanzvariablen "geleitet-von" mit Typ Mitarbeiter in der Klasse Projekt zAufgabe: Assoziierung von Mitarbeiter m1 und Projekt p1 zDie Instanzen m1 und p1 müssen gesperrt werden, bis wechselseitige Referenz etabliert zGenauer: Die Kollektion als Wert der Instanzvariablen "leitet" des Mitarbeiters m1 muß gesperrt werden

8 Anfragesprachen: ODMG-OQL zAusdrücke für atomare Werte ykonstante Zahlen: 1 ykonstante Zeichenkette: "Charly Brown" ykonstantes Zeichen: 'A' ybenanntes Objekt: krd zVergleiche y1 = 3 y"Charly Brown" < "Pig Pen" y'A' != 'a'

9 Operationen auf Zeichenketten zKonkatenation: + (oder ||) zElementtest: char in string zElementzugriff: string [ integer ] zTeilzeichenkette: string [ integer : integer ] zLänge einer Zeichenkette: count( string ) zWildcard-Vergleich: string like pattern, yMuster (pattern) kann * enthalten (steht für beliebige Teilzeichenkette)

10 Anfragen für Objekte zAttributzugriff: object. attribute-name (auch ->) zMethodenaufruf: object. method-name [param] yparam = ( [ parameter-name (, parameter-name)* ] ) zTypanpassung: ( class-name ) object zObjektkonstruktion: class-name ( [ attributes ] ) yattributes = att-name : att-value (, att-name : att-value )* zis_defined( object-query ) zis_undefined( object-query )

11 Anfragen für Tupel zAttributzugriff: tuple. attribute-name zTupelkonstruktion: struct (att-name : att-value (, att-name : att-value)* ) zBeispiele: ystruct(name: "Bond", firstname: "James") ystruct(name: p.name, firstname: p.firstname).name

12 Anfragen für Kollektionen zElementzählung: count( collection ) zElementtest: value in collection zElementextraktion: element( collection ) yParameter collection muß einelementig sein zVergleich: =, != zEliminierung von Duplikaten: distinct( collection ) zEinflachung: flatten( collection ) zQuantoren: (for all | exists) variable in collection : condition zAggregation: aggregate( collection ) yaggregate = max, min, avg, sum

13 Anfragen für geordnete Kollektionen zListenkonstruktion: list ( [ value (, value )* ] ) list ( [ value (.. value )* ] ) zArraykonstruktion: array ( [ value (, value )* ] ) array ( [ value (.. value )* ] ) zElementextraktion: first( list-val ), last( list-val ) list-val [ integer ] zTeillistenbildung: list-val [ integer : integer ] zKonkatenation: + zKonversion: listtoset( list-val )

14 Anfragen für ungeordnete Kollektionen zMengenkonstruktion: set ( [ value (, value)* ] ) zMultimengenkonstr.: bag ( [ value (, value)* ] ) zSonderform für Gruppierung: partition zOperationen: yVereinigung: union yMengendifferenz: except ySchnitt: difference zTests: | >=

15 Typen zZugriff auf Kollektionen und deren Elemente zIn Java: Elemente vom Typ "Object" zCast-Operation notwendig zMöglich: Deklaration von Typen in der Enhancement-Optionsdatei ptj.opt zSchlußfolgerungen über Typen yBeispiel: flatten(set(bag(T))) = flatten(bag(list(T))) = flatten(list(bag(T))) = bag(T)

16 Boolesche Ausdrücke zNegation: not zKonjunktion: and, andthen (Reihenfolge!) zDisjunktion: or, orelse (Reihenfolge!)

17 Select-From-Where-Anfragen zselect query from var_def (, var_def )* [ where query ] [ group by name: query (, name: query )* [ having (query (, query)* ) ]] [ order by query [ asc | desc ] (, query [ asc | desc ])* zvar_def = extent | var in extent | extent [as] var

18 Beispiel (1) zselect a from a in AuthorExtent where exists p in a.publication: count(p.keywords) > 10 zselect p.publkey from p in flatten(select a.publications from Authorextent a where a.name like "G*") zelement(select a from a in Authorextent where a.name = "Dittrich")

19 Beispiel (2) zmax( select p.accesses from p in PublicationExtent) zselect author1: a, author2: b, publication: p from PublicationsExtent p, a in p.getAuthors(), b in p.getAuthors() where a.name < b.name

20 Beispiel (3) zselect aucount, kwcount, partition from publ in PublicationExtent group by aucount: acount(publ.getAuthors()), kwcount: count(publ.keywords) having count(partition) > 1 zErgebnistyp: set(struct(aucount: integer, kwcount: integer, partition: bag(struct(publ: Publication))))

21 Zusammenfassung, Kernpunkte zGeschachtelte Transaktionen zSelbstverwaltete Sperren zObject Query Language

22 Was kommt beim nächsten Mal? zObjektrelationale Datenbanken


Herunterladen ppt "Objektorientierte Datenbanken zBeim vorigen Mal: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung FastObjects (t7)"

Ähnliche Präsentationen


Google-Anzeigen