Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Zugriffsschicht: Satzverwaltung

Ähnliche Präsentationen


Präsentation zum Thema: "Zugriffsschicht: Satzverwaltung"—  Präsentation transkript:

1 Zugriffsschicht: Satzverwaltung
Kapitel 5 Zugriffsschicht: Satzverwaltung

2 Gegenstand des Kapitels
Datenmodell Performanz Datentypen: Satzmengen Operatoren: Operatoren auf Mengen Mengenorientiertes Datenmodell Anfragebearbeitung Optimaler Einsatz der logischen Ressourcen Datentypen: Sätze und Satzmengen Operatoren: Operatoren auf Sätzen Satzorientiertes Datenmodell Satz- u. Satzmengenverwaltung Vorschau auf zukünftig benötigte Daten Datentypen: phys. Zugriffsstrukturen auf Sätze Operatoren: seq. Durchlauf, gezielte Suche Satzzugriffsstrukturen Zugriffsschicht Vermeiden nicht aktuell benötigter Daten Transparenter homogener Speicher Datentypen: Seite = feste Anzahl von Bytes Segment = var. Anzahl von Seiten Operatoren: Anforderung/Freigabe von Seiten Segmente anlegen/öffnen/schließen Hauptspeicherseiten u. Segmente Segment- u. Pufferverwaltung Bevorratung von Daten im Hauptspeicher (rechtzeitige Bereitstellung vor Benutzung) Dateien Datentypen: Block = feste Anzahl von Bytes Datei = variable Anzahl v. Blöcken Operatoren: Dateien anlegen/öffnen/schließen Lesen/Schreiben von Blöcken Dateiverwaltung Schneller Transport zwischen Haupt- und Hintergrundspeicher Geräteschnittstelle Speicherstruktur Geräte-E/A

3 Seiten vs. Datensätze Seite: Orientierung an Gerätestrukturen
Gleichförmige und feste Größe Zugriff auf die einzelne Seite Bevorratung im Puffer aufgrund von internen Schätzmodellen Phys. Datensatz: Orientierung an Anwendungsbedürfnissen Ungleichförmige und zeitlich variable Größe Zugriff auf den einzelnen Satz unabhängig von Zugriffen auf andere Sätze im Kontext von Zugriffen auf weitere Sätze Bevorratung auf einer Seite und damit im Puffer aufgrund von Schätzmodellen oder Vorgaben der Anwendung

4 Satzzugriffsstrukturen
Phys. Datensatz: Orientierung an Anwendungsbedürfnissen Ungleichförmige und zeitlich variable Größe Zugriff auf den einzelnen Satz unabhängig von Zugriffen auf andere Sätze im Kontext von Zugriffen auf weitere Sätze Bevorratung auf einer Seite und damit im Puffer aufgrund von Schätzmodellen oder Vorgaben der Anwendung Satzzugriffstruktur: Satzmenge so organisiert, dass performanter Zugriff möglich ist, ggf. mittels zusätzlicher Hilfsstrukturen Abhängigkeit? ggf. Ballung: Anordnen von gleichzeitig oder unmittelbar aufeinander folgend zugegriffener Datensätze

5 Datenmodell Derselbe Satz kann mehreren Zugriffstrukturen angehören
Performanter Zugriff Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Physischer Datensatz 1.. 1 0.. 0.. 1.. 1..? repräsentiert durch gespeichert in 1 1..? Physische DB (seitenorientiert) enthält▶ Segment enthält▶ Seite 1 0.. 1 0.. Bei Strukturen mit Gemeinsamkeiten Anordnung Datensätze auf Seiten: Satzverwaltung

6 Seitenspeicherverwaltung
Kapitel 5.1 Seitenspeicherverwaltung

7 Aufgabe Freispeicherverwaltung: Bereitstellung einer Seite mit genügend freiem Speicher für die Speicherung eines Satzes Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Physischer Datensatz 1.. 1 0.. 0.. 1.. 1.. repräsentiert durch gespeichert in 1 1 Physische DB (seitenorientiert) enthält▶ Segment enthält▶ Seite 1 0.. 1 0..

8 Verwaltung freier Seiten (1)
Pro Segment gibt es eine Freispeichertabelle FT, mit FT(i) = noch verfügbarer freier Speicherplatz auf Seite i. FT muss dauerhaft gespeichert werden; hierzu werden die Einträge von FT auf Seiten abgebildet: Ein Eintrag von FT habe die Länge L. Die Seitengröße sei PS, und die Netto-Seitengröße NETPS (Seitengröße minus Größe des Seitenkopfes, der für Verwaltungsinformationen reserviert ist). Auf eine Seite passen k Einträge der Freispeichertabelle FT: Sei s die Anzahl der Seiten des Segments. Um alle Einträge von FT für die Verwaltung des freien Speichers von s Seiten zu speichern, benötigt man n Seiten:

9 Verwaltung freier Seiten (2)
Da Freispeicherseiten häufig durchsucht werden müssen, minimiere deren Zahl  stets L = 1 Byte! Folge: Der Speicher auf einer Seite wird in Gruppen von g = ⌈PS/28⌉ = ⌈PS/256⌉ Bytes eingeteilt und gruppenweise verwaltet. PS 256 B …. 4096 B g 1 B 16 B Unscharfe Verwaltung mit Verschnitt Scharfe Verwaltung

10 Ablage der Freispeichertabelle (1)
Option 1: FT belegt die ersten n Seiten des Segments. Nur geeignet bei statischer Segmentgröße s. Eine Erweiterung der FT ist nur durch Verschieben von Daten auf Seiten möglich („Freimachen“ der Seiten n+1 bis n+m, wenn m weitere Seiten für FT benötigt werden). Option 2: Äquidistante Verteilung von FT auf die Seiten ik+1, i=0,1,2,… Zu empfehlen bei dynamischem Wachstum von Segmenten.

11 Ablage der Freispeichertabelle (2)
Option 1: Freispeichertabelleseiten Nutzdatenseiten 25 60 15 20 05 60 ... ... 320 ••• Seite 1 Seite 2 Seite 3 Seite 4 Seite 50

12 Ablage der Freispeichertabelle (3)
Option 2: Freispeichertabelleseiten Nutzdatenseiten 25 60 15 20 05 60 ... ... 320 ••• ••• Seite 1 Seite 2 Seite 39 Seite 40 Seite 41

13 Freispeichertabelle  Seitentabelle
Bei indirekter Seitenadressierung verbunden mit einer indirekten Einbringstrategie kann FT an die Seitentabelle angebunden werden: FT(i) zusammen mit Tabelle(i). Vorteil: Insgesamt Verringerung der Schreibvorgänge für Seitentabelle und Freispeichertabelle. Nachteil: Verstoß gegen Schichtenprinzip; die Seitentabelle ist eine interne Datenstruktur der Segment-Verwaltung, die Freispeichertabelle eine interne Datenstruktur der Zugriffsschicht.

