Rami Swailem FH Gießen-Friedberg DB2 Lösungen Lösungen zu Datenbank und Informationssysteme A 1. Programmierung von Datenbankzugriffen Daten lesen mit JDBC Schreiben Sie eine Java-Anwendung, die die Tabelle Books in der Datenbank Azamon des Servers MMSERV ausgibt. Angezeigt werden soll eine Kopfzeile mit den Namen der in der Tabelle enthaltenen Spalten, sowie der Inhalt der Tabelle. 2. Daten lesen mit ADO.NET Schreiben Sie eine C#-Programm, das die Tabelle Books der Datenbank Azamon auf dem Server MMSERV ausgibt. Angezeigt werden soll eine Kopfzeile mit den Namen der in der Tabelle enthaltenen Spalten, sowie der Inhalt der Tabelle. Zum Lesen der Daten verwenden Sie einen DataReader. Es folgen zwei alternative Blöcke mit Aufgaben zu JDBC und ADO.NET. Sie entscheiden sich für eine der Techniken. 3. Interaktives SQL mit JDBC Schreiben Sie eine Java-Anwendung Interactive JDBC, mit der man beliebige SQL-Anweisungen (anfragende und modizierende Anweisungen) durchführen kann. Es soll möglich sein, in einem Dialog die Datenquelle zu wählen, mit der man sich verbinden möchte. Das Programm sollte etwa so aussehen wie das in Abb. 1 4. Datenbankexport mit JDBC DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Schreiben Sie eine Java-Anwendung, mit der man einen einfachen Datenbank-Export durchführen kann. Man gibt die Tabellen an, die man exportieren möchte und das Programm erzeugt zwei SQL-Skripten: eines, das die DDL-Anweisungen zum Erzeugen der Tabellen enthält, und eines, das die Insert-Anweisungen zum Füllen der Tabellen enthält. Zusatzaufgabe: Es sollen auch Anweisungen, die die referentielle Integrität betreffen, erzeugt werden. WS 06/07 Seite 1 Rami Swailem FH Gießen-Friedberg 5. DB2 Lösungen Interaktives SQL mit ADO.NET Schreiben Sie eine C#-Anwendung Interactive ADO.NET, mit der man beliebige SQLAnweisungen (anfragende und modizierende Anweisungen) durchführen kann. Es soll möglich sein, in einem Dialog die Datenquelle zu wählen, mit der man sich verbinden möchte. Das Programm sollte ähnlich aussehen wie das Java-Programm in Abb. 1 6. TableViewer mit ADO.NET Schreiben Sie eine C#-Anwendung TableViewer, mit der man eine beliebige Tabelle einer Datenbank durchblättern kann. Das Programm soll etwa so aussehen, wie in Abb 2. Abbildung 2: TableViewer Verwenden Sie für die Implementierung das DataSet und das DataGrid von ADO.NET. DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET WS 06/07 Seite 2 Rami Swailem FH Gießen-Friedberg B 7. DB2 Lösungen Transaktionenen und Nebenläufigkeit Serialisierbarkeit Geben Sie an, welche der folgenden Abläufe serialisierbar sind – mit Begründung (a) r1 (x); r2 (y); r1 (z); r3 (z); r2 (x); r1 (y); ja, nur lesende Zugriffe (nicht seriell, serialisierbar) (b) r1 (x); w2 (y); r1 (z); r3 (z); w2 (x); r1 (y); nicht serialisierbar, da Zyklus T1 T2 T3 (c) r1 (x); w2 (y); r1 (z); r3 (z); w1 (x); r2 (y); | {z } | {z } ja, keine Konflikte, denn Schreibende Zugriffe nun auf verschiedene Datenobjekte (nicht seriell, serialisierbar) (d) r1 (x); r2 (y); r1 (z); r3 (z); w1 (x); w2 (y); ja, keine Konflikte (nicht seriell, serialisierbar) (e) r1 (x); r2 (y); w2 (x); w3 (x); w3 (y); r1 (y); nicht serialisierbar, da Zyklus T2 T1 T3 (f) w1 (x); r2 (y); r3 (z); r1 (x); w2 (y); ja, keine Konflikte (g) r1 (z); w2 (x); r2 (y); w1 (x); w3 (z); w1 (y); r3 (x); kein Zyklus =⇒ serialisierbar DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET T2 T1 T3 w2 (x); r2 (y); r1 (z); w1 (x); w1 (y); w3 (z); r3 (x); T2 T1 T3 seriell immer serialisierbar kein Konflikt immer serialisierbar WS 06/07 Seite 3 Rami Swailem FH Gießen-Friedberg 8. DB2 Lösungen 2PL und Serialisierbarkeit Beweisen Sie folgende Aussage: Gegeben sei ein Ablauf, der dem 2PL-Protokoll entspricht. Dann ist ein äquivalenter serieller Ablauf derjenige, bei dem Transaktionen in der Reihenfolge ausgeführt werden, wie sie im gegebenen Ablauf den ersten Lock freigeben. · · · li (x) · · · wi (x)li (z)li (y) · · · r1 (x) · · · wi (y) · · · ui (x) · · · lk (z) · · · lk (x) , aller erste u im Ablauf li (x) · · · uj (x) Ti 9. li (z) · · · nur noch Transaktionen ! = Ti Deadlock & Wait-for-Graph Gegeben sei folgende Situation: Die Transaktionen T1 − T7 halten Sperren auf den Datenobjekten xi und warten auf die Freigabe der Sperren auf Datenobjekten xi entsprechend folgender Aufstellung. Transaktion T1 T2 T3 T4 T5 T6 T7 hat Lock auf wartet auf x2 x1 , x3 x3 , x10 x7 , x8 x8 x4 , x5 x7 x1 x1 , x5 x3 x4 , x9 x6 x6 x5 Zeichnen Sie einen Wait-for-Graph und ermitteln Sie Deadlocks. Dead-Lock: DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET T2 T4 T6 T1 T3 WS 06/07 T5 T7 Seite 4 Rami Swailem FH Gießen-Friedberg 10. DB2 Lösungen Auflösung des Deadlocks Verwenden Sie den Wait-for-Graph aus der vorherigen Aufgabe und wenden Sie den Algorithmus aus der Vorlesung an, um die Deadlocks zu erkennen und aufzulösen. T1 T2 T3 T4 T5 T6 T7 11. T1 0 0 0 0 0 0 0 T2 1 0 0 0 1 0 0 T3 0 1 0 0 0 0 0 T4 0 1 0 0 0 0 0 T5 1 0 1 1 0 0 1 T6 0 0 1 0 0 0 0 T2 T3 T4 T6 T7 T2 T3 T4 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 T6 T7 0 0 0 0 0 0 0 0 1 0 T7 0 0 0 0 0 1 0 • T1 läuft gut aber ist nicht interessant, weil sie an keinem Zyklus beteiligt ist (in der Spalte stehen Nullen). • T5 hat die meisten 1er, 1 bedeutet: steht im Konflikt =⇒ T5 durchstreichen • Deadlock erkannt, breche T5 ab. Phänomene Die Isolationslevel in SQL-Datenbanksystemen werden dadurch deniert, dass angegeben wird, welche Phänomene der Beeinflussung von Transaktionen garantiert ausgeschlossen werden. In dieser Aufgabe sollen Sie in Zweiergruppen arbeiten und den wechselseitigen Einuss zweier Transaktionen auf den verschiedenen Isolationsleveln erproben. Legen Sie in der Datenbank azamon eine Tabelle an und schreiben Sie mit JDBC oder ADO.NET kleine Programme, mit denen Sie die Phänomene erzeugen können. Jeder von Ihnen schreibt eine Transaktion, die auf dieselben Daten zugreift wie Ihr Partner oder Ihre Partnerin. Spielen Sie alle Kombinationsmöglichkeiten der Isolationslevel durch. import j a v a . s q l . ∗ ; DB2Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET public c l a s s I s o L e v e l { public s t a t i c void main ( S t r i n g [ ] a r g s ) { Connection con1 = null , con2 = null ; Statement stmt1 = null , stmt2 = null ; R e s u l t S e t r s 1 = null , r s 2 = null ; try { /∗ ∗ S c h r i t t 1 : T r e i b e r r e g i s t r i e r e n ∗/ C l a s s . forName ( " sun . j d b c . odbc . JdbcOdbcDriver " ) ; /∗ ∗ S c h r i t t 2 : Connection z u r Datenbank h e r s t e l l e n ∗/ WS 06/07 Seite 5 Rami Swailem FH Gießen-Friedberg DB2 Lösungen con1 = DriverManager . g e t C o n n e c t i o n ( " j d b c : odbc : azamon " , " d i s " , " Pass " ) ; con2 = DriverManager . g e t C o n n e c t i o n ( " j d b c : odbc : azamon " , " d i s " , " Pass " ) ; con1 . setAutoCommit ( f a l s e ) ; con1 . s e t T r a n s a c t i o n I s o l a t i o n ( Connection . TRANSACTION_SERIALIZABLE) ; con2 . setAutoCommit ( f a l s e ) ; con2 . s e t T r a n s a c t i o n I s o l a t i o n ( Connection .TRANSACTION_READ_COMMITTED) ; /∗ ∗ S c h r i t t 3 : Satement e r z e u g e n ∗/ stmt1 = con1 . c r e a t e S t a t e m e n t ( ) ; stmt2 = con2 . c r e a t e S t a t e m e n t ( ) ; /∗ ∗ S c h r i t t 4 : Anweisung d i r e k t a u s f u e h r e n ∗/ System . out . p r i n t l n ( " Satement wird a u s g e f u e h r t " ) ; stmt1 . executeUpdate ( " update konto10822 s e t Name=’ M u e l l e r ’ where ktoNr =1" ) ; r s 2 = stmt2 . executeQuery ( " s e l e c t ∗ from konto10822 " ) ; System . out . p r i n t l n ( " Statement 1 und 2 wurden a u s g e f u e h r t " ) ; /∗ ∗ S c h r i t t 5 : E r g e b n i s verwenden ∗/ while ( r s 2 . next ( ) ) { System . out . p r i n t l n ( r s 2 . g e t S t r i n g ( " ktoNr " ) + " " + r s 2 . g e t S t r i n g ( "Name" ) + rs2 . g e t S t r i n g ( " Saldo " ) ) ; } } catch ( E x c e p t i o n e ) { } f i n a l l y { try { /∗ ∗ S c h r i t t 6 : N i c h t mehr b e n o e t i g t e Resourcen f r e i g e b e n ∗/ i f ( r s 1 != null ) rs1 . close () ; i f ( stmt1 != null ) stmt1 . c l o s e ( ) ; i f ( con1 != null ) con1 . c l o s e ( ) ; } catch ( E x c e p t i o n e ) { } } } } DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Ergebnis: 1. MS Access berücksichtigt IsoLevel NICHT. 2. mySQL „out of the box “= myISAM als DB Engine bercüksichtigt IsoLevel NICHT. 3. mySQL mit INNODB als DB Engine berücksichtigt IsoLevel, aber manchmal z. B. Bei REPEATABLEREAD etwas eigenwillig WS 06/07 Seite 6 Rami Swailem FH Gießen-Friedberg DB2 Lösungen 4. PostgreSQL und Oracle berücksichtigen nur READ_COMMITTED und SERIALIZABLE. Achtung: PostgreSQL unterstützt keine READ_UNCOMMITTED erlaubt also nur SERIALIZABLE und READ_COMMITTED postgreSQL benutzt Mulivisioning, dies untersttzt keine Read Uncommitted, d. h. vom vorner herein ist READ_UNCOMMITTED nicht erlaubt 5. MS SQL-Server verhält sich Standard-konform. Pragmatische Vorgehensweise 1. Verwende READ_COMMITTED, wenn du Änderungen anderer sehen willst. 2. Verwende SERIALIZABLE, wenn du vor anderem unbeeinflusst sein willst. 3. Prüfe genau, wenn du spezielles Verhalten brauchst. 12. Eine endlose Transaktion Ein etwas abwegiges Beispiel soll die Konzeption der Isolationslevel veranschaulichen: Gegeben sei eine Relation PC(model, speed, ram, price) und wir nehmen an, eine Transaktion enthält eine Endlosschleife, die immerzu nachschaut, ob es mittlerweile einen PC mit 2 Gigahertz unter 1000 e gibt. Währenddessen nden andere Transaktionen statt, die mit verschiedenen Isolationsleveln laufen, etwa eine solche, die ein gesuchtes PC-Modell in die Relation einfügt. Pseudocode: begin transaction ; forever { sleep ( 1 sec ) ; s e l e c t ∗ from PC; untersuche ergebnismenge ; i f ( found ) goto ende ; } ende : commit ( ) ; ausgabe ; DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Erläutern Sie was passiert, wenn die endlose Transaktion in folgendem Isolationslevel läuft: (a) SERIALIZABLE Ergebnis: Unsere Transaktion endet nie, weil SERIALIZABLE bedeutet: „Ich möchte in keiner Weise durch andere Transaktionen beeinflusst werden“. WS 06/07 Seite 7 Rami Swailem FH Gießen-Friedberg DB2 Lösungen (b) REPEATABLE_READ Ergebnis: Unsere Transaktion endet, wenn ein neuer passender PC eingetragen wird. Denn REPEATABLE_READ bedeutet: „Ich möchte durch Phantom-Zeilen durch andere Transaktionen beeinflusst werden“. (c) READ_COMMITTED Ergebnis: Unsere Transaktion endet, wenn es einen passenden PC gibt. Sei es ein neuer oder geändert. Denn READ_COMMITTED bedeutet: „Ich möchte bestätigte Änderungen anderer Transaktionen sehen (d) READ_UNCOMMITTED Ergebnis: Unsere Transaktion endet auch dann, wenn eine andere Transaktion einen passenden PC erzeugt hat, auch wenn sie diese Änderungen später durch ein Rollback rückgängig macht. Also auch dann, wenn es einen passenden PC nicht wirklich gibt. Denn READ_UNCOMMITTED bedeutet: „Ich möchte alle Änderungen anderer Transaktionen sehen, auch wenn sie noch nicht bestätigt sind“. 13. Wirkung des Isolationslevels Wir gehen von folgender Relation aus: M(MId, Gehalt). In der Relation sind zwei Tupel gespeichert: (A, 1000) und (B, 2000). Nun werden folgende Transaktionen durchgeführt: Transaktion 1 : begin transaction ; update M s e t Gehalt = update M s e t Gehalt = commit ; Transaktion 2 : begin transaction ; s e l e c t sum ( Gehalt ) a s s e l e c t sum ( Gehalt ) a s commit ; Gehalt ∗2 where MId = ’A ’ ; Gehalt +100 where MId = ’B ’ ; G1 from M; G2 from M; Die erste Transaktion wird im Isolationslevel SERIALIZABLE durchgeführt. DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Berechnen Sie alle möglichen Werte für G1 und G2, wenn (a) die zweite Transaktion mit dem Isolationslevel SERIALIZABLE durchgeführt wird. (b) die zweite Transaktion mit dem Isolationslevel READ_COMMITTED durchgeführt wird. (c) die zweite Transaktion mit dem Isolationslevel READ_UNCOMMITTED durchgeführt wird. WS 06/07 Seite 8 Rami Swailem FH Gießen-Friedberg 14. DB2 Lösungen Phantome Gegeben sei ein Datenbankschmema mit zwei Tabellen T1 und T2, die jeweils drei Attribute a1, a2, a3 haben Betrachten Sie die SQL-Anweisung s e l e c t T1 . a1 , T2 . a1 from T1 , T2 where T1 . a2 = T2 . a2 and T1 . a3 = 5 and T2 . a3 = 7 Formulieren Sie eine SQL-Anweisung, die zu einem Phantom führen kann. 15. Snapshot-Isolation Erklären Sie, weshalb bei Snapshot-Isolation folgende Phänomene nicht auftreten können: (a) Dirty Reads (b) Lost Updates (c) Nonrepeatable Reads (d) Phantom Rows Ist Snapshot-Isolation mit dem Isolationslevel SERIALIZABLE identisch? 16. SERIALIZABLE Gegeben seien zwei nebenläuge Transaktionen T1 und T2 . Beweisen Sie folgende Aussage: Wird T1 im Isolationslevel SERIALIZABLE ausgeführt und T2 in einem beliebigen Isolationslevel, dann sieht T1 entweder alle Änderungen, die T2 gemacht hat oder keine. 17. READ COMMITTED DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Wir haben in der Vorlesung zwei Implementierungen des Isolationslevels READ COMMITTED kennengelernt: durch Sperrmechanismen und durch Multiversionierung. Konstruieren Sie ein Beispiel, bei dem die beiden Implementierungen unterschiedliche Ergebnisse haben. WS 06/07 Seite 9 Rami Swailem FH Gießen-Friedberg 18. DB2 Lösungen Statistische Auswertung Eine Transaktion für eine statistische Auswertung liest Daten aus der Datenbank, die im vergangenen Monat eingegeben wurden und erstellt aus diesen Daten einen Bericht. Welches Isolationslevel kann man für diese Transaktion verwenden? 19. Kompensatorische Transaktionen Geben Sie zu folgenden Datenbankänderungen an, ob es eine kompensatorische Transaktion gibt. Wenn ja, was müsste sie tun? (a) Erhöhung des Gehalts aller Professoren um 10%. (b) Erhöhung des Gehalts aller Mitarbeiter um 10%, sofern sie weniger als 3000 e verdienen. (c) Setze die Note von Student Max auf 2. (d) Füge einen Datensatz mit der Matrikelnummer (Primaärschlüssel) 65432 und den Angaben ’Max’, ’Schneider’ für Vorname, Name ein. (e) Setze einen Wert auf das Quadrat des bisherigen Wertes. DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET WS 06/07 Seite 10 Rami Swailem FH Gießen-Friedberg C 20. DB2 Lösungen Verteilte Datenbanken Unterschied horizontaler und vertikaler Zerlegung Beschreiben Sie den Unterschied zwischen horizontaler und vertikaler Zerlegung in einer verteilten Datenbank. Durch welche relationalen Operatoren werden die beiden Typen der Zerlegung in der Regel realisiert: beschreiben Sie die Zerlegung und das Zusammenführen der Daten als relationale Operationen. 21. Horizontale Zerlegung einer Tabelle Ein Unternehmen verwendet in drei Werken Teile. Die Teile mit den Nummern 1 bis 300 werden in Werk I verwendet, in Werk II werden die Teile mit den Nummern 301 bis 500, aber mit Ausnahme von 399 eingesetzt und in Werk III werden alle übrigen Teile verwendet. Konzipieren Sie die horizontale Zerlegung der globalen Tabelle Teile( TeileNr, Bez, LieferNr, Preis ) unter der Voraussetzung, dass in der Regel in der verteilten Datenbank im jeweiligen Werk auf die Teile zugegriffen wird, die dort verwendet werden. Zeigen Sie außerdem, wie die globalen Relation aus den Fragmenten entsteht. 22. Beispiel für Zerlegung Die Relation Angest( PersNr, Name, Gehalt, MgrNr, AbtNr, Anschrift ) soll so zerlegt werden, dass ein Fragment Namen und Anschrift, eines die Personalnummer des Vorgesetzten und die Abteilungsnummer enthält, schließlich soll das dritte Fragment Namen und Gehalt umfassen. Wie kann man die globale Relation aus den Fragmenten denieren? 23. Schema einer verteilten Datenbank DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Ein Softwarehaus möchte eine verteilte Datenbank für das Projektmanagement in ihren Geschäftsstellen Hamburg (HH), Darmstadt (DA) und München (M) einrichten. Die im Moment in der zentralisierten Datenbank verwendete Datenstruktur ist so aufgebaut: Angest ( PersNr , Name , Gehalt , AbtNr , A n s c h r i f t ) Abt ( AbtNr , Name , MgrNr , BereichNr , RegionNr ) P r o j e k t ( ProjNr , Name , Kontraktvolumen , ProjMgrNr , AbtNr ) L e i s t u n g ( PersNr , ProjNr , Stunden ) B e r e i c h ( BereichNr , Name ) Region ( RegionNr , Name ) WS 06/07 Seite 11 Rami Swailem FH Gießen-Friedberg DB2 Lösungen dabei sind Bereiche: Consulting (SC), Entwicklung (SE) und Rechenzentrumsbetrieb (RZ) Regionen: Hamburg (HH) mit den Bereichen SC, SE; Darmstadt (DA) mit dem Bereich SE und München mit den Bereichen SE und RZ. Die Zentrale der Firma ist in München, wo auch die Personalabteilung (HR) ist. Üblicherweise werden folgende Informationen benötigt: • Informationen über die Projekte in den Bereichen, wobei jedes Projekt mit Mitarbeiter aus der Region durchgeführt wird. • Informationen der zentralen Personalabteilung über alle Mitarbeiter. • Informationen der Abteilung über die Arbeit der Mitarbeiter an Projekten für die Rechnungsstellung. Erarbeiten Sie einen Vorschlag für die Zerlegung und Replikation von Daten, die der geschilderten Situation gerecht wird. Begründen Sie Ihre Vorgehensweise: • Erstellen Sie ein Entity-Relationship-Diagramm für die Datenstruktur. • Erstellen Sie das Design für Verteilung und Replikation. • Zeigen Sie wie die globalen Relationen aus den Fragmenten rekonstruiert werden können. • Überlegen Sie Anfragestrategien für die oben skizzierten typischen Anfragen in der verteilten Datenbank 24. Semijoin Betrachten Sie folgende Situation in einer verteilten Datenbank: An Site 1 ist die Tabelle T gespeichert, die Zeilen mit den ids 1, 3, 5, 8, 14 enthält. Jede Zeile ist 1024 Bytes lang, 4 Bytes für die id und 1020 Bytes für die Nutzdaten. An Site 2 ist die Tabelle S gespeichert, deren Zeilen analog aufgebaut sind, und die ids 1, 2, 4, 7, 14, 20 haben. An Site 1 soll der Join durchgeführt werden: select * from T, S where T.id = S.id. DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Spielen Sie die Schritte durch, die erforderlich sind, wenn man den Join mittels des Semijoins ermittelt. Zeigen Sie, welche (Teile von) Tabellen von Site 1 an Site 2 und umgekehrt übertragen werden müssen. Wieviele Bytes müssen bei diesem Vorgehen über das Netz übertragen werden? Vergleichen Sie den Wert mit der Vorgehensweise, dass die komplette Tabelle S an Site 1 übertragen wird und dort der Join durchgeführt wird. Semijoin WS 06/07 Seite 12 Rami Swailem FH Gießen-Friedberg DB2 Lösungen 1. Projektion von T auf Joinattribute id (an Standort 1) πid (T ) = Tp select id from T Spalte id von T übertragen nach Standort 2 5 × 4 = 20 Bytes. 2. Join von Tp mit S an Standort 2 Tp 1 S select S.id, data2 from Tp, S where TP.id = S.id <Zeichnung1> Zeilen von S mit übereinstimmenden id’s d. h. 2 Zeilen (id 1 und 14) übertrgen nach Standort 1 2048 Bytes 3. Join von T mit SR am Standort 1 T 1 SR select T.id, data2 from T,SR where T.id=SR.id Variante 1: übertrage S komplett an Standort 1 Variante 2: Semijoin 2048 Bytes Variante 3: Bloomjoin 25. 6144 Bytes 3074 Bytes (mehr als Variante 2?) Bloomjoin Gehen Sie wieder von der Situation der vorherigen Aufgabe aus, spielen Sie nun den Bloomjoin durch, bei dem Sie die Hashfunktion h(x) = x mod 7 verwenden. Berechnen Sie wieder, wieviele Bytes über das Netz übertragen werden müssen. {1, 3, 5, 0} ⊆ {0, 1, · · · , 6} Diese Menge im Computer repräsentieren → Bitvektor 0 1 2 3 4 5 6 1 1 0 1 0 1 0 1. Wähle Hashfunktion h und Zahl n · · · In Aufgabe vorgegeben h(x) = x mod 7, n = 7. Bilde Bitvektor Berechne Hashfunktion für jede id und schreibe Ergebnis in eine Menge {1, 3, 5, 0} DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Bitvektor: 0 1 2 3 4 5 6 1 1 0 1 0 1 0 schicke Bitvektor + Zahl n an Standort 2 WS 06/07 Seite 13 Rami Swailem FH Gießen-Friedberg DB2 Lösungen 0 1 2 3 4 5 6 2. 1 1 0 1 0 1 0 <Tabelle2> SR die Tabelle mit Zeilen mit ids 1,7,14. Übertrage SR nach Standort 1 3072 Bytes 3. Wie gehabt an Standort 1 T 1 SR 26. Vorgehen in einer verteilten Datenbank I Betrachten Sie folgende Datenbank: Mitarbeiter( MId, MName, WId, Gehalt) Werk( WId, Sitz) Setzen Sie voraus, dass die Tabelle Mitarbeiter horizontal fragmentiert ist nach der WId am jeweiligen Sitz des Werks. Beschreiben Sie Strategien für folgende Statements: • update Mitarbeiter set Gehalt = Gehalt * 1.05 an allen Standorten • update Mitarbeiter set WId = 12 where MId = 2314 Standort übergreifend • insert into Mitarbeiter values(4567, ’Schneider’, 12, 5000) DBMS muss erstmal die MId validieren. 27. Vorgehen in einer verteilten Datenbank II Verwenden Sie die Datenbank und ihre Verteilung aus der vorherigen Aufgabe. Setzen Sie zusätzlich voraus, dass folgende Replikationsstrategie eingeführt ist: Jedes Fragment hat 2 Replika: eines in der Zentrale in Frankfurt, das andere am Sitz des jeweiligen Werkes. Beschreiben Sie gute Suchstrategien für folgende Abfragen, wenn Sie sich in Hamburg benden: DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET • Alle Angestellten in Bremen • Durchschnittsgehalt aller Beschäftigten WS 06/07 Seite 14 Rami Swailem FH Gießen-Friedberg 28. DB2 Lösungen Vorgehen in einer verteilten Datenbank III Wir wandeln unsere Datenbank etwas ab: Mitarbeiter( MId, MName, AId, Gehalt, ...) Abteilung( AId, MgrId, Sitz, Status, ...) (MgrId ist die MId des Managers der Abteilung.) Die Abfrage, die uns interessiert, lautet: select * from Mitarbeiter M, Abteilung A where M.MId = A.MgrId and A.Status > 50 und wir wissen, dass etwa 1 Prozent der Mitarbeiter Abteilungsleiter sind und etwa die Hälfte der Abteilungen den gewünschten Status hat. Setzen Sie voraus, dass die Tabelle der Mitarbeiter in Frankfurt, die der Abteilungen in München gespeichert ist. Sie selbst sind in Hamburg. Die Tabelle Mitarbeiter hat 100.000 Zeilen à 4 KBytes, die Tabelle Abteilung 1.000 Zeilen à 4 KBytes. Die Schlüssel sind jeweils 4 Bytes lang. Für die Übertragungsrate im Netz nehmen wir 100 KBytes pro Sekunde an. Diskutieren Sie folgende Strategien und machen Sie Aussagen über die Übertragunskosten: • Transferieren Sie beide Tabellen nach Hamburg und berechnen den Join dort. • Transferieren Sie Abteilung nach Frankfurt und berechnen den Join dort, übermitteln Sie das Ergebnis nach Hamburg. • Berechnen Sie den Join mit der Strategie des Bloomjoin in Frankfurt und übermitteln Sie das Ergebnis nach Hamburg. • Berechnen Sie den Join mit der Strategie des Semijoin in München und übermitteln Sie das Ergebnis nach Hamburg. 29. Arten der Replikation DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET Erläutern Sie den Unterschied zwischen synchroner und asynchroner Replikation in verteilten Datenbanken. Nennen Sie Gründe, weshalb bei den heute verfügbaren DatenbankSystemen in der Regel die asynchrone Replikation verwendet wird? WS 06/07 Seite 15 Rami Swailem FH Gießen-Friedberg 30. DB2 Lösungen 2PC Absturz des Teilnehmers Im 2PC sieht der Ablauf (bei globalem Commit) für Teilnehmer und Koordinator (zusammengefasst) so aus: Koordinator: schreibe [prepare,T] in Log sende <prepare> an alle Teilnehmer nach Erhalt der (positiven) Antwort: schreibe [commit,T] in Log sende <globales Commit> an alle Teilnehmer nach Bestätigung: schreibe [eot,T] in Log Teilnehmer: nach <prepare>: schreibe [ready,T] in Log sende <stimme Commit> an Koordinator nach <globales Commit>: schreibe [commit,T] in Log sende <ack> an Koordinator Erläutern Sie, wie das 2PC-Protokoll verläuft, wenn der Teilnehmer in folgender Situation abstürzt: • vor Erhalt der Nachricht <prepare> • nach Erhalt von <prepare>, aber vor der Antwort an den Koordinator • nach Antwort <stimme Commit> an Koordinator • nach der Nachricht <ack> an Koordinator 31. 2PC Absturz des Koordinators Erläutern Sie, wie das 2PC-Protokoll verläuft, wenn der Koordinator in folgender Situation abstürzt: • vor dem Schreiben von [prepare,T] DB2_Loesungen.tex,v,1.1,January 7, 2007 at 17:22:41 CET • nach dem Senden von <prepare> an alle Teilnehmer • nach Erhalt der Antwort <stimme Commit> von einem Teil der Teilnehmer • nach dem Schreiben von [commit,T] • nach dem Senden von <globales Commit> an einen Teil der Teilnehmer • nach dem Senden von <globales Commit> an alle Teilnehmer WS 06/07 Seite 16