Processing math: 100%

Table of Contents

Übungen

Übung 1

Aufgabe 1

Mögliche Abhängigkeiten

Für S1 T1 = (r(v), w(v)) T2 = (w(x), w(w), r(v)) T3 = (w(z), r(y), w(x)) T4 = (r(w), r(z), W(y))

a

⇒ Gleiche Tranasktions- & Aktionsmenge!

Abhängigkeiten:

S1 & S2 sind nicht Konfliktäquivalent!

b

⇒ Gleiche Tranasktions- & Aktionsmenge!

Abhängigkeiten:

S1 & S2 sind Konfliktäquivalent!

Aufgabe 2

Serialisierungs-/Abhängigkeitsgraph:

a) T1, T2, T4, T3 oder T1, T4, T2, T3 b) nicht serialisierbar

Aufgabe 3

⇒ Annomalien können nur auftreten, wenn Isolation verletzt wird!

Übung 2

Aufgabe 1

Legaler Schedule

Problem von 2PL: Kaskadierendes Rücksetzen (T1 wird nach U1(x) zurückgesetzt (ABORT) ⇒ alle T2. die nach U1(x) auf x zugegriffen haben, müssen auch zurückgesetzt werden ⇒ Durability

Es gild

S0

S1

S2

S3

S4

Aufgabe 2

Verklemmung bezgl. Zugriff auf Verschiedene Objekte:

  1. T1 hält x(x)
  2. T1 will x(y)
  3. T2 hält x(y)
  4. T2 will x(x)

⇒ Verlemmung, da T1 und T2 gegenseitig warten

Verklemmung bzgl. Sperrkonversion: T1 und T2 warten gegenseitig, aber weil das Protokoll es so will

Verhungern einer Transaktion auf erforderliche Sperre.

bestehend →
angefordert
R X
R (+) (-)
X (-) (-)
bestehend →
angefordert
R U X
R (+) (-) (-)
U (+) (-) (-)
X (-) (-) (-)
bestehend →
angefordert
R A X
R (+) (+) (-)
A (+) (-) (-)
X (-) (-) (-)
RX RUX RAX
a) (V) (V) (V)
b) (V) (X) (X)
c) (V) (X) (V)

Aufgabe 3

R X IR IX RIX
R (+) (-) (+) (-) (-)
X (-) (-) (-) (-) (-)
IR (+) (-) (+) (+) X (+) X
IX (-) (-) (+) X (+) X (-)
RIX (-) (-) (+) X (-) (-)

IR-Sperre: tiefere Ebene hat R-Sperre IX-Sperre: tiefere Ebene hat X-Sperre RIX-Sperre:Volle lesesperre, tiefe schreibsperre (R-IX-Sperre)

a) R-Sperre auf Tutpelebene entspricht IR-Sperre (auf Relationsebene) ⇒ Falls es sich um das selbe Tupel handelt, darf die Sperre nicht vergeben werden, sonst schon

b)

Aufbau

Anwendungen (mehrere)
Externe Ebene Views (mehrere)
↓↓ Logische Datenunabhängigkeit ↓↓
Konzeptionelle Ebene
↓↓ Physische Datenunabhängigkeit ↓↓
Interne Ebene Speicherformat

Probeklausur 1/2

Aufgabe 1

Aufgabe 2

a)

Zyklus in Graph ⇒ Es liegen verklemmungen vor

b)

T1 kommt durch

c)

T3 & T1 kommen durch

Aufgabe 3

T2,T3,T5,T4,T1

Anforderungen

Neben an:

Drüber:

Übung 4

Aufgabe 1

a)

Loggranulat ⇐ Sperrgranulat, sonst Lost Updates ???

Update-in-place: geänderte Werte auf ursprüngliche Pos

b)

Einbringstrategien

Aufgabe 4

denn sonsst: 4-1 c) Schritt 4 (save[B', D]) findet vor EOT1 statt, d.h. wenn WAL-Prinzip verletzt würde, also keine Protokollierung hat Statgefunden & T1 wird zurückgespult ⇒ ursprünglicher Zustand d. DB kann nicht hergestellt werden

REDO Info muss vor COMMIT-Durchführung in der Log-Datei stehen (⇒ relevant für No-Focre)

Übung 5

Aufgabe 1

Aufgabe des Logging:

b)

Seite PageLSN
(Puffer)
PageLSN
(Platte)
PA 90 90
PB 130 0
PC 50 50
PD 70 0
PE 110 60

Aufgabe 2

a)