14 Freispeichertabelle  Seitentabelle
Segment S1 Segment S2 P1 P2 P3 ... Pk P1‘ P2‘ P3‘ ... Pn‘ Freispeicher-tabelle von S1 Freispeicher-tabelle von S2 164 50 60 ... 112 200 224 133 ... 91 B2 B4 B5 ... Bk+2 B1 Bk B3 ... Bk+3 Seitentabelle von S1 Seitentabelle von S2 B1 B2 B3 B4 B5 ... Bk Bk+1 Bk+2 Bk+3 ... Bk+n

15 Platzierung von Datensätzen: Grundsätze
Kapitel 5.2 Platzierung von Datensätzen: Grundsätze

16 Platzierung von Datensätzen auf Seiten
(Zugriffsstruktur-)gesteuerte Platzierung: Die Anwendung macht Voraussagen zur Art und Abfolge der Zugriffe. Die Zugriffsstruktur kontrolliert eigenständig die Platzierung ihrer Datensätze auf Seiten. (Zugriffsstruktur-)freie Platzierung: Die Anwendung macht keine Voraussagen zur Art und Abfolge der Zugriffe. Bestenfalls können interne Schätzmodelle eingesetzt werden. Die Zugriffsschicht platziert die Datensätze nach eigenständigen Kriterien. Nächstes Kapitel Dieses Kapitel

17 Eigenschaft von Datensätzen
Datensätze besitzen stets variable Länge: Die Anzahl der Felder und die Länge der Feldwerte können zwischen Sätzen variieren, können jeweils dynamisch wachsen und schrumpfen  Vergrößerung oder Verkleinerung des Datensatzes. Sicht der Zugriffsschicht: Nutzdatenbereich unstrukturiert (seine Verwaltung obliegt höheren Schichten), aber die Nutzdatenlänge muss angegeben werden. Je nach Art der Verwaltung kommen noch weitere Überhangfelder hinzu. L Nutzdaten

18 Verwaltung kleiner Datensätze
Kapitel 5.3 Verwaltung kleiner Datensätze

19 Datenmodell Kleiner Datensatz: Datensatz, dessen Länge kleiner als die Seitengröße ist. Jeder (kleine) Datensatz wird vollständig innerhalb einer Seite gespeichert. Eine Seite kann jedoch mehrere Datensätze enthalten. Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Kl. Physischer Datensatz 1 0.. 1.. 0.. 1.. 1.. repräsentiert durch gespeichert in 1 1 Physische DB (seitenorientiert) enthält▶ Segment enthält▶ Seite 1 0.. 1 0..

20 Freispeicher innerhalb einer Seite
Üblich: Kompakte Verwaltung des freien Speichers: Der gesamte freie Speicher einer Seite ist ein zusammenhängender Speicherbereich. Vorteil: Es steht immer der gesamte freie Speicher für die Allokation zusammenhängender Speicherbereiche zur Verfügung. Nachteile: Verschiebeaufwand bei Freigabe von Speicher, Umadressierung der Datensätze auf der Seite. Verwaltungsinformation im Seitenkopf: Falls der freie Speicher am Anfang oder Ende der Seite liegt, genügt entweder Anfangsadresse oder Länge des freien Speichers.

21 Freispeicher innerhalb einer Seite
Seitenkopf Satz A Sa tz B Satz C Sa tz D Satz E S atz F S atz G S atz H Satz K Satz L Satz M Seite 10

22 Kapitel 5.3.1 Einzelsatzablage

23 Forderungen an die Adressierung
Stabilität: Da die Adresse eines Satzes an sehr vielen Stellen in der Datenbasis vorkommen kann (z.B. in mehreren Zugriffsstrukturen), und oft gar nicht alle Stellen bekannt sind, an denen die Adresse eines Satzes vorkommt, sollte die Adresse eines Satzes über die Lebensdauer der DB relativ stabil bleiben. Flexibilität: Der Satz sollte auf den Seiten des Segments verschiebbar sein (innerhalb einer Seite und über Seitengrenzen hinweg), um bspw. Wachstumsschwankungen auffangen zu können.

24 Lösungsansätze für die Adressierung
Direkte Adresse eines Satzes: Nummer der Seite und Offset innerhalb der Seite, an dem sich der Satz befindet.  Entweder instabil oder inflexibel. Lösung: Vorschalten einer indirekten Adresse ( Stabilität), aus der die direkte Adresse zu ermitteln ist ( Flexibilität). Zu untersuchen: Einfachheit der Ermittlung versus Stabilitätsverhalten. TID LID PPP

25 TID (1) Einführung von seitenlokalen Tabellen.
Die Einträge der Tabelle werden als Slots bezeichnet. Sie enthalten die relativen Adressen (Offsets) der Datensätze auf der Seite. Die Slottabelle und deren Größe wird im Seitenkopf der Seite verwaltet. Eine Satzadresse ist ein Paar (Seitennummer, Slotnummer) und heißt Tuple identifier (TID). Für die Repräsentation von Slotnummern genügt meist 1 Byte; bei 32 bit-Satzadressen bleiben 24 bit für die Seitennummer.

26 TID (2) Seitenadresse Slotnummer 24 bit 8 bit 100 3600 Seitenkopf 10
Seitenkopf 10 ext.TID(Satz C) 5 Satz A Sa Satz C tz B Satz C Sa tz D Satz E S atz F S atz G S atz H Satz K Satz L Satz M Seite 10

27 TID (3) Für die Verschiebung eines Satzes innerhalb einer Seite wird nur der zu dem Datensatz gehörende Slot auf den neuen Offset des Satzes gesetzt. Der TID bleibt beim Verschieben eines Satzes innerhalb der Seite unverändert. Beispiel: Verschieben von Datensatz R1 innerhalb von Seite P123. Segment S4711 #Slots:6 P123 5 4 3 2 1 TID von Datensatz R1 P123 3 R1 R1

28 TID (4) Flexibilität: Wenn ein Satz von einer Seite verdrängt und auf eine andere Seite verschoben wird, soll sein TID unverändert bleiben. Hierzu wird ein sogenannter Stellvertretersatz auf der alten Seite eingeführt, der auf den neuen Speicherplatz des Satzes verweist. Der Stellvertretersatz muss natürlich kleiner sein als der verdrängte Satz, da sonst das Verdrängen des Satzes von der Ursprungsseite keinen Speichergewinn bringt. Beispiel: Satz R1 wird von Seite P123 auf Seite P504 verschoben.

29 TID (5) P504 2 P123 3 #Slots:6 5 4 3 2 1 R1 #Slots:4 3 2 1 R1 P123 3
Stellvertretersatz Segment S4711 TID von Datensatz R1 P123 3 #Slots:6 P123 5 4 3 2 1 Rückwärtsverweis und Nutzdaten von Datensatz R1 R1 #Slots:4 P504 3 2 1 = Stellvertreterbit R1 P123 3 = Verdrängungsbit

30 TID (6) Wird ein bereits verdrängter Satz von seiner jetzigen Seite erneut verdrängt, dann wird 1. eine neue Seite für den Satz gesucht, 2. der TID des Satzes auf der neuen Seite in den Stellvertretersatz auf der Ursprungsseite (Home page) des Satzes eingetragen. Die Home Page des Satzes wird anhand des Rückwärtsverweises ermittelt. Die Verweiskette bei mehrfacher Verdrängung eines Satzes bleibt so auf 1 Verweis beschränkt. Dabei kann es auch zu Zurückholen auf die Home Page kommen. Beispiel: Erneutes Verdrängen von Satz R1 auf Seite P345.

