Datensätze werden in größeren physischen Einheiten fester Größe verwaltet. Diese Seiten (Blöcke) werden nur komplett zwischen Haupt- (RAM) und Externspeicher (Festplatten, SSDs) transferiert.
Eigenschaften von Seiten:
gleiche feste Größe
eindeutige Kennung
Relation entspricht Array von Seiten
in PostgrSQL sogenannte Tablespaces:
xxxxxxxxxx
create tablespace TBLSPCNAME location '/path/..';
create database DTBSNAME tablespace TBLSPCNAME;
Verfahren | Visualisierung | Adressierung | Zugriffskosten | Flexibilität |
---|---|---|---|---|
Statische Datei-Zuordnung | ![]() | direkt | minimal | keine |
Dynamische Datei-Zuordnung | ![]() | über kleine Tabelle | gering | moderat |
Dynamische Block-Zuordnung | ![]() | über große Tabelle | hoch | maximal |
= vorreservierter Speicher von sogenannten Frames
hält oft benötigte Seiten vor
Aufgabe | Implementierungsmöglichkeit |
---|---|
Prüfung, ob Seite im Puffer und wenn ja in welchem Frame | Verwaltung von (Seiten, Frame)-Paaren in Hashmap |
Zurverfügungstellen freier Frames | Verkettung der freien Frames in einer Liste |
Bestimmung, welche Seiten auf Puffer entfernt werden | Least-Recently-Used (Verkettung belegter Frames nach letztem Nutzungszeitpunkt der Seite) |
Schreiben modifizierter Seiten | Absprache mit Transaktionsverwaltung (siehe ACID-Bedingungen) |
Datensätze einer Relation sollen auf Seiten abgebildet werden.
= eindeutige Kennung eines Datensatzes innerhalb Relation/Datenbank
zusammengesetzt aus Seitenadresse und relativer Adresse innerhalb Seite
PostgreSQL: Attribut ctid
in jeder Relation (muss explizit in select
genannt werden)
stabile TIDs = keine Änderung des TID eines Datensatzes bei Migration in eine andere Seite
= verwaltet Datensätze (in Seiten)
zentrale Aufgabe: Suche nach Seite zur Speicherung neuen Datensatzes
wünschenswert: Clusterung von Datensätzen (in einer Seite bei häufigem gemeinsamen Zugriff)
Lösungen
Datensätze konstanter Länge
Datensätze variabler Länge
Zugriffsvariante | Beschreibung | Visualisierung | Einsatzzweck |
---|---|---|---|
Relationen-Scan | Durchlaufen der zur Relation gehörenden Seiten | ![]() | niedrige Selektivität (Zugriff auf viele Datensätze) |
Index-Scan | indirekter Zugriff über Index | ![]() | hohe Selektivität (Zugriff auf wenige Datensätze) |
Suche nach Datensatz mit Schlüssel 1000
Standard-Implementierung: B+-Baum
Primär-/Clusterindex auf sortierter Relation
dichter Primärindex = Indexeintrag für jeden Datensatz
dünner (Cluster-)Index
Sekundärindex
= Indexierung auf einem oder mehreren Nicht-Schlüssel-Attributen
z.B. Geburtsjahr
Ziele
Klassifizierung
im Gegensatz zu
binären Suchbäumen
Datenverwaltung in Externspeicher Minimierung der Seitenzugriffe
ISAM
RECAP: Binäre Suchbäume
minimale Höhe: mit n Datensätzen
z.B. AVL-Bäume, Rot-Schwarz-Bäume
worst-case-Leistungsverhalten Kosten = Anzahl Externspeicherzugriffe
Probleme
direkte Abbildung binäre Knoten Seiten schnechte Strukturen
damit nicht zur Datenverwaltung auf Externspeicher geeignet
Idee: "fette" Knoten mit maximaler Anzahl an Einträgen (so dass gerade noch in Seite passt)
Suche Datensatz mit Attributwert 42
Suche Datensatz mit Attributwert 41
Die Suche ist auf einen Pfad beschränk Kosten: mit Höhe des Baums h
Suche alle Datensätze im [40, 50]
Algorithmus
durchläuft Suchpfad bis zu Blatt, in dem linke Bereichsgrenze liegt/liegen könnte
Knotenzugriffe
folgt Blättern bis zu Blatt, der Attributwert größer als rechte Bereichsgrenze enthält
mit r Antworten Blätter werden besucht
Algorithmus: (Einfügen von Schlüssel k)
Exakte Suche nach k
Einfügen von k
Konfliktbeseitigung (wenn maximale Anzahl der Einträge pro Blatt verletzt)
Knotenaufteilung bei der Hälfte
Hinzufügen von Verweis auf höherer Ebene: Obergrenze von neuem (aufgeteiltem) Knoten
Konfiktbeseitigung (wenn maximale Anzahl der Kinder pro Zwischenknoten verletzt)
Verschieben von mittlerem Eintrag auf höhere Ebene
Ergebnis:
Algorithmus: (Löschen von Schlüssel k)
Löschen von k (im Beispiel 24)
Konfliktbeseitigung (wenn minimale Anzahl der Einträge pro Blatt verletzt)
Verschiebe restliche Einträge in rechtes Blatt
Konfliktbeseitigung (wenn maximale Anzahl der Einträge pro Blatt verletzt)
Operation | worst-case-Kosten |
---|---|
exakte Suche | |
Bereichanfrage | |
Einfügen | |
Löschen |