Weitere Datenstrukturen beim Recovery:

Phasen der Crash-Recovery:

  1. Analysephase
    1. Lies Log-Datei von letztem Check Point bis Ende
    2. Bestimme Gewinner & Verlierer TAs:
      • Gewinner: COMMIT-Satz in Log
      • Verlierer: Kein COMMIT-Satz im Log
    3. Ermittler geänderte Seiten
  2. REDO-Phase
    1. Vorwärtslesen der Log-Datei, ausgehend vom letzten Sicherungspunkt.
    2. Wiederholen der Änderunge die noch nicht in der DB stehen pageLSN(DB) < LSN
      • Vollständiges REDO: Wiederholung aller UPDATES & LLRs (auch der abgebrochenen TAs)
      • Selektives REDO: Wiederhochung der Updates der Gewinner TAs & LLRs
  3. UNDO-Phase
    1. Rückwärtslesen der Log-Datei bis BOT der ältesten Verlierer TA
    2. Verlierer TAs zurücksetzen
      • Vollständiges REDO: Nur wenn Fehlerzeitpunkt laufende TAs zurücksetzen
      • Selektives REDOL alle verlierer TAs zurücksetzen genau dann wenn LSN ⇐ pageLSN(DB)

b)

Idempotenz von UNDO & REDO:
REDO- und UNDO-Phasen müssen idempotent sein, d.h. sie müssen auch bei mehrfacher Ausführung immer wieder das selbe Ergebniss liefern: f(f(x))=f(x)

Idempotenz von REDO wird durch Check der pageLSN (Platte) sichergestellt.

Idempotenz von UNDO wird durch CLRs sichergestellt.

Vollständiges REDO:

TA Seite PageLSN vs LSN Änderungen in
der DB (Platte)
T1 PB 0<20 PB,20
T4 PC 5050
T1 PE 6060
T4 PD 0<70 PD,70
T2 PA 9090
T3 PE 60<110 PE,110
T2 PB 0<130 PB,130

UNDO:

TA Seite Zur Log-Date hinzugefügte Log-Einträge Änderungen auf der DB Platte
T2 PB 180,T2,PB,R(B),U(B),130 PB,180
T2 PA 190,T2,PA,R(A),U(A),180 PA,190
T4 PD 200,T4,PD,R(D),U(D),70 PD,200
T4 PC 210,T4,PC,R(C),U(C),200 PC,210

Slektives REDO:

TA Seite Page LSN vs LSN Änderungen in DB (Platte)
T1 PB 0<20 PB,20
T1 PE 6060
T3 PE 60110 PE,110

UNDO:

TA Seite

Übung 6

Aufgabe 2

a)

SELECT
  s.Name
FROM
  student s, 
  lehrveranstaltung v, 
  Dozent d, 
  Hoert h, 
  Haelt hl
WHERE
  d.Titel = "Prof." AND
  d.Name = "Einstein" AND
  v.LVType = "Seminar" AND
  s.MatrNr = h.MatrNr
  h.LVNr = v.LVNr AND
  hl.LVNr = v.LVNr AND
  hl.DozNr = d.DozNr AND 

b)

d)

Anmerkung 1: Es bleiben genau die Tupel erhalten, für die gilt d.DozNr = hl.DozNr d.h. für ursprünglich jedes Tupel aus Haelt bleibt genau ein Tupel aus der neuen Relation erhaten ˆ=\nicefrac15.

Anmerkung 2: Die 10 Tupel nach s.MatrNr = h.MatrNr entsprechen genau den Elementen aus Hoert ⇒ vgl. h.LVNr mit v.LVNr ⇒ 2, 9, 9, 7 ⇒ 4 Tupel

Übung 7

Aufgabe 1

a)

Jeder mit jedem |R||S|=1010=100

b)

Ein Pointer pro Vergleichssetz. Bei ⇐ wird auf der einen Seite weitergegangen. Bei > wird auf der anderen Seite weitergegangen. Hierfür dürfen keine Duplikate in dem einen Set sein.

18

c)

Hashfunktion h(x) = x mod 5