31 TID (7) P504 2 P123 3 #Slots:6 5 4 3 2 1 R1 #Slots:4 3 2 1 3 2 1 4
Segment S4711 P504 2 Stellvertretersatz TID von Datensatz R1 P123 3 #Slots:6 P123 5 4 3 2 1 R1 #Slots:4 P504 3 2 1 P345 3 2 1 4 #Slots:5 R1 P123 3 R1 P123 3

32 TID (7) P504 2 P123 3 #Slots:6 5 4 3 2 1 R1 P345 4 #Slots:4 3 2 1 3 2
Segment S4711 P504 2 Stellvertretersatz TID von Datensatz R1 P123 3 #Slots:6 P123 5 4 3 2 1 R1 P345 4 #Slots:4 P504 3 2 1 P345 3 2 1 4 #Slots:5 R1 P123 3

33 Bewertung des TID-Konzeptes
Vorteile: Jeder Datensatz wird mit maximal 2 Seitenzugriffen aufgefunden. Bei 10 % verdrängten Sätzen ergibt sich ein mittlerer Zugriffsfaktor von 1.1 Seitenzugriffen pro Satz. Nachteile: Ungünstig bei Seitenspalt-Verfahren, bei denen volle Seiten geteilt und die Hälfte der Datensätze auf eine neue Seite verschoben werden (Abhilfe: Zugriffsstruktur-Steuerung!). Langfristig instabil: Bei Löschen und Reorganisation ändern sich die TIDs, zur Anpassung müssen alle Vorkommen der alten TIDs in der Datenbasis gefunden werden. TID nur eindeutig im Segment. Fazit: Hohe Flexibilität, mittelmäßige Stabilität, schneller Zugriff.

34 logischer Identifikator (LID)
Logischer Identifikator von Datensatz R1 Langfristig stabiler Identifikator logischer Identifikator (LID) P123 3 TID Segment S4711 #Slots:6 P123 5 4 3 2 1 R1 Zuordnungstabelle

35 LID (2) Realisierungsvariante 1: Laufende Nummer
Vorteil: Der einfachste Weg, eindeutige Identifikatoren zu erzeugen, ist das Inkrementieren eines Zählers. Kurze LIDs (z.B. 32 bit): Die Größe der DB und damit die Performanz werden positiv beeinflusst. Mit 32 bit lassen sich 4 G Datensätze identifizieren Ausreichend für die meisten Anwendungen. Andernfalls Wiederverwendung von Identifikatoren (Fehlerquelle!) Lange LIDs (z.B. 64 bit): Vorrat verfügbarer Identifikatoren größer. Man kann es sich leisten, die LIDs gelöschter Datensätze nicht wiederzuverwenden.

36 LID (3) Realisierungsvariante 2: Strukturierte Identifikatoren
Sie enthalten Informationen über den Datensatz plus laufende Nummer. Beispiele: Wert eines Schlüsselattributs der logischen Ebene; Segment-, DB-, Typidentifikatoren; bei verteilter DB die Adresse des Rechners, auf dem der Datensatz erzeugt wurde. Vorteil: Informationen können bereits dem logischen Identifikator entnommen werden. Nachteile: Längere Identifikatoren, komplizierte Generierungsverfahren für Identifikatoren, i.Allg. wird nicht der gesamte Raum möglicher Identifikatoren genutzt.

37 LID (4) Varianten für die Realisierung von Zuordnungstabellen:
Geltungsbereich einer Zuordnungstabelle: eine Tabelle für die gesamte DB (sehr große Tabelle, TIDs müssen um Segmentnummer ergänzt werden) eine Tabelle pro Segment eine Tabelle pro Zugriffsstruktur. Speicherung von Zuordnungstabellen: Abbildung auf Seiten notwendig. Schnelle Suche: Speicherung sortiert oder über eine Hashtabelle.

38 Bewertung des LID-Konzeptes
Vorteile: Beim Verschieben/Löschen eines Satzes muss allein sein Eintrag in der Tabelle angepasst/beseitigt werden. Langfristig stabil: LIDs überleben Reorganisation der DB. Nachteile: Für gegebenen LID sind mindestens 2 Seitenzugriffe notwendig, um auf einen Satz zuzugreifen. Oft noch mehr: Bei Hashverfahren: Es können mehr als 2 Seitenzugriffe erforderlich sein. Problem des virtuellen Hauptspeichers. Eigene Transaktionstechniken für Zuordnungstabelle. Fazit: Höhere Zugriffskosten, hohe Stabilität, hohe Flexibilität.

39 PPP (1) LID-Konzept mit folgender Erweiterung:
Satzadresse ist Paar (LID, TID): TID verweist „mit hoher Wahrscheinlichkeit“ auf den Speicherplatz des Datensatzes. TID (und auch Paar) wird als Probable Page Pointer (PPP) bezeichnet. In den Slottabellen einer Seite ist in jedem Slot zusätzlich zum Offset der LID des Satzes gespeichert. Beim Erzeugen eines Datensatzes geht seine aktuelle TID in Zuordnungstabelle und PPP ein. Wird ein Datensatz verschoben, dann wird der TID in der Zuordnungstabelle angepasst. Dagegen: faule Anpassung der PPP bei deren Verwendung.

40 PPP (2) logischer Identifik. TID R1 345.208 P123 2
Zuordnungstabelle Segment S4711 logischer Identifik. P123 TID R1 P123 2 3. Zugriff über aktuellen TID 2. Zugriff auf Zuordnungstabelle über log. Identifikator 2 1 P378 R0815 1. Zugriff über den TID, der in dem PPP enthalten ist PPP(R1) P378 1 4. Ersetzen dieses veralteten TIDs P123 2 2 1 veraltet

41 Bewertung des PPP-Konzeptes
Vorteile: Schnellerer Zugriff als bei LIDs. Bei 10 % verdrängten Datensätzen durchschnittlich 1.2 Seitenzugriffe pro Satzzugriff. Nachteile: Hoher Speicherplatzbedarf wegen langer Satzadressen. Anpassung veralteter TIDs in PPPs erfordert Schreibzugriff. Fazit: Breiter gestreute Ermittlungskosten, hohe Stabilität und Flexibilität, hoher Aufwand. Nur bei hoher Dynamik (häufiges Verdrängen von Sätzen) bzw. häufigen Reorganisationen mit TID-Konzept konkurrenzfähig.

42 Ballen von Datensätzen
Kapitel 5.3.2 Ballen von Datensätzen

