Lösung 2. Übungsblatt

Werbung
Lehrstuhl für Praktische Informatik III
Prof. Dr. Guido Moerkotte
Email: [email protected]
Pit Fender
B6, 29, Raum C0.02
68131 Mannheim
Telefon: (0621) 181–2517
Email: [email protected]
Datenbanksysteme 2
Frühjahr-/Sommersemester 2013
1. Übungsblatt
06. März 2013
Aufgabe 1
In der Vorlesung wurde die dezentrale Deadlockerkennung in verteilten Datenbanksystemen thematisiert. Dabei werden Warteinformationen zwischen den Stationen ausgetauscht. In der Vorlesung wurde dieses Vorgehen am Beispiel von zwei Stationen
beschrieben. Zeigen Sie die Vorgehensweise, wenn der Zyklus sich über n Stationen
erstreckt (wobei gilt 1 ≤ n ≤ Anzahl aller Stationen). Wieviele Nachrichten müssen
ausgetauscht werden, damit ein Deadlock erkannt wird?
Lösung
Seien S1 . . . Sn die an einem Deadlock beteiligten Stationen mit den Transaktionen
T1 . . . Tn . Station S1 berechnet seinen lokalen Wartegraphen und erhält E → T1 →
T2 → E. Analog erhält S2 den Graphen E → T2 → T3 → E und so weiter. An Station
Sn lautet der Graph E → Tn → T1 → E.
Es liegt also ein Deadlock vor, an dem alle n Stationen beteiligt sind. Im Idealfall
sendet S1 nun seinen Graphen an S2 , wo aus dem lokalen Graphen und dem von S1
erhaltenen Graphen der Graph E → T1 → T2 → T3 → E konstruiert wird. Danach
übermittelt S2 seinen Graphen an S3 , wo der Graph E → T1 → T2 → T3 → T4 → E
entsteht.
Dies setzt sich fort bis zur Station Sn , die schließlich den Graphen E → T1 →
T2 . . . Tn → T1 → E erzeugt und damit den Deadlock aufdeckt. Insgesamt wurden
(n − 1) Nachrichten verschickt.
Im Worst Case sendet Sn−1 ihren Graphen an Tn bevor sie den Graphen von Sn−2
erhalten hat. Der Graph von Sn−1 hat die Form E → Tn−1 → Tn → E. Sn kann
daraus lediglich den Graphen E → Tn−1 → Tn → T1 → E erzeugen. Erst jetzt sendet
Sn−2 ihren Graphen an Sn−1 . Diese wiederum erzeugt daraus den geänderten Graphen
E → Tn−2 → Tn−1 → Tn → E und überträgt diesen an Sn .
Pn−1
Setzt sich dies so fort, kann Sn den kompletten Wartegraphen erst nach i=1
i
Nachrichten konstruieren. Dies enspricht einem asymptotischen Wachstum von O(n2 ).
Aufgabe 2
In der Vorlesung wurden anhand einer ER-Modellierung von Polyedern die Nachteile
relationaler Datenbanken diskutiert.
1
Geben Sie ein ODL-Schema für das Polyeder-ER-Modell aus der Vorlesung an. Verwenden Sie das relationship-Konstrukt zur Realisierung der Beziehungen. Benutzen
Sie den Datentyp float für die Koordinatenwerte. Die Polyeder sollen außerdem die
Attribute Material (string) und Gewicht (float) haben. Geben Sie allen Klassen eine
Extension.
Wenn Sie mehrere Alternativen zur Realisierung der Beziehungen erkennen, diskutieren Sie jeweils Vor- und Nachteile.
Lösung
class Polyeder (extent AllePolyeder)
{
attribute float Gewicht;
attribute string Material;
relationship set<Flaechen> seiten inverse Flaechen::seiteVon;
};
class Flaechen (extent AlleFlaechen)
{
relationship Polyeder seiteVon inverse Polyeder:: seiten ;
relationship set<Kanten> kanten inverse Kanten::kanteVon;
};
class Kanten (extent AlleKanten)
{
relationship set<Flaechen> kanteVon inverse Flaechen::kanten;
relationship set<Punkte> verbindet inverse Punkte::kanten;
};
class Punkte (extent AllePunkte)
{
relationship set<Kanten> kanten inverse Kanten::verbindet;
attribute float X;
attribute float Y;
attribute float Z;
};
Aufgabe 3
In einem 3D-Zeichenprogramm soll eine photorealistische Darstellung von einigen
der gespeicherten Objekte generiert werden. Dazu müssen zunächst für alle im Bildausschnitt vorkommenden Materialien die Texturen (Oberflächenbilder) geladen werden.
Aufgabe 3 a)
2
Gegeben sei das relationale Schema für die Polyeder aus der Vorlesung. Formulieren Sie
die folgende Anfrage in SQL: Ermittle alle Materialien jener Polyeder, die Punkte mit
”
X- und Y -Koordinaten zwischen 0 und 100 haben.“
Lösung
select
from
where
c.material
polyeder c, flaechen f, kanten k, punkte p
p.x between 0 and 100 and p.y between 0 and 100 and
(k.P1=p.PunktID or k.P2=p.PunktID) and
(k.F1=f.FlaechenID or k.F2=f.FlaechenID) and
f.PolyID=c.PolyID
3
Aufgabe 3 b)
Formulieren Sie die Anfrage in OQL, mit dem ODL-Schema aus Aufgabe 1. Nutzen sie
die relationships in Ihrem Schema aus, verwenden Sie z.B. möglichst einen Pfadausdruck!
Lösung
select
from
where
f.seiteVon.material
p in AllePunkte, k in p.kanten, f in k.kanteVon
p.X>=0 and p.X<=100 and p.Y>=0 and p.Y<=100
oder
select
from
where
p.material
p in AllePolyeder, f in p.seiten, k in f.kanten, v in k.verbindet
v.X>=0 and v.X<=100 and v.Y>=0 and v.Y<=100
Aufgabe 4
Wie lässt sich die Objektidentität in einer objektorientierten Datenbank implementieren? Denken sie dabei insbesondere an den Objektidentifikator. Wie kann man sicherstellen, dass ein einmal vergebener Identifikator (OID) nicht wieder verwendet werden
kann (dies muss während der gesamten Lebensdauer der Objektbank gelten)?
Lösung
Nach Kemper, Wimmer, Aufgabe 13.7
Prinzipiell gibt es zwei Ansätze:
• physische OIDs und
• logische OIDs.
Die physische OID kodiert den Speicherort des identifizierten Objekts. Das geschieht
über die ID des Speichermediums, der Seitenummer und Seitenposition. Die Seitenposition ist dann selbst ein Verweis auf den eigentlichen Speicherort innerhalb der Seite
(slotted page).
• Vorteil: Schneller Zugriff
• Nachteil: Bei einer Datenbankreorganisation kann der Speicherort sich ändern
(innerhalb der Seite wäre das kein Problem). In diesem Fall muss ein Platzhalter
auf der Seite mit einer Referenz auf den neuen Speicherort eingefügt werden,
damit die OID konstant bleibt. Dadurch entsteht eine weitere Indirektion (vgl.
TID Konzept, overflow record). Des weiteren lässt sich die Wiederverwendbarkeit
der OID nach erfolgter Löschung schwer verhindern.
4
Logische OIDs referenzieren den Speicherort nur indirekt und unterstützen Datenbankreorganisationen und Löschoperationen von vornherein. Die Auflösung der OID
erfolgt über eine Indirektion, bei welcher der aktuelle Speicherort des Objektes ermittelt wird. Dazu werden Indexstrukturen wie B-Bäume oder Hash-Tabellen verwendet.
Ein weiteres Verfahren für logische OID wurde als direct mapping bekannt. Hier wird
ein Objekt-Handle eingeführt, dessen Speicheradresse in der OID kodiert wird (somit
ist die OID mit einer Art physischer OID für das Objekt-Handle vergleichbar). Das
Handle selbst ist ein Zeiger, welcher die tatsächliche Position des Objektes speichert.
Handles werden in dem sogenannten Handle Segment abgelegt, welches als (erweiterbares) Array implementiert ist. Im Detail besteht die OID aus einer System-ID, einer
Seiten-ID, dem Slot auf der Seite und dem eindeutigen Abschnitt. Über die System-ID,
Seiten-ID und die Slot-ID wird somit das zuständige Handle im Handle Segment bestimmt. Der eindeutige Abschnitt ist nicht Teil der Referenz sondern verhindert eine
Wiederverwendbarkeit der OID. Er ist im Wesentlichen ein Zähler, der Aktualisierungen
in der Datenbasis unterstützt und ungültige Verweise (dangling references) von gültigen
zu unterscheiden hilft. Soll ein Handle wiederverwendet werden, wird dann einfach der
Zähler inkrementiert, wodurch die Eindeutigkeit der OID gewährleistet wird.
5
Herunterladen