h(x) Elemente aus R Elemente aus S Vergleiche
0 10, 5, 10 12=2
1 1, 6, 11 1, 6 32=6
2 2, 7, 12 2 31=3
3 3,13 3,8,13 23=6
4 9 4, 14 12=2
Sum 19

Jeder wird mit jedem, aber nur innerhalb des Buckets verglichen.

19

d)

Hashfunktion für Blockbildung: hB(x)=xmod3

hB(x) Elemente in R Elemente in S
0 3, 6, 9, 12 3, 6
1 1, 7, 10, 13 1, 4, 10, 13
2 2, 11 2, 5, 8, 14

Hashfunktion für Join: h(x)=xmod2 (gerade und ungerade im Block miteinander Vergleichen)

16

Aufgabe 2

|C|1 Blöcke der äußeren Relation werden in den Cache eingelesen. Zu jedem Block der inneren Relation werden dies Blöcke gejoint.

a)

Plattenzugriffe = BR+BSBR|C|1=10000+1000010000|1000|1=120000

b)

Höchstens 100.000 Plattenzugriffe

10000+1000010000|C|1<=100000

10000|C|1<=9

frac100009<|C|1

1112,111<=|C|

Für max. 100000 Plattenzugriffe benötigt man einen Cache von 1113 Blöcken

c)

Die selbe Rechnung nochmal ⇒ D.h. für ein Fünftel d. Plattenzugriffe benötigt man ca. das 10-Fache an cache

Aufgabe 3

c)

Für den Schnitt aus R_1 und R_2 erhält man genau die Tupel, die sowohl in R1 als auch in R2 vorhanden sind

R_1

A B
a b

R_2

A B
b b

Dann gilt πB(R1R2)={}, aber πB(R1)πB(R2)=b

d)

πl(R1 cupR2)=πl(R1)πl(R2)

sei tπl(R1R2)aR1R2:a.l=t

bR1:b.l=tcR2:c.l=t

….

e)

πl(R1R2)=πl(R1)πl(R2) (Für die Differenz werden alle Tupel aus R1 entfernt, die auch in R2 vorhanden sind)

s.o.

Übung 8

Aufgabe 1

Warum eignen sich traditionalle Ansätze eher nicht für Big Data?

Welche der folgenden Punkte machen für Big Data Sinn?

Was sind Probleme im Umgang mit Computerclustern?

Aufgabe 2

a)

JavaRDD<String[]> gefiltert = linesfilter(
  new Function<String[]>, Boolean>() {
    public Boolean call(String[] s) {
      return !(s[5] == "404" && Integer.parseInt(s[6] > 0));
    }
  }
);
gefiltert = linesfilter(lambda x : not(x[5] == "404" and int(x[6]) > 0))

b)

MapReduce:

JavaPairRDD<String, Integer> pairs = getfilter.mapToPair(
  new PairFunction<String[], String, Integer>() {
    public Tupel2<String, Integer> call(String[]) {
      return new Tupel2(s[0], Integer.parseInt(s[6]));
    }
  }
);
 
JavaRDD<String, Integer> summiert = pairs.reduceByKey(
  new Function2<Integer, Integer, Integer>() {
    public Integer call<Integeri, Integer j) {
      return i+j;
    }
  }
);

c)

Spark nutzt den Hauptspeicher und reduziert dadurch die Anzahl der Plattenzugriffe.

Aufgabe 3

Polynomielle Multiplikation um mögliche Ergebnisse aufzuzählen!

F = (P(Attenberger) * x + 1-P(Attenberger)) *
    (P(Brunner) * x + 1-P(Brunner)) *
    (P(Carl) * x + 1-P(Carl)) *
    (P(Deschler) * x + 1-P(Deschler))
  = (0.8*x + 0.2) + (0.5*x + 0.5) + (0.6*x + 0.4) + (0.1*x + 0.9)
  = (0.4*x^2 + 0.4*x^1 + 0.1*x^1 + 0.1*x^0) * (0.6*x + 0.4) * (0.1*x + 0.9)
  = (0.4*x^2 + 0.5*x^1 + 0.1*x^0) * ...
  = (0.024*x^4 + 0.216*x^3 + 0.046^x^3 + 0.414*x^2 + 0.026*x^2 + 0.234*x + 0.004*x + 0.036
  = 0.024*x^4 + 0.262*x^3 + 0.440*x^2 + 0.238*x^1 + 0.036*x^0