43 Kontextwissen, Qualität der Clusterung
Ballungszeitpunkt Wann bestimme ich zu einem Datensatz die Seite, auf der der Satz gespeichert werden soll? 1. Zum Zeitpunkt des Erzeugens: Datensätze erhalten sofort nach ihrer Erzeugung eine Seite zugewiesen. Auf diese Art kann die Ballung der Datensätze nur begrenzt optimiert werden, da die „guten“ Seiten bereits voll sein können. 2. Beim Commit: Transaktionen weisen allen erzeugten Datensätzen zunächst nur temporäre Speicherplätze zu und versuchen beim Commit, eine gute Ballung für die neu erzeugten Datensätze aufzubauen. 3. Bei der Reorganisation: Die beste Art, eine gute Ballung aufzubauen, besteht in einer vollständigen oder teilweisen Reorganisation der DB. Dabei können die Datensätze unabhängig von ihrem Erzeugungszeitpunkt geballt werden, da man im Vollbesitz aller Informationen ist. Kontextwissen, Qualität der Clusterung

44 Ballungsproblem Definition des Ballungsproblems: Gegeben: Ausgabe:
1. Eine Menge von physischen Datensätzen, 2. die Größe der physischen Datensätze, 3. ein Schätzmodell für das Nutzungsprofil, das angibt, wie häufig auf zwei Datensätze direkt hintereinander zugegriffen wird, 4. die Seitengröße. Ausgabe: Eine Gruppierung von Datensätzen auf Seiten, so dass die Seitengröße nicht überschritten wird und die Anzahl der logischen Seitenreferenzen für den durchschnittlichen Operationsmix der Datenbasis minimiert wird. Aufgabe 1: Erstelle das Modell Aufgabe 2: Wähle geeigneten Ballungsalgorithmus

45 Stabilität Zur Stabilität der Ballung:
Bei Änderungen der DB verschlechtert sich die Ballung zunehmend, da sich mit Änderungen in der DB häufig auch die Nutzung der Datensätze ändert, die Ballung aber unverändert bleibt und das neue Nutzungsprofil der Datensätze nicht mehr unterstützt.

46 Modellierung des Zugriffsverhaltens
Das Zugriffsverhalten der Anwendungen wird durch einen Clusterungsgraph (CG) modelliert. Die Knoten stellen physische Datensätze dar. Eine Kante zwischen zwei Datensätzen R1 und R2 zeigt an, dass es Anwendungen gibt, die auf Datensatz R1 zugreifen und direkt danach auf Datensatz R2. Kanten und Knoten des CG sind gewichtet. Das Gewicht einer Kante drückt die relative Häufigkeit von direkten Zugriffen vom Anfangspunkt der Kante zu ihrem Endpunkt aus (alle Kanten haben ein Gewicht > 0). Die Kantengewichte stellen somit ein Modell für das Zugriffsverhalten der Anwendungen dar. Das Gewicht eines Knoten ist die Länge des entsprechenden Datensatzes.

47 Beispiel Clusterungsgraph
Cuboid Material Vertex

48 Beispiel Clusterungsgraph
12 MatSet Datensätze 5 6 16 CubSet 22 22 Material 77 Material 99 8 20 Kantengewicht 8 15 20 10 Knotengewicht= Datensatzgröße 58 58 58 Cuboid 1 Cuboid 2 Cuboid 3 40 40 40 40 28 40 40 28 Vertex21 Vertex28 28 28 28 28 Vertex11 Vertex18 Vertex31 Vertex38

49 Ermittlung der Kantengewichte
Statische Verfahren: Diese Verfahren beruhen entweder auf Eingaben des Benutzers oder auf einer Analyse des Datenbankschemas oder der Anwendungsimplementierungen. Dynamische Verfahren: Sie beruhen auf der Analyse früherer Anwendungen. Entweder müssen spezielle Trainingsläufe von Anwendungen gefahren werden, oder das Zugriffsverhalten der normalen Alltags-Anwendungen wird protokolliert. Hoher Aufwand während des Alltags-Betriebs der Datenbasis.

50 Ballungsalgorithmen Reformulierung des Ballungsproblems:
Ein Ballungsalgorithmus erhält als Eingabe einen CG und die Seitengröße, und produziert als Ausgabe eine Aufteilung der Knoten des CG auf Seiten. Sequenz-basierte Ballungsalgorithmen: Sie überführen den CG in eine Sequenz von Datensätzen. Die Sequenz wird in Teilsequenzen zerlegt, so dass die Datensätze in jeder Teilsequenz auf eine Seite passen. Die Seiten werden dabei soweit wie möglich gefüllt. Partitionierungs-basierte Ballungsalgorithmen: Sie wenden einen Graphpartitionierungs-Algorithmus auf den CG an. Der CG wird in Partitionen zerlegt, so dass die Datensätze in jeder Partition auf eine Seite passen.

51 Sequenz-basiertes Ballen
Kapitel 5.3.3 Sequenz-basiertes Ballen

52 Sequenz-basierte Ballungsalgorithmen
Sequenz-basierte Ballungsalgorithmen sind von der Form PreSort | Traversal. PreSort ist eine Sortiervorschrift, die die Vorsortierung der Datensätze als totale oder partielle Ordnung festlegt. Traversal steht für einen Algorithmus, der den CG traversiert. Die Datensätze werden entsprechend ihrer Vorsortierung als Startpunkte für Traversierungen des CG betrachtet. Die Besuchsreihenfolge der Knoten ergibt die Knotensequenz. Bei der Traversierung werden nur Knoten betrachtet, die noch nicht besucht wurden. Die Knoten (Datensätze) werden entsprechend dieser Sequenz auf Seiten verteilt.

53 Überblick über Vorsortierungen
Random: Beliebige Reihenfolge der Datensätze. Static Reference Count: Anzahl von Verweisen von anderen Datensätzen, die auf einen Datensatz verweisen; auf- oder absteigende Sortierung möglich. Bestimmung von „Kristallisationspunkten“: Näherungslösung durch Analyse der Datenbasis. Dynamic Reference Count: Anzahl von Referenzierungen, die über einem bestimmten Zeitraum auf den Datensatz gemacht wurden; auf- oder absteigende Sortierung möglich. Bestimmung von „Kristallisationspunkten“ durch Monitoring. Trace: Es wird die Zugriffsspur eines Anwendungsmixes ausgewertet; die Datensätze werden entsprechend der Position ihrer ersten Referenzierung in der Spur angeordnet. User: Der Benutzer definiert eine Sortierung der Datensätze.

54 Überblick über Traversierungen
Id: Die Datensätze werden entsprechend ihrer Vorsortierung besucht. Depth First: Entsprechend Tiefensuche, erfordert knotenlokale Sortierung der ausgehenden Kanten. Breadth First: Entsprechend Breitensuche, erfordert knotenlokale Sortierung der ausgehenden Kanten.

55 Beispiel Clusterungsgraph
Size.incr | DepthFirst Size.incr sortiert die Knoten nach aufsteigender Größe 12 MatSet 5 6 16 CubSet 22 22 Material 77 Material 99 8 20 8 15 20 10 MatSet, CubSet, Mat77, Mat99, Vert11,…, Vert38, Cub1, Cub2, Cub3 58 58 58 Cuboid 1 Cuboid 2 Cuboid 3 Seitengröße: 150 Bytes 40 40 40 40 28 40 40 28 Vertex21 Vertex28 28 28 28 28 Vertex11 Vertex18 Vertex31 Vertex38

