Lösungen zu den Übungsblättern -

Werbung
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
Herunterladen