56 Beispiel Clusterungsgraph
Size.decr | DepthFirst Size.decr sortiert die Knoten nach absteigender Größe 12 MatSet BreadthFirst liefert dasselbe Ergebnis 5 6 16 CubSet 22 22 Material 77 Material 99 8 20 8 15 20 10 Cub1, Cub2, Cub3, Vert11, …, Vert38, Mat77, Mat99, CubSet, MatSet 58 58 58 Cuboid 1 Cuboid 2 Cuboid 3 Seitengröße: 150 Bytes 40 40 40 40 28 40 40 28 Vertex21 Vertex28 28 28 28 28 Vertex11 Vertex18 Vertex31 Vertex38

57 Bewertung sequenz-basiertes Ballen
Einfaches Verfahren mit schneller Laufzeit. Starke Abhängigkeit von Vorsortierung: Size.decr | DepthFirst bzw. Size.decr | BreadthFirst spiegelt (zufällig) Nutzung besser wieder als Size.incr | DepthFirst. Der Traversierungsalgorithmus muss möglichst gut das Zugriffsverhalten der Anwendungen nachbilden. Depth-First ist bei navigierenden Anwendungsprogrammen vorzuziehen. Breadth-First ist bei Anwendungen mit vielen Iterationen über Mengen und Listen vorzuziehen. Kantengewichte werden nur wenig berücksichtigt. Erfahrung: Der Clusterungsalgorithmus Trace | Id sortiert die Datensätze entsprechend des Zugriffsspur einer konkreten Anwendung und speichert die Datensätze in dieser Reihenfolge auf Seiten. Hierbei wird das Verhalten der Anwendung gut berücksichtigt.

58 Benutzerdefinierte Traversierungen
Placement Tree: Baum zur Beschreibung der gewünschten Traversierung des CG. Beispiele für Placement Trees: Für die Traversierung des CG werden die Placement Trees auf den CG abgebildet und die entstehenden Untergraphen nach depth-first Reihenfolge traversiert. CubSet Cuboid Vertex V8 V1 MatSet Material

59 Partitions-basiertes Ballen
Kapitel 5.3.4 Partitions-basiertes Ballen

60 Partitionierungs-basierte Ballungsalgorithmen
Das Ballungsproblem als Graphpartitionierungsproblem: R1 100 1 Annahme: Alle Datensätze gleich groß, Seitengröße = 3. R2 R6 1 100 R3 R5 100 1 R4 Depth-First Traversierung beginnend mit Datensatz R1. Bewertung: Schlecht, da zwar alle Seiten zu 100 % gefüllt, aber Trennung gewichtige Kante (R3 R4). Bessere Ballung: Bewertung: Seiten zwar nur zu zwei Drittel gefüllt, aber nur Durchtrennung leichtgewichtiger Kanten (R2 R3), (R4 R5), (R6 R1).

61 Partitionierungs-basierte Ballungsalgorithmen
Das Ballungsproblem als Graphpartitionierungsproblem: Eine Ballung eines CG, d.h. eine Zuordnung der Datensätze zu Seiten, induziert eine Partitionierung des CG. Die externen Kosten einer Partitionierung sind definiert als die Summe der Gewichte aller Kanten, die Partitionsgrenzen überspannen. Das Ballungsproblem ist nun: Finde eine Partitionierung des CG, so dass 1. die Summe der Knotengewichte in jeder Partition kleiner gleich der Seitengröße ist und 2. die externen Kosten der Partitionierung minimiert werden.

62 Partitionierungs-basierte Ballungsalgorithmen
Externe Kosten der Beispiel-Cluster {R1, R2, R3 } {R4, R5, R6} {R1, R2} {R3, R4} {R5, R6} R1 R1 100 100 1 1 R6 R2 R2 R6 100 1 1 100 R3 R5 R3 R5 100 1 100 R4 R4 1 Externe Kosten = 101 Externe Kosten = 3

63 Partitionierungs-basierte Ballungsalgorithmen
Komplexitätsbetrachtungen: Das Ballungsproblem ist eine Instanz des freien Partitionierungs-Problems, bei dem die Zahl der Partitionen nicht vorbestimmt ist. Allgemein sind Partitionierungs-Probleme NP-vollständig. Erfordert Näherungsverfahren. Wünschenswert, da i.Allg. partitionierungs-basierte Ballungsalgorithmen bessere Clusterungen ergeben als sequenz-basierte. Grund: Es wird ein weiterer Kontext betrachtet!

64 Partitionierung nach Kernighan und Lin
Grundgedanke: Der Algorithmus von Kernighan und Lin (KL) beginnt mit einer initialen (beliebigen) k-Partitionierung eines Graphen und vertauscht so lange Datensätze zwischen jeweils zwei Seiten, bis ein Endekriterium (als lokales Kostenminimum) erreicht ist. Literatur: B. Kernighan and S. Lin, An efficient heuristic procedure for partitioning graphs, Bell System Technical Journal, pp , 1970.

65 Partitionierung nach Kernighan und Lin
Definitionen: Sei G=(V,E) ein beliebiger Graph mit Knoten V = {v1, ..., vn} und Kanten E  2V. Für (vi, vj)  E gibt cij das Gewicht der Kante an (cij=0 falls (vi, vj)  E; cii = 0). Einfachster Fall Bi-Partitionierung: Sind A und B zwei Partitionen des Graphen, so sind als externe Kosten E(i) für einen Knoten vi  A definiert: Die internen Kosten sind die Kostensumme aller Kanten, deren beteiligte Datensätze in der gleichen Partition liegen:

66 Partitionierung nach Kernighan und Lin
Externe und interne Kosten Partition B Partition A E(i) vi I(i) vj I(j) E(j)

67 Partitionierung nach Kernighan und Lin
Gewinn beim Vertauschen von Knoten Partition B Partition A E‘(i) vi I‘(i) I‘(j) E‘(j) vj Nach der Vertauschung von vi und vj ergeben sich neue interne und externe Kosten: E‘(i) = I(i) + cij I‘(i) = E(i) - cij

68 Partitionierung nach Kernighan und Lin
Gewinn beim Vertauschen von Knoten Externe Gesamtkosten vor der Vertauschung von vi und vj: T = z + E(i) + E(j) – cij (E(i) und E(j) enthalten jeweils cij) Gesamtkosten nach der Vertauschung von vi und vj: T‘ = z + E‘(i) + E‘(j) - cij = z + I(i) + I(j) + cij (z: Summe der Kosten aller Kanten zwischen A und B ohne vi oder vj) Gewinn bei Vertauschung von vi  A und vj  B g = T - T‘ = E(i) - I(i) + E(j) - I(j) - 2 cij oder mit D(i) = E(i) - I(i) Differenz von externen und internen Kosten: g = T - T‘ = D(i) + D(j) - 2 cij Iteration Nach Vertauschen von vi und vj müssen die D-Werte der noch verbleibenden Datensätze V \ {vi, vj} neu berechnet werden: [ k in A: D‘(k) = E‘(k) - I‘(k) = E(k) + cik - cjk - (I(k) + cjk - cik) ] D(k) + 2cik + 2cjk für vk  A \ {vi,vj} D‘(k) =

69 Der KL-Algorithmus algorithm Kernighan (G, C, ):
/* Graph G=(V,E), Kostenmatrix C = (cij) */ /* initiale Partitionierung  = {P1, ..., Pk} */ repeat foreach (Px, Py)     do Kern2 (G, C, Px, Py); until (Endekriterium erfüllt); end algorithm; Reihenfolge hat Einfluss Bewirkt Vertauschungen

70 Der KL-Algorithmus Wähle vi  Ap , vj  Bp
algorithm Kern2 (G, C, A, B): Setze n := A + B; repeat Setze A1 := A; B1 := B; for p := 1 to n/2 do begin Berechne die D-Werte für alle Elemente von Ap und Bp; Wähle vi  Ap , vj  Bp so dass gp = D(i) + D(j) - 2 cij maximal wird; Setze ap := vi , bp := vj ; Setze Ap+1 := Ap \ {vi}, Bp+1 := Bp \ {vj}; end; Wähle 0  k  n/2, so dass maximiert wird; /* k bestimmt die Mengen {a1, ..., ak}  {a1, ..., an/2} und */ /* {b1, ..., bk}  {b1, ..., bn/2} der zu vertauschenden Knoten */ if gain > 0 then begin Setze A := (A \ {a1, ..., ak})  {b1, ..., bk}; Setze B := (B \ {b1, ..., bk})  {a1, ..., ak}; until gain  0; end algorithm; Der Algorithmus terminiert, wenn keine Kostenreduzierung mehr erreichbar ist. Alternative: Vorgegebene Anzahl von Iterationen.

71 Der KL-Algorithmus Initiale Partitionierung Optimale Partitionierung 1
2 5 4 6 3 A B 1 2 5 4 6 3 Alle Kanten cij haben Gewicht 1, alle Knoten haben gleiche Größe.

72 Der KL-Algorithmus A1:={1, 3, 4} B1:={2, 5, 6} 1 2 5 4 6 3 A B
1. Iteration D(i) = E(i) - I(i) g = D(i) + D(j) - 2 cij Wähle a1=4, b1=2 2. Iteration A2:={1, 3, 4} B2:={2, 5, 6} D(k) + 2cik + 2cjk für vk  A \ {vi,vj} D‘(k) = Wähle a2=1, b2=5

73 Der KL-Algorithmus A3:={1, 3, 4} B3:={2, 5, 6} 1 2 5 4 6 3 A B
3. Iteration Wähle a3=3, b3=6 1. Iteration g = D(i) - D(j) - 2 cij Wähle a1=4, b1=2 2. Iteration A2:={1, 3, 4} B2:={2, 5, 6} Wähle a2=1, b2=5

74 Der KL-Algorithmus 1 2 5 4 6 3 A B Wähle a1=4, b1=2 Wähle a2=1, b2=5
Berechnungsvorschrift für Knotenvertauschung: Berechnung von gain für alle Vertauschungsvektoren mit Länge k  {1,2,3}: A1:= {1, 3, 4} B1:= {2, 5, 6}

75 Der KL-Algorithmus 1 2 5 4 6 3 A B 1 2 5 4 6 3 Im nächsten Durchlauf der äußeren Schleife der Prozedur Kern2 würde kein positiver Gewinn (gain) mehr erzielt, so dass der Algorithmus mit der optimalen Partitionierung terminiert. A1:={1, 3, 4} B1:={2, 5, 6}

76 Bewertung des KL-Algorithmus
Hoher Aufwand O(n2.4), mit n die Anzahl der Knoten des Graphen. Austausch von Datensätzen ist problematisch, wenn Datensätze mit sehr unterschiedlichen Größen vorliegen (wegen der begrenzten Seitengröße). Verlagerung (statt Austausch) eines Datensatzes von einer Seite auf eine andere Seite ist nicht vorgesehen. Die Anfangspartitionierung hat einen wesentlichen Einfluss auf die Güte der Ergebnispartitionierung. Die Anzahl der Partitionen ist durch die initiale Partitionierung fest vorgegeben und kann nicht angepasst werden. Die Größe der Partitionen ist ebenfalls fix.

77 Bewertung des KL-Algorithmus
Es gibt Weiterentwicklungen von KL, bspw. von Fidducia und Mattheyses (FM). Der FM Algorithmus erlaubt das Verschieben einzelner Knoten über Partitionsgrenzen hinweg. FM kann die Größe der Partitionen dadurch modifizieren. Außerdem kann die Anzahl der Partitionen verringert werden, indem alle Knoten von einer Partition weg verschoben werden. Es gibt Kombinationen mit Greedy Graph-Partitionierung. Schnelles Erzeugen einer „guten“ Anfangspartitionierung.

78 Kapitel 5.3.5 Pointer Swizzling

79 Motivation Beobachtung:
Bei objektorientierten DBs sind sehr viele Feldwerte in Datensätzen (häufig über die Hälfte) Verweise auf andere Datensätze. Forderungen: Für die interne Verarbeitung sollten diese Verweise Hauptspeicheradressen sein. Daher sollte beim Einlagern der Sätze auf einer Seite ein Ersatz von Adressen nunmehr gepufferter Sätze auf Hauptspeicheradressen erfolgen. Beim Einbringen von Änderungen muss dann umgekehrt eine Umrechnung von Hauptspeicheradressen auf periphere Satzadressen erfolgen.

80 Klassifikationen Klassifikation nach Ort:
In-Place-Swizzling: Umformung der Adressen im Seitenpuffer und damit global sichtbar. Copy-Swizzling: Kopieren der Objekte in einen eigenen Objektpuffer, Umformung damit nur lokal sichtbar. Klassifikation nach Zeitpunkt: Sofortiges Swizzling (eager swizzling). Erfordert Kenntnis des Satzaufbaus (keine saubere Trennung der Schichten!) Swizzling auf Anforderung (lazy swizzling). Abfangen der Anforderung, Stelle des Verweises muss bestimmt werden. Beachte: Änderungen müssen rücktransformiert werden.

81 Grundmuster Sofortiges Swizzling: Aufbau der Tabelle und Ersatz der Adressen auf einen Schlag. Zuordnungstabelle oid/hsp-Adresse tid hsp .. Objekt 1 Objekt 4 h(tid) im Hsp. Objekt 2 Objekt 3 Objekt 5 Swizzling auf Anforderung: Test in der Tabelle, schrittweiser Aufbau der Tabelle und Ersatz der Adressen. Variationsmöglichkeiten siehe Härder/Rahm!

82 MMA (1) Besonderheit: Memory Mapping Architektur (MMA) des kommerziellen objektorientierten Datenbanksystems ObjectStore mit Swizzling In-Place, Vorausschauend: Datenmodell wie im Beispiel: C++ mit ObjectStore-spezifischen Erweiterungen: Spezieller new-Operator, mit dem Objekte in einer Datenbasis erzeugt werden können. In C++ eingebettete Anfragesprache. Der Zugriff auf Objekte erfolgt wie in C++ durch das Dereferenzieren von Zeigern. Beim Dereferenzieren von Zeigern ist für den Benutzer verdeckt, ob das referenzierte Objekt persistent (d.h. in der DB gespeichert) oder transient ist (transiente Objekte existieren nur zur Laufzeit des Anwendungsprozesses).

83 Beispiel class Cuboid { int Value; ... }; Cuboid *c1, *c2;
c1 = new(db1, CuboidTypeDesc) Cuboid; // c1 zeigt auf neuen, in Datenbasis db1 angelegten // dauerhaften Cuboid; c2 = new Cuboid; // c2 zeigt auf neuen, transienten Cuboid; \\ printf(”%s\n“, c1->Value); printf(”%s\n“, c2->Value); // Zugriff auf das Attribut Value des Objektes, // auf das c1 bzw. c2 verweist (Dereferenzieren von Zeigern)

84 MMA (2) Ausnutzen der virtuellen Speicherverwaltung von Unix:
Virtueller Speicher Einzel-prozess Zuordnung Zuordnung Seite Block gleiche Größe Hauptspeicher Hintergrundspeicher

85 MMA (3) tid als virtuelle Hauptspeicheradresse geführt. Aber: Die Gültigkeit virtueller Adressen ist an den Prozess gebunden, der die Adressen zugeteilt hat. Zuordnungen mittels page table pro Prozess. Gültigkeit der Adresszuordnung Virtueller Speicher Einzel-prozess Zuordnung Zuordnung Seite Block gleiche Größe Pointer Swizzling: Anpassung an die page table des aktuellen Prozesses Hauptspeicher Hintergrundspeicher

86 MMA (4) Vorgehen: Transparenz des Speicherorts: Die Entscheidung über den Speicherort, auf den zugegriffen wird (Hauptspeicher oder Hintergrundspeicher), und damit auch über die Umrechnung der Adressen, wird mit Hilfe des Betriebssystems gelöst. Fragen: Wie werden angesichts der Prozesslokalität von virtuellen Adressen Objektreferenzen auf der Platte repräsentiert? Wie funktioniert beim Dereferenzieren eines Zeigers auf ein persistentes Objekt das Einlagern des Objektes von der DB in den virtuellen Speicher?

87 MMA: Objektreferenzen
Referenz auf einen Datensatz in ObjectStore: Virtuelle Speicheradresse = (virtuelle Seitenadresse plus Offset innerhalb der Seite, durch Punkt • markiert). Die virtuellen Speicheradressen in den Datensätzen auf einer Seite stammen jeweils von dem Prozess, der auf die Seite zuletzt zugriff. Auf jeder Seite wird eine Tabelle verwaltet, die Seitenadressen des virtuellen Speichers auf Blöcke des persistenten Speichers abbildet. Prozesslokalität: Gleiche virtuelle Adressen, verschiedene Abbildungen Platte B15 B20 B30 66KB20 70KB30 70KB40 70K 66K B40 70K

88 MMA: Dereferenzieren Austausch der Adr. 70K (bereits reserviert) gegen eine freie Adr.(80K) Platte Speicherverletzung wegen Zugriffsschutz B15 B20 B30 66KB20 70KB30 Dereferen-zierung der Adr. 66K 70KB40 80K B40 66K 70K Zugriff auf B15; Einlagerung an Adr.12K 70K Einlagerung von B20 an Adr. 66K 12K 66K 70K 80K 81K Virtueller Speicher B15 val inval B20 B40 B30 nein ja reserviert für B30 reserviert für B40 inval leer nein nein. B15 val ja reserviert für B20 reserviert für B40 B20 B40 Status inval leer nein Block geschützt Kommentar

89 MMA: Dereferenzieren Bei Dereferenzieren der Referenz auf den Datensatz in Block B20: Referenz zeigt auf Seite 66K  Seite gegen Zugriff gesperrt  Unix meldet Zugriffsschutzverletzung. Platte Die reservierten Seiten werden für sämtliche Zugriffe gesperrt (UNIX-Kommando mprotect). B15 B20 B30 66KB20 70KB30 Dereferen-zierung der Adr. 66K 70KB40 B40 66K 70K Zugriff auf B15; Einlagerung an Adr.12K 70K 12K 66K 70K 80K 81K Virtueller Speicher inval leer nein nein. B15 val ja reserviert für B20 reserviert für B40 B20 B40 Status Block geschützt Kommentar

90 Zugriffsschutzverletzung  Error Handler mit Aktionen:
Block B20 wird in Seite 66K kopiert. Zugriffsschutz wird aufgehoben (bzw. durch Schreibschutz ersetzt, um Änderungen zu erkennen). Alle in der Tabelle am Blockanfang vorkommenden Seiten werden reserviert (siehe B30). MMA: Dereferenzieren Austausch der Adr. 70K (bereits reserviert) gegen eine freie Adr.(80K) Platte B15 B20 B30 66KB20 70KB30 Dereferen-zierung der Adr. 66K 70KB40 80K Adresse 70K bereits für B40 reserviert. B40 66K 70K 70K Einlagerung von B20 an Adr. 66K 12K 66K 70K 80K 81K Virtueller Speicher B15 val inval B20 B40 B30 nein ja reserviert für B30 reserviert für B40 Status Block geschützt Kommentar

91 Bewertung der MMA Kosten:
Der von einer Transaktion benötigte Bereich der Datenbasis muss in den virtuellen Speicher passen, der der Transaktion zur Verfügung steht. Bei jedem Einlagern eines Blocks wird für jede Referenz, die von dem Block auf einen anderen Block verweist, eine Seite des virtuellen Speichers reserviert (selbst wenn diese Referenzen nie verfolgt werden). Falls beim Einlagern eines Blocks nicht die „richtigen“ Speicherseiten reserviert werden können, müssen alle betroffenen Referenzen in dem Block angepasst werden. Navigierende Anwendungen, bei denen viele Referenzen zwischen Datensätzen auf unterschiedlichen Blöcken verfolgt werden, erfordern das ständige Einlagern von Blöcken und Reservieren von Seiten.

92 Verwaltung großer Datensätze
Kapitel 5.4 Verwaltung großer Datensätze

93 Datenmodell Großer Datensatz: Datensatz, dessen Länge größer als die Seitengröße ist. Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Gr. Physischer Datensatz 1.. 1 0.. 0.. 1.. 0.. 0..1 repräsentiert durch Satzkopf ge-speichert in ▼ Datensatz gespeichert ▼ in 1 1 1.. enthält▶ enthält▶ Physische DB (seitenorientiert) Segment Seite 1 0.. 1 0..

94 Aufgaben Platzierung: Erweitertes Aufgabenspektrum:
I.Allg. wird der Satzkopf (ein kurzes Anfangsstück des Satzes) frei platziert; der Satzkopf wird dazu wie ein kleiner Datensatz behandelt (d.h. gemeinsam mit ihm können weitere Datensätze auf der Seite gespeichert sein). Der Rest des großen Datensatzes wird auf Seiten gespeichert, die exklusiv dem Datensatz zugeordnet sind. Gr. Physischer Datensatz 0.. 0..1 Satzkopf ge-speichert in ▼ Datensatz gespeichert ▼ in 1 1.. Seite Erweitertes Aufgabenspektrum: Lesen, Modifizieren, Erzeugen, Löschen von Sätzen, Einfügen von Bytes in den Satz, Entfernen von Bytes aus dem Satz.

95 Verwaltung mit Standard-Pufferverwaltung
Kapitel 5.4.1 Verwaltung mit Standard-Pufferverwaltung

96 Verkettung TID des großen Datensatzes Satzkopf P123 P123 2 Platzierung auf beliebigen, nicht zwingend benachbarten Seiten. Direkte Adressierung, on-demand paging, update-in-place / shadowing.

97 Wegweiser TID des großen Datensatzes Satzkopf P123 Directory Verw.info. P123 2 Platzierung auf beliebigen, nicht zwingend benachbarten Seiten. Direkte Adressierung, on-demand paging, update-in-place / shadowing.

98 Bewertung Verkettung: Preis für direkte Verwendung der Segmentverwaltung: Geschlossenes Ein-/Auslagern aufwendig. Sonst zusammenhängende Bearbeitung im Puffer nicht möglich. Kein wahlfreier Zugriff auf Teile des Datensatzes. Wegweiser: Preis für direkte Verwendung der Segmentverwaltung: Geschlossenes Ein-/Auslagern aufwendig. Sonst zusammenhängende Bearbeitung im Puffer nicht möglich. Wahlfreier Zugriff auf Teile des Datensatzes erkauft durch Zusatzstruktur, die selbst auf Seiten geführt werden muss und zusätzliche E/A verursacht.

99 Verwaltung mit spezieller Pufferverwaltung
Kapitel 5.4.2 Verwaltung mit spezieller Pufferverwaltung

100 Beispiel Starburst (1) Starburst: Prototypisches Datenbanksystem von IBM. Es unterstützt Datensätze mit einer Größe bis zu 1.5 GB. Ein Datensatz besteht aus einem Kopf (Header) und einer variablen Anzahl von Partitionen. Eine Partition besteht aus einer Menge von Seiten, die benachbarten Blöcken auf dem nichtflüchtigen Speicher zugeordnet werden. Die Größen der Partitionen (bis auf die erste und letzte) werden nach einer Rechenvorschrift aus der Größe der ersten Partition berechnet. Die letzte Partition füllt i.Allg. die Rechenvorschrift nicht aus.

101 Beispiel Starburst (2) Beispiel mit Rechenvorschrift „Verdopplung der Größe der vorangehenden Partition“: Größe der ersten Partition (1 Seite) Größe der letzten Partition Anzahl der Partitionen 5 4096 9932 1 Seite 2 Seiten 4 Seiten 8 Seiten

102 Bewertung Starburst Vorteile:
Effiziente Unterstützung von Lesezugriffen (sequenziell und wahlfrei). Erfordert geschlossenes Einlagern von Partitionen in den Puffer. Hinzufügen von Bytes am Ende und Modifizieren beliebiger Bereiche innerhalb des Datensatzes sind effizient möglich. Nachteile: Einfügen weiterer Bytes in der Mitte kann zu umfangreichen Kopiervorgängen von Partitionen oder Teilen von Partitionen führen. Gefahr von Verschnitt in der letzten Partition.  Das Starburst-Konzept wurde entwickelt im Hinblick auf die Speicherung von relativ stabilen Daten, die hauptsächlich sequenziell gelesen werden (bspw. Audio- und Videodaten).

103 Beispiel Exodus (1) Exodus: Forschungsprototyp einer erweiterbaren Speichermaschine für objektorientierte Datenbanksysteme. Ein großer Datensatz besteht aus einem Kopf (Header) und einer variablen Anzahl von Datenseiten. Aus dem Datensatz kann über eine Byteposition ein beliebiger Ausschnitt ausgewählt werden. Nutzdaten können an beliebiger Stelle eingefügt oder entfernt werden. Erreichen dieser Flexibilität durch Baumstruktur: Nutzdaten ausschließlich in den Blattseiten des Baums. Die Blattseiten müssen nicht vollständig gefüllt sein: „Luft zum Atmen“. Nichtblatt-Seiten als Wegweiser, um zu einer Byteposition die Blattseite effizient zu finden. Wegweiser mit Relativpositionen, um Änderungen lokal zu begrenzen.

104 Beispiel Exodus (2) 421 886 P123 2 120 282 421 192 365 465 Bytes Bytes
TID des großen Datensatzes Satzkopf und Wurzel des Baums P123 421 886 P123 2 Nummer höchstes Byte des Satzes auf der Seite interne Seite Seitennummer 120 282 421 192 365 465 Bytenummerierung beginnt mit jeder Stufe bei 0 Blatt-Seiten Bytes 1-120 Bytes Bytes Bytes Bytes Bytes Ausschnitt aus dem Datensatz

105 Pufferung von Teilsätzen
Angefordert: Teilsatz = Ausschnitt mit Anfangsadresse, Länge Die zugehörigen Blatt-Seiten werden in den Systempuffer eingelagert. Es ist dafür zu sorgen, dass ihre belegten Teile einen zusammenhängenden Speicherbereich einnehmen. Erfordert eigene Pufferverwaltung. Bei Standard-Pufferverwaltung: Falls nicht genügend zusammenhängende Pufferrahmen ohne pin-Vermerk zur Verfügung stehen, müssen fixierte Seiten im Systempuffer verschoben werden (erfordert indirekten Zugriff über Handles). Verwaltung eines Teilsatzes mittels Scan-Descriptor. Vorwiegend eine Liste der eingelagerten Seiten-Bereiche. Bei Einlagern eines weiteren Bereiches des selben Datensatzes werden alle Scan-Descriptoren zu diesem Datensatz durchsucht. Befinden sich bereits Seiten im Puffer, die Daten des neu angeforderten Bereichs enthalten, dann werden diese Seiten innerhalb des Puffers kopiert (kein erneutes Lesen von der Platte).

106 Pufferung von Teilsätzen
2 C1 C2 C3 Wurzeldatensatz P1 P2 P3 Blattseiten Pufferrahmen N Scan-Descriptor P123 2 N C1:P1 C2:P2 C3:P3 TID Satzbereiche

107 Bewertung Exodus Erzeugen eines großen Datensatzes (Anfügen von Bytes am Ende) langsamer als bei Starburst, da die Baumstruktur aufgebaut werden muss. Sequenzielles Lesen ebenfalls etwas langsamer als bei Starburst, da die Blattseiten nicht auf physisch benachbarten Blöcken gespeichert werden. Einfügen von Bytes bzw. Löschen von Bytes mitten im Datensatz wesentlich schneller als bei Starburst, da diese Operationen direkt durch die Baumstruktur unterstützt werden.


Herunterladen ppt "Zugriffsschicht: Satzverwaltung"

Ähnliche Präsentationen


Google-Anzeigen