Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Zugriffsschicht: Satzzugriffsstrukturen

Ähnliche Präsentationen


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

1 Zugriffsschicht: Satzzugriffsstrukturen
Kapitel 6 Zugriffsschicht: Satzzugriffsstrukturen

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 Datenmodell Derselbe Satz kann mehreren Zugriffstrukturen angehören
Performanter Zugriff Physische DB (satzorientiert) enthält▶ Zugriffs- struktur enthält▶ Kl. 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

4 Kapitel 6.1 Zugriffspfade

5 Operatoren (1) Alle Zugriffsstrukturen müssen mindestens folgende Schnittstellenoperationen anbieten: Einfügen eines Datensatzes in die Zugriffsstruktur, Entfernen eines Datensatzes aus der Zugriffsstruktur. Sequenzieller Zugriff: Iterieren (scan) über alle Datensätze der Zugriffsstruktur (bspw. Operation first für den Zugriff auf den ersten Datensatz und next für den Zugriff auf den folgenden Datensatz). Erlaubt das systematische Aufsuchen/Bearbeiten der Datensätze der Zugriffsstruktur.

6 Operatoren (2) Optional Direkter Zugriff: Jeder Datensatz muss sich anhand eines von anderen Datensätzen unabhängigen Kriteriums bestimmen lassen. Zugriff anhand Position. Zugriff anhand eines Schlüsselfelds. Zusätzlich optional: Sortierung der Datensätze anhand eines Schlüsselfelds und Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge  sequenzieller Zugriff. Überprüfung der Eindeutigkeit von Schlüsselwerten. Zugriff anhand mehrerer Schlüsselfelder. Optional: Reorganisation der Zugriffsstruktur nach Performanzabfall.

7 Zugriffspfad Ziel: Schneller Zugriff auf aktuell benötigte Datensätze
möglichst weit gehendes Vermeiden von Zugriffen auf nicht benötigte Datensätze. Anzahl der Zugriffe bis zum Erreichen des oder der gesuchten Datensätze ist nicht oder nur sehr schwach abhängig von der Größe der Satzmenge (Skalierbarkeit). Zugriffspfad: Abstrakter Begriff zur Beschreibung des Kriteriums, nach dem auf benötigte Datensätze einer Satzmenge zugegriffen wird. Zugriffsstruktur: Realisierung einer Satzmenge samt Zugriffspfad. Primärdaten: Auf der Nutzerebene sichtbarer Anteil an den Datensätzen. Sekundärdaten: Daten zu den Zugriffspfaden.

8 Umsetzung und Leistungsbeurteilung
Lösung: Ballen als Basistechnik. Zugriffspfad als Vorhersagemodell. Erfordert gesteuerte Platzierung der Datensätze. Erreichen des Ziels beurteilt nach mittlerem oder schlechtestem Aufwand = Anzahl der Seitenzugriffe für das Einfügen von Datensätzen, das Entfernen von Datensätzen, das Auffinden von Datensätzen, das Ändern von Datensätzen.

9 Beispiele für Zugriffspfade
Kriterium Zugriffspfad Zugriff Erschöpfendes Aufzählen nach Position Reihenfolge Iterieren (scan) über alle Datensätze: bspw. Operation first für den Zugriff auf den ersten und next für den Zugriff auf den folgenden Datensatz. Position Positions-bestimmung Direkter Zugriff Einzelner Schlüsselwert Werte der Schlüsselfelder Kombination v. Schlüsselwerten Erschöpfendes Aufzählen nach Schlüsselwert Reihenfolge nach Werten d. Schlüsselfelder Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge

10 Kapitel 6.2 Ballen

11 Grundgedanke Kriterium Zugriffspfad Zugriff Erschöpfendes Aufzählen nach Position Reihenfolge Iterieren (scan) über alle Datensätze:. Operation first für den Zugriff auf den ersten, next für den Zugriff auf den folgenden Datensatz. Position Positionsbestimmung Direkter Zugriff Einzelner Schlüsselwert Werte der Schlüsselfelder Kombinierte Schlüsselwerte Erschöpfendes Aufzählen nach Schlüsselwert Reihenfolge nach Werten der Schlüsselfelder Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge Ziel: Minimierung der Zahl der Seitenzugriffe bei erschöpfendem Aufzählen (Iterieren). Ansatz Ballen (auch: Bündeln, engl.: clustering): Ablage von gemeinschaftlich benötigten Datensätzen auf der selben Seite  Mehrere Datensätze mit 1 Seitenzugriff. Geballte Seiten werden nicht selbst noch einmal geballt. Eigener Zugriffspfad auf Seitenebene, z.B. Verkettung der Seiten oder Nummern aller Seiten auf der ersten Seite.

12 Geballte Listen Speicherung entsprechend geforderter Reihenfolge
Liste aller Seiten P123 P204 P317 P123 P204 P317 4 32 Satz 6 5 22 5 24 Satz 1 64 Satz 10 12 Satz 2 Satz 7 24 Satz 11 Datensätze dieser Seite 28 Satz 3 8 Sat 8 Sa 20 z 12 16 Satz 13 Länge des Datensatzes tz 4 24 Satz 5 Satz 8 8 8 Satz 9 Satz 14 Freispeicher am Ende der Seite

13 Unsortierte geballte Listen
Einfügen eines Datensatzes: Position beliebig: Es wird die letzte Seite ausgewählt oder die erste Seite, die genügend freien Speicherplatz besitzt. Position nach Eingangsreihenfolge: Es wird die letzte Seite ausgewählt. Sequenzielle Zugriffe auf die Datensätze erfolgen entsprechend ihrer physischen Reihenfolge. Direkte Zugriffe über die Position sind möglich, sofern im Kopf der ersten Seite die Nummern aller Seiten samt Satzanzahl vermerkt sind. Modifikationen mit Satzverlängerung in der Mitte einer Zugriffsstruktur kann u.U. Verschiebungen von Datensätzen zur Folge haben. Diese können bei „Position nach Eingangsreihenfolge“ zahlreiche Seiten betreffen.

14 Sortierte geballte Listen
Wertbasierter Zugriff auf Datensätze: Suche eines Datensatzes kann durch Binärsuche erfolgen, sofern in der ersten Seite die Nummern der Seiten sortiert vermerkt sind. Ansonsten muss im Mittel die Hälfte der Datensätze besucht werden; aufgrund der Ballung benötigt man hierzu jedoch nur N / (2B) Seitenzugriffe, wobei N die Anzahl der Datensätze und B die mittlere Anzahl von Datensätzen pro Seite (Blockungsfaktor) ist. Vorteile auch bei relationalen Operatoren, für die es bei Sortierung besonders effiziente Algorithmen gibt: Join-Operation. Filterung einer Datei (Selektion von Datensätzen, die ein Selektionsprädikat erfüllen).

15 Sortierte geballte Listen
Einfügen eines Datensatzes: Es wird anhand des Sortierkriteriums die Seite ermittelt, in die der Datensatz eingefügt werden soll. Falls auf der Seite genügend freier Platz ist, wird der Datensatz eingefügt. Falls nicht, wird untersucht, ob die Vorgänger- oder Nachfolgerseite genügend Platz hat. Ist dort auch kein Platz vorhanden, wird eine neue Seite allokiert und in die Liste eingefügt. Die Seiten können entweder soweit wie möglich gefüllt werden, oder beim initialen Anlegen jeder Seite wird ein bestimmter Anteil (0) freigelassen, um (über eine gewisse Zeit) das Einfügen neuer Datensätze und das Vergrößern der Datensätze auf der Seite zu beschleunigen.

16 Sortierte geballte Listen
Einfügen eines Datensatzes: Beispiel mit 0  0,5: Neuverteilung der Sätze auf übergelaufenen und neu allokierten Satz. Bei Seitenverkettung geringer Aufwand, um neue Seite an der richtigen Stelle einzufügen. S1 < S2< … < Sk < Sk+1 < … < S2k Sneu S1 < S2< … < Sk Sk+1 < … < Sneu < … < S2k alter Knoten neuer Knoten

17 Sortierte geballte Listen
Entfernen eines Datensatzes: Gebe minimalen Füllgrad min (0,5) für die Seiten vor. Falls nach Entfernen Füllgrad   min fertig. Andernfalls Knoten-Unterlauf: Es wird versucht, Datensätze aus einer der Nachbarseiten in den Knoten mit Unterlauf zu verschieben. Misslingt, wenn für beide Nachbarseiten  = min. In diesem Fall wird die Unterlauf-Seite mit einer ihrer Nachbarseiten verschmolzen. Die frei werdende Seite wird an die Seitenverwaltung zurückgegeben.

18 Eingebetteter Zugriffspfad
Aufgabe: Erschöpfendes Aufzählen nach Position, wenn die physische Satzablage durch Ballen nach einem anderen Zugriffspfad bereits festliegt. Lösung: Eingebetteter Zugriffspfad: Zugriffspfad ist unmittelbarer Bestandteil der Datensätze. Er wird dort durch Stellvertreter für die Datensätze repräsentiert. Datensätze erhalten spezielle Felder mit Verweisen auf die Vorgänger / Nachfolger in der Ordnung. Optionen bei der Verkettung: Einfache Verkettung: Nur ein Zeiger auf Nachfolger. Doppelte Verkettung: Zeiger auf Vorgänger und Nachfolger. Ring: Letzter Datensatz verweist wieder auf den ersten Datensatz, bei doppelter Verkettung verweist Vorgängerzeiger des ersten Datensatzes auf den letzten.

19 Zusätzliche eingebettete Zugriffspfade
Aufprägen beliebig vieler zusätzlicher Zugriffspfade Bei einer Multiliste enthalten die Datensätze eine Kettungsstruktur für jede Ordnung der Datensätze außerhalb der Ballung. P123 P204 P317 Satz 1 Satz 2 Satz 3 Kopf Liste 1 Kopf Liste 2

20 Assoziativer Zugriff durch Adressrechnen
Kapitel 6.3 Assoziativer Zugriff durch Adressrechnen

21 Grundgedanke Kriterium Zugriffspfad Zugriff Erschöpfendes Aufzählen nach Position Reihenfolge Iterieren (scan) über alle Datensätze:. Operation first für den Zugriff auf den ersten, next für den Zugriff auf den folgenden Datensatz. Position Positionsbestimmung Direkter Zugriff Einzelner Schlüsselwert Werte der Schlüsselfelder Kombinierte Schlüsselwerte Erschöpfendes Aufzählen nach Schlüsselwert Reihenfolge nach Werten der Schlüsselfelder Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge Ziel: Direktzugriff nach Schlüsselwert unter Vermeiden jeglichen weiteren Zugriffs. Lösung Assoziativer Zugriff Berechnung der Satzadresse aus Inhaltsbeschreibung.

22 Kapitel 6.3.1 Hash-Funktion

23 Hashverfahren: Grundprinzip
Transformation eines kennzeichnenden Wertes (Schlüssel) in eine intern kontrollierte, logische Adresse. Die Transformationsfunktion wird als Hash-Funktion bezeichnet. S: Schlüsselraum (Menge aller möglichen Schlüsselwerte einer Satzmenge). N: Intervall der natürlichen Zahlen von 1 bis n (logischer Adressbereich). h: S  N Hash-Funktion total.

24 Hashverfahren im Hauptspeicher
Mit dem aus dem Schlüssel berechneten Hashwert kann – im Idealfall – direkt ohne weitere Hilfsstrukturen auf den gesuchten Datensatz zugegriffen werden. Abweichung vom Idealfall: Sei Kt die Menge der zu einem Zeitpunkt t benutzten Schlüssel Kt  S, |Kt|  |S| Wirtschaftlich nur N  |Kt| Zudem starke Ungleichverteilung von Kt in S möglich. Dann ist h nicht injektiv: k, k'  Kt sind synonym  h(k) = h(k') Kollision: Aufeinandertreffen synonymer Schlüssel. Zahlreiche Verfahren unterschiedlicher Leistungsfähigkeit zur Kollisionsbehandlung bekannt.

25 Hashverfahren bei DBS Gute Speichernutzung: Mehrere Synonyme pro Seite  Synonyme werden unsortiert, Position beliebig geballt. Daher: N: Intervall von Seitennummern; h(k): Seite für Datensätze mit Schlüsselwert k. Hier Kollision: k und k' sind synonym, und h(k) ist bereits voll. Ziel: Anzahl der Seitenzugriffe nahe 1. Daher auch hier Kollisionen unerwünscht. Gesucht: Hash-Funktion, die stets eine gute Ausnutzung des Speicherraums N und eine gleichförmige Seitenbelegung garantieren soll. Aus wertbasierter Satzmengensicht: gestreute Satzplatzierung.

26 Hash-Funktion Divisionsrestverfahren (Restklassenbildung):
k  S: Bitdarstellung als ganze Zahl interpretiert h(k) = k mod q, q größte Primzahl  |N| Es sollte gelten: q  a bn c (a, c kleine ganze Zahlen, b Zahlensystem des Rechners), q soll also nicht nahe einer Potenz des Zahlensystems liegen (z.B. q 127), weil sonst die niedrigen Stellen des Schlüssels zu stark ins Gewicht fallen. Faltung: 1. Zerlegung von k in einzelne Bestandteile 2. Deren Verknüpfung additiv, multiplikativ oder logisch 3. Auswahl von t Bitpositionen aus dem Ergebnis, wobei 2t = |N|

27 Hash-Funktion Empfohlen: Divisionsrestverfahren, evtl. kombiniert mit Faltung. Beispiel: Faltung mit XOR und Divisionsrestverfahren modulo 5 Beispieldatei und Hashwerte für Schlüsselfeld Color: „Schlechte“ Wahl von q!

28 Hash-Funktion Einige weitere Verfahren:
Tabellentransformation: Schlüssel wird zunächst byteweise mit Hilfe einer Tabelle mit „zufälligen“ Zeichenkombinationen umgesetzt, um Regelmäßigkeiten zu „zerstören“. Basistransformation: Schlüssel wird zunächst als Ziffernfolge einer anderen Basis dargestellt (bei num. Schlüsseln!). Danach wieder Divisionsrestverfahren. Codierungsmethode: Schlüssel mit n Bits Länge wird aufgefasst als Polynom vom Grad n –1 (die Bits stellen die Koeffizienten dar). Polynom wird durch Polynom vom Grad t geteilt. Der verbleibende Rest (Polynom von Grad t –1) wird als Hashadresse interpretiert. Verfahren kann mit Fehlererkennung kombiniert werden. Zufallsmethode: Erzeugung der Hashadresse über Zufallszahlengenerator, mit Schlüssel als „Saat“.

29 Statische Hash-Verfahren
Kapitel 6.3.2 Statische Hash-Verfahren

30 Charakterisierung Hash-Bereich N und damit h liegen fest. Forderungen an h: Gleichförmige Schlüsselverteilung: Jede Seite soll etwa dieselbe Zahl unterschiedlicher Schlüsselwerte als Urbilder besitzen. Gleichförmige Satzverteilung: Jede Seite soll etwa dieselbe Zahl an Sätzen aufnehmen. Operationen: Suche: Berechne h(k), evtl. Suche gemäß Kollisionsauflösung. Einfügen: Berechne h(k), evtl. Kollisionsauflösung. Löschen: Suche, dann Entfernen, evtl. Bereinigung. Statische Reorganisation. Problem: Man kennt nur S, nicht aber Kt . Bei Ungleichverteilung widersprechen sich die Forderungen.

31 Kollisionsbehandlung
Überlaufbehandlung von Seiten: Auflösung innerhalb des Hash-Bereichs: Offene Adressierung: Lineares und quadratisches Sondieren Auflösung durch getrennte Überlaufbereiche: Verkettung mit zusätzlichen Seiten außerhalb Hash-Bereich. Globalen Überlaufbereich vermeiden! Kollisionsminderung nach Löschvorgängen: Dynamische Reorganisation: aufwendig, hält aber Zahl der Seitenzugriffe klein. Setzen von Löschmarken und periodische statische Reorganisation: weniger aufwendig, Zahl der Seitenzugriffe wächst jedoch bis zur Reorganisation.

32 Beispiel für Überlaufseiten (1)
|N|=5, Seitenkapazität = 3 Getrennter lokaler Überlaufbereich

33 Beispiel für Überlaufseiten (2)
Seitennummer 20 „red“ 80 „blue“ 1 90 „rose“ 2 30 „brown“ 3 40 „black“ 70 „gray“ 50 „white“ 60 „green“ 4 10 „yellow“

34 Kollisionsbehandlung
Überlaufbehandlung von Seiten: Auflösung innerhalb des Hash-Bereichs: Offene Adressierung: Lineares und nichtlineares Sondieren Auflösung durch getrennte Überlaufbereiche: Verkettung mit zusätzlichen Seiten außerhalb Hash-Bereich. Globalen Überlaufbereich vermeiden! Kollisionsverminderung nach Löschvorgängen: Dynamische Reorganisation: aufwendig, hält aber Zahl der Seitenzugriffe klein. Setzen von Löschmarken und periodische statische Reorganisation: weniger aufwendig, Zahl der Seitenzugriffe wächst jedoch bis zur Reorganisation.

35 Sondieren (1) Für einen Schlüssel k wird überprüft, ob die Seite g(k,0) = h(k) noch über Platz verfügt. Ist dies nicht der Fall, so berechnet man Seiten g(k,1), g(k,2),... und untersucht diese. Beim linearen Sondieren ist g(k,i)=(h(k)+ic) mod q, (c eine Konstante, beispielsweise c=1) Bei hoher Kollisionsrate hoher Aufwand bei Platzierung und Suche! 35

36 Kann Quelle von Sekundärkollisionen werden!
Sondieren (2) Seitennummer 20 „red“ 80 „blue“ 1 90 „rose“ 2 30 „brown“ Kann Quelle von Sekundärkollisionen werden! 3 40 „black“ 50 „white“ 60 „green“ 4 10 „yellow“ 70 „gray“

37 Anpassbares Sondieren mit Separatoren
Ziel: Auch bei Überlauf nur 1 Seitenzugriff. Skizze des Verfahrens (Härder/Rahm, S ): Satz mit Schlüssel k habe die Sondierungsfolge g(k,0) (=h(k)), g(k,1), ..., g(k,n). Erzeuge dazu gleichverteilte Signaturfolge s0(k), s1(k), ..., sn(k). (Signatur: Bitfolge fester Länge). Jeder Seite j ist dynamischer Separator SEP(j) zugeordnet. Suche: Sondiere bis si(k)<SEP(g(k,i)). Seite enthält gesuchten Satz. Liste der Separatoren im Hauptspeicher, daher erfolgt dort der Vergleich nur 1 Seitenzugriff! Einfügen: Lokalisiere Seite wie bei der Suche. Seite nicht voll: Einfügen. Seite voll: Verschiebe Satz mit höchster Signatur (mehrere bei identischer Signatur, kann auch der aktuelle Satz sein): Kaskadieren möglich! Setze SEP(g(k,i)) auf niedrigste abgewiesene Signatur.

38 Bewertung Wahl von Hash-Algorithmus und Überlaufbehandlung kritisch:
Beeinflusst von konkreter Anwendung (Ladereihenfolge!) und Seitenkapazität  Standardverfahren schwierig! Such- oder Einfügeaufwand steigt stark an, sobald |Kt| in die Nähe von |N|Seitenkapazität kommt. Jedoch: Zugriffsfaktor < 1.5 von keiner anderen Zugriffstruktur zu schlagen. Abhilfen: Große Wahl von |N| schon von Anfang an (Platzverschwendung zu Beginn oder - bei Nichteintreten des erwarteten Wachstums - auf Dauer). Statische Reorganisation mit völliger Neuverteilung der Adressen (sehr hoher Zeitbedarf, längere Betriebsunterbrechung, Anpassen unzähliger Verweise). Dynamische Verfahren.

39 Dynamische Hash-Verfahren
Kapitel 6.3.3 Dynamische Hash-Verfahren

40 Ziele Skalierbarkeit: Zugriffsfaktor  2 unabhängig von |Kt|.
Zahl der zur Verfügung stehenden Seiten wird kontinuierlich dem aktuellen Bedarf angepasst. Hoher Belegungsfaktor unabhängig vom Wachstum der Schlüsselmenge.

41 Lineares Hashing Grundidee: Statt einer einzigen Hash-Funktion h: S  N eine Familie von Hash-Funktionen hi: S  {0,...,2iN-1}, i{0,1,2,...}. Bedingungen (h0(k){0,1,2,..., N-1}): hi+1(k) = hi(k) für etwa die Hälfte der kS. hi+1(k) = hi(k)+ 2iN für die andere Hälfte. Beispielsweise erfüllt für hi(k):=kmod(2iN) Zu jedem Zeitpunkt sind für einen Hash-Bereich höchstens zwei „benachbarte“ Hash-Funktionen zuständig. Parameter für die aktuelle Speicherung: Level lv: „unteres“ i. Split-Zeiger sp auf die nächste zu teilende Seite.

42 Lineares Hashing Vergrößern des Speicherbereiches:
lv=0, N=5, max.Blockung=4 105 111 512 413 144 790 076 477 243 335 837 888 995 002 Primärbereich Überlaufseiten 055 117 h h h h h0 Vergrößern des Speicherbereiches: Füge neue Seite am Ende an; Verteile Sätze auf Seite sp gemäß hlv+1 auf alte und neue Seite; sp:=sp+1; if sp= 2lvN then {lv:=lv+1; sp:=0}

43 Lineares Hashing sp lv=0, N=5, max.Blockung=4 0 1 2 3 4 Primärbereich
105 111 512 413 144 790 076 477 243 335 837 888 995 002 Primärbereich 010 Überlaufseiten 055 117 h h h h h0 h h h h h h1 sp 790 111 512 413 144 105 010 076 477 243 335 837 888 995 002 055 117

44 Lineares Hashing Suchen nach Schlüssel k: s:= hlv(k);
if s < sp then s:= hlv+1(k); // Seite schon gesplittet, daher neue Hash-Funktion anwenden // Beispiel: k=790 h h h h h h1 sp 790 111 512 413 144 105 010 076 477 243 335 837 888 995 002 055 117

45 Bewertung Da der Reihe nach gesplittet werden muss, werden u.U. Seiten mit niedrigem Füllgrad gesplittet. Überlaufseiten werden nicht vermieden und u.U. zu spät beseitigt. Split-Kriterium liegt nicht fest und belässt Spielräume einschließlich raschem Fortbewegen des Split-Zeigers. Gesucht: Verfahren, das diese Probleme umgeht.  Bringt ein Index etwas?

46 Kapitel 6.4 Index-Verfahren

47 Indexteil mit Wegweisern
Grundgedanke Kriterium Zugriffspfad Zugriff Erschöpfendes Aufzählen nach Position Reihenfolge Iterieren (scan) über alle Datensätze:. Operation first für den Zugriff auf den ersten, next für den Zugriff auf den folgenden Datensatz. Position Positionsbestimmung Direkter Zugriff Einzelner Schlüsselwert Werte der Schlüsselfelder Kombinierte Schlüsselwerte Erschöpfendes Aufzählen nach Schlüsselwert Reihenfolge nach Werten der Schlüsselfelder Iteration über die Datensätze in auf- oder absteigender Sortierreihenfolge Indexteil mit Wegweisern Satzmenge physisch gespeichert nach eigenständigem Verfahren (Ballung, Adressrechnung)

48 Kapitel 6.4.1 Zeigerfelder

49 Zeigerfeld P123 P204 P317 Satz 2 Satz 1 Satz 3 Das Zeigerfeld (Pointer Array) enthält für jeden Datensatz einen Eintrag („Stellvertreter“) mit einem Verweis auf den Datensatz. Das Zeigerfeld bildet einen eigenen Datensatz. Falls es größer als eine Seite wird, wird es als großer Datensatz verwaltet.

50 Zeigerfeld Die Anordnung der Stellvertreter kann unabhängig von der Anordnung der Datensätze gewählt werden  z.B. Aufprägen einer logischen Ordnung auf eine physische (geballte) Ordnung. Zugriff über Zeigerfeld: Aufwand fest 2 Seitenzugriffe. Sequenzielle Zugriffe: Aufgreifen der Verweise der Reihe nach. Direkte Zugriffe über die Position. Eine (zusätzliche) Sortierung der Datensätze wird durch eine entsprechende Sortierung der Einträge des Zeigerfeldes hergestellt. Suche eines Datensatzes über Binärsuche auf Zeigerfeld, ansonsten sequenzielles Durchsuchen. Suche kann beschleunigt werden, wenn zu jedem Verweis der Schlüssel des entsprechenden Datensatzes in dem Zeigerfeld gespeichert wird.

51 Multizeigerfeld Bei einem Multizeigerfeld existiert ein Zeigerfeld für jeden Zugriffspfad. P123 P204 P317 Satz 1 Satz 2 Satz 3

52 Erweiterbares Hashing
Kapitel 6.4.2 Erweiterbares Hashing

53 Grundgedanke 1-stufig Indexteil mit Wegweisern
Untersetzung des Seitenwachstums in Indexwachstum 1-stufig Bestimmung der Einträge mittels Adressrechnung Gruppierung Platzierung der Sätze gemäß Adressrechnung Gezieltes Splitten an der Bedarfsstelle

54 Vorgehensweise 1. Berechne Hashwerte h(k) (Pseudoschlüssel) für die Schlüssel k. 2. Gruppierung: Fasse diejenigen Pseudoschlüssel zusammen, die in den niedrigsten d' Bits übereinstimmen, derart, dass diese Pseudoschlüssel auf eine Seite passen (lokale Tiefe, für verschiedene Seiten u.U. verschieden). 3. Bestimme d = max(d') über alle Seiten (globale Tiefe). 4. Lege Index mit Einträgen für die Bitfolgen der Länge d an. 5. Läuft eine Seite über, setze deren d' um 1 herauf, verteile alten Seiteninhalt über zwei Seiten. 6. Falls d dadurch um 1 wächst, lege neuen Index mit doppelter Zahl von Einträgen an.

55 Beispiel

56 Beispiel Annahme: Seitenkapazität = 3 Datensätze.
dynamische Grenzlinie “red“ 20 “green“ 60 “rose“ 90 “gray“ 70 “yellow“ 10 “brown“ 30 “blue“ 80 “black“ 40 “white“ 50 *0 *1 *01 *11 *011 *111

57 Beispiel dynamische Grenzlinie 1 *0 *0 2 *1 *01 *01 3 *011 *11 *011
“red“ 20 “green“ 60 “rose“ 90 “gray“ 70 “yellow“ 10 “brown“ 30 “blue“ 80 “black“ 40 “white“ 50 1 2 3 seiten-lokale Tiefe *0 *111 *011 *01 *0 *1 *01 *11 *011 *111

58 Beispiel 1 2 3 globale Tiefe 3 *111 *011 *01 *0 “red“ 20  “green“ 60
“rose“ 90 “gray“ 70 “yellow“ 10 “brown“ 30 “blue“ 80 “black“ 40 “white“ 50 1 2 3 seiten-lokale Tiefe globale Tiefe 3 *111 *011 *01 *0 *000 *001 *010 *100 *101 *110 *111 *011

59 Beispiel Einfügen des Datensatzes [11, “yellow“, ]:
Seite ist voll, und lokale Tiefe < globale Tiefe „normales“ Spalten der Seite. “red“ 20 “green“ 60 “rose“ 90 “gray“ 70 “yellow“ 10 “brown“ 30 “blue“ 80 “black“ 40 “white“ 50 1 2 3 seiten-lokale Tiefe globale Tiefe 3 *111 *011 *01 *0 *000 *001 *010 *100 *101 *110 *111 *011

60 Beispiel Einfügen des Datensatzes [21, “red“, ]: 2
10 “yellow“ Seite ist voll, und lokale Tiefe = globale Tiefe  Spalten der Seite + Verdopplung der Zwischentabelle 11 “yellow“ *00 2 30 “brown“ 80 “blue“ *10 globale Tiefe 3 *000 2 70 “gray“ *001 *01 *010 *011 3 20 “red“ *100 60 “green“ *011 *101 90 “rose“ *110 3 40 “black“ *111 50 “white“ *111

61 Beispiel 2 *00 2 *10 2 *01 4 *0011 4 *1011 3 *111 10 “yellow“  11
globale Tiefe 4 2 *0000 30 “brown“ *10 *0001 80 “blue“ *0010 2 *0011 70 “gray“ *0100 *01 *0101 *0110 4 *0111 20 “red“ *1000 *0011 *1001 21 “red“ *1010 *1011 60 “green“ 4 *1100 90 “rose“ *1011 *1101 *1110 3 *1111 40 “black“ 50 “white“ *111

62 Kapitel 6.4.3 B+-Baum

63 B+-Baum: Kombination der beiden folgenden Strukturen
Grundgedanke B+-Baum: Kombination der beiden folgenden Strukturen Effizienter direkter Zugriff nach Schlüssel B-Baum gleicher Schlüssel vorausgesetzt Sortierte geballte Liste mit Doppelverkettung der Seiten in Sortierordnung Effizienter sequentieller Zugriff in Sortierreihenfolge

64 Baumförmige Anordnungen
Ziel: Anzahl der Seitenzugriffe auch bei unbekanntem Zugriffsverhalten gering halten. Vorgehensweise: Schrittweise und zugleich starke Begrenzung des Suchbereichs. Führt auf Baumstruktur. Forderung: Alle für DB-Zugriff relevanten baumstrukturierten Organisationsformen müssen für Seitenstrukturen konzipiert sein. Umsetzung: Jeder Schritt beinhaltet einen Zugriff auf eine Seite, auf der dann eine große Zahl von Suchschritten im Hauptspeicher vollzogen werden (Wiederholte Ballung!). 1:1-Zuordnung von Knoten des Baums und Seite.

65 Mehrwegbäume Sei s Zahl der Wahlmöglichkeiten pro Seite und N die Gesamtzahl der Sätze. Dann ist die Anzahl der Seitenzugriffe beim Fortschreiten in einem ausgewogenen Baum O(logs(N)). Damit bei direktem Zugriff nur auf wenige Seiten zugegriffen werden muss, ist ein sehr hoher Verzweigungsgrad der Wurzel und der internen Knoten anzustreben. s = 2 Binärbaum Ziel: s > 100 Mehrwegbaum Wahl von s im Bereich 100 bis 500. Damit lässt sich selbst bei hoher Skalierung die Höhe eines Mehrwegbaums auf 3 bis 4 begrenzen. Eine Höhe über 4 kommt praktisch nie vor.

66 B-Baum (1) B-Baum Baue Index auf den Separatorschlüsseln auf …
Wähle Separatorschlüssel SS so dass alle Schlüssel  SS alle Schlüssel > SS

67 Beispiel (s=6) 277 409 578 740 910 65 123 143 231 241 278 361 356 386 399 420 469 501 520 534 597 622 679 701 712 780 822 831 834 878 923

68 Anfragearten Exact Match Queries (EMQ): Range Queries (RQ):
select A1,A2,...,An from R where Ai = c Range Queries (RQ): select A1,A2,...,An from R where Aic2 and Aic1 S S S S B+-Baum deckt beide Arten gleichzeitig sehr gut ab.

69 Leistungsbetrachtung
Interessenskonflikt: Geringer Zugriffsaufwand: Der Baum ist balanciert, um ein ausgewogenes Zugriffsverhalten zu garantieren. Die Datensätze sind möglichst kompakt auf wenigen Seiten gespeichert, d.h. der Füllgrad der Seiten ist möglichst hoch. Geringer Änderungsaufwand: Keine hohen Anforderungen an Balance und/oder Füllgrad. Kompromisslösung erforderlich: Wiederherstellen der Balance und/oder eines hohen Füllgrads sollte auf einen möglichst kleinen Teil des Baums begrenzt bleiben.

70 B-Baum (2) Ein B-Baum vom Typ (k,h) ist ein leerer Baum oder ein Baum mit folgenden Eigenschaften: 1. Jeder Weg von der Wurzel zu einem Blatt hat die gleiche Länge h (Länge = Zahl der Knoten). h daher als Höhe bezeichnet. 2. Jeder Knoten j hat nj+1 Söhne. Ist der Knoten Wurzel so gilt 1  nj  2k, andernfalls k  nj  2k. 3. Jeder Knoten mit nj+1 Söhnen ist mit nj sortiert angeordneten (Separator-) Schlüsseln (Wegweisern) belegt. 4. Seien S1,…,Sn die Schlüssel eines Knotens j mit nj+1 Söhnen. Seien Z0, Z1, …, Zn die Zeiger auf diese Söhne. a) Z0 weist auf Teilbaum mit Schlüsseln kleiner oder gleich S1 b) Zi (i=1, …, nj-1) weist auf Teilbaum, dessen Schlüssel zwischen Si und Si+1 liegen und Si+1 einschließen können. c) Zn weist auf Teilbaum mit Schlüsseln größer Sn.

71 Interne Struktur der Knoten
Aufbau eines Knotens: Z0 S1 Z1 S2 Sn Zn frei Wegweiser Sohnzeiger In den Blattknoten verweisen die Sohnzeiger auf die Seiten einer außerhalb des Baumes geführten sortierten geballten Liste. Annahme: Die sortierte geballte Liste wird nach dem früher beschriebenen Seitensplit-Verfahren verwaltet. Charakterisierung durch Konstante k*: Jede Seite enthält mindestens k* und höchstens 2k* Datensätze.

72 Beispiel Beispiel: Schlüssel (eindeutig) Datensätze
(Annahme: gleiche, unveränderliche Länge)

73 Beispiel Annahme: k=2, k*=1 Höhe h eines B+-Baums mit N Datensätzen:
Strukturelle Sicht: Separator Höhe(B-Baum) = 1) Höhe(B+-Baum) = 2) 25 45 65 75 Zugriffssicht: Wegweiser 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ... 73

74 Baumhöhe Höhe h eines B+-Baums mit N Datensätzen: Ein Knoten wird auf irgendeiner frei wählbaren Seite des Segmentes gespeichert. Folge: h beschreibt maximale Anzahl der Seitenzugriffe bei direktem Zugriff. Niedriges h ist anzustreben, somit hoher Verzweigungsgrad notwendig. Verzweigungsgrad ist von k abhängig, k von der Schlüssellänge! Errechne sich die maximal mögliche Zahl der Einträge pro Seite zu m. Dann ist k = (m/2). Bei gegebenem k ist Verzweigungsgrad vom Füllgrad der Datenseiten und Blattknoten abhängig. 74

75 Abschätzung der Baumhöhe
Obere Grenze für die Anzahl der Knoten, die schlimmstenfalls in Abhängigkeit von der Knotengröße und der Anzahl der Datensätze zu lesen sind:

76 Suche suche (s); seite p := wurzel; do eintrag := 0;
while s > eintrag.separator and eintrag < Zahl der Einträge do eintrag+; if eintrag = Zahl der Einträge then p := letzter Zeiger auf Seite else p := eintrag.zeiger; until p verweist auf Seite mit Datensatz; end suche; // p verweist auf Seite mit Satz mit Schlüssel s // 25 45 65 75 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 80 ... 90 ...

77 Einfügen eines Datensatzes
Einfügen eines neuen Datensatzes erfordert 2 Phasen: 1. Suche mit dem Schlüssel des neuen Datensatzes. 2. Falls (gefunden und Schlüssel nichteindeutig) oder falls nicht gefunden: Einfügen des neuen Datensatzes in die Ergebnisseite der Suche. Falls die Seite überläuft, wird sie gespalten. Dabei wird ein neuer Separator-Schlüssel bestimmt und in den Indexbaum eingefügt. Hierbei kann es zu einem weiteren Überlauf kommen. Dann wird auch der Indexknoten gespalten, ein Separator-Schlüssel bestimmt, und das Verfahren setzt sich u.U. mehrfach nach oben fort. Wenn sogar die Wurzel überläuft, wird auch sie gespalten mit der Folge: Der Baum wächst in der Höhe um 1. Neubalancierung durch Wachstum nach oben

78 Beispiel Einfügen eines Datensatzes mit Schlüssel 74: k=2, k*=1 74 ...
25 45 65 75 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 74 ... 80 ... 90 ... k=2, k*=1

79 Beispiel Einfügen eines Datensatzes mit Schlüssel 51: Überlauf
51 ... 25 45 65 75 Überlauf 10 ... 20 ... 30 ... 40 ... 50 ... 60 ... 70 ... 74 ... 80 ... 90 ... k=2, k*=1

80 Beispiel Einfügen eines Datensatzes mit Schlüssel 51: Überlauf
25 45 65 75 Neuer Separator: 55 10 ... 20 ... 30 ... 40 ... 50 ... 51 ... 70 ... 74 ... 80 ... 90 ... 60 ... k=2, k*=1

81 Beispiel Einfügen eines Datensatzes mit Schlüssel 51: k=2, k*=1 55 25
45 65 75 10 ... 20 ... 30 ... 40 ... 50 ... 51 ... 70 ... 74 ... 80 ... 90 ... 60 ... k=2, k*=1

82 Spalten der Wurzel Die Wurzel eines Baums ist der Einstiegspunkt in den Baum. Die Seitennummer des Wurzelknotens ist daher an verschiedenen Stellen der Datenbasis (bspw. in Katalogen, die die Zugriffsstrukturen verwalten) gespeichert. Wie kann man vermeiden, dass beim Spalten der Wurzel sehr viele (unbekannte) Verweise ersetzt werden müssen? Die Seite zur Aufnahme der Wurzel bleibt über die gesamte Lebensdauer eines B+-Baums erhalten. Beim Anlegen eines neuen Wurzelknotens werden die Einträge der bisherigen Wurzel auf zwei neuen Seiten verteilt, und der neue Wurzelknoten wird auf der bisherigen Wurzel-Seite gespeichert.

83 Spalten der Wurzel P123 P123 P401 P532

84 Entfernen von Datensätzen
Das Entfernen von Datensätzen beginnt immer in der geballten Liste. Entfernen ohne weitere Auswirkung: Index nicht betroffen. Entfernen mit Satzverschiebung (z.B. bei Ausgleich): Wähle neuen Separatorschlüssel. Ersetze alten Separatorschlüssel durch neuen überall wo er im Baum vorkommt. Entfernen mit Verschmelzen von Seiten: Entferne alten Separatorschlüssel aus dem entsprechenden Blattknoten. Gelegentlich kann dies dort einen Unterlauf bewirken. Insbesondere kann sich das Verschmelzen von Knoten bis zur Wurzel fortsetzen. Folge: Der Baum schrumpft in der Höhe um 1.

85 Beispiel Entfernen eines Datensatzes mit Schlüssel 60: X Unterlauf
55 25 45 65 75 10 ... 20 ... 30 ... 40 ... 50 ... 51 ... 70 ... 74 ... 80 ... 90 ... X Unterlauf k=2, k*=1, Annahme min 0,5 60 ...

86 Beispiel Entfernen eines Datensatzes mit Schlüssel 60: X X Unterlauf
55 Unterlauf X 25 45 65 75 X 10 ... 20 ... 30 ... 40 ... 50 ... 51 ... 70 ... 74 ... 80 ... 90 ... k=2, k*=1, Annahme min 0,5

87 Beispiel Entfernen eines Datensatzes mit Schlüssel 60:
25 45 55 75 10 ... 20 ... 30 ... 40 ... 50 ... 51 ... 70 ... 74 ... 80 ... 90 ... k=2, k*=1, Annahme min 0,5

88 Geringere Füllgrade (1)
min < 50% kann sinnvoll sein: Da Einfügen gegenüber Entfernen dominiert, belässt man es beim Löschen des Satzes. Spalten mit Vorausschau: Spalte so, dass zukünftige Einfügungen von Datensätzen möglichst gleichmäßig auf die beiden durch den Separatorschlüssel getrennten Teilbäume verteilt werden.

89 Geringere Füllgrade (2)
Einfügen von „19“, k=3. Vergleiche: Schlecht falls Gleichverteilung der Schlüssel, da sich sehr viele Datensätze im rechten Teilbaum ansammeln werden, so dass dort sehr viele Spaltungen vorkommen werden. 20 21 22 23 24 90 19 Vorteil: Auf lange Sicht guter Separatorschlüssel, da der „Schlüsselraum“ in zwei gleich große Teile geteilt wird. Nachteil: Kurzfristige Gefahr des Überlaufens der linken Seite, da diese sehr stark gefüllt ist. 20 21 22 23 24 90 55 19

90 Physikalisch beliebig gespeicherte Satzmenge
Verallgemeinerung Aufgabe: Aufprägen eines weiteren Schlüssels B*-Baum: Kombination der Strukturen B+-Baum B-Baum Sortierte geballte Stellvertreter-Liste mit Doppelverkettung der Seiten Physikalisch beliebig gespeicherte Satzmenge

91 Begriffe: B-, B+- und B*-Baum
Vorsicht: Die Begriffe werden in der Literatur sehr uneinheitlich verwendet. Die hier verwendete Terminologie dient der klaren Abgrenzung, weicht aber von einem Teil der Literatur ab. 91

92 Beeinflussung der Höhe (1)
Zur Erinnerung: Höhe h bestimmt Performanz. h hängt von Verzweigungsgrad ab, Verzweigungsgrad ist proportional Füllgrad β. Füllgrad ist bei jeder Seite außer Wurzel: β  min, üblich min = 50%. Ungünstigster Fall: Sequenzielles Laden der geballten Liste sortiert nach auf- oder absteigenden Schlüsseln: β = 50%. Mittlerer Füllgrad bei zufälligem Einfügen und Löschen: β = 69%. Verbesserung durch Verzögerung des Spaltens von Seiten: Spalten erst, wenn m um den Einfügepunkt gruppierte Knoten voll sind: β  m  (m+1). Abändern des Einfügealgorithmus mit Inspektion der Nachbarknoten und Ausgleich der Knotenbelegung. Nachteil: Höhere Einfügekosten, steil ansteigend für m > 3.

93 Beeinflussung der Höhe (2)
Zur Erinnerung: Höhe h bestimmt Performanz. h hängt von Verzweigungsgrad ab, Verzweigungsgrad ist proportional Wert von k. Vergrößerung von k durch Vergrößerung der Seitengröße. Seitengröße selten beeinflussbar. Vergrößerung von k bei unveränderter Seitengröße: Einsatz von Verfahren zur Schlüsselkomprimierung.

94 Wahl eines Separatorschlüssels
Separatorschlüssel muss automatisch bestimmt werden können: Übernahme aus den Datensätzen: Üblich ist die Verwendung des höchsten Schlüssels auf der Seite. Systematische Konstruktion von Separatoren minimaler Länge. Kann mit Schlüsselkomprimierung kombiniert werden.

95 Schlüsselkomprimierung
Zeichenkomprimierung durch Beseitigen von Redundanzen 1. Maßnahme: Entfernen führender Nullen und abschließender Zwischenräume. 2. Maßnahme: Schlüsselvergleiche mit Weglassen der für die Unterscheidung unerheblichen Teile. Folge: Variable Schlüssellänge k variabel über Knotenmenge und zeitlich schwankend über Knoten. Seiten-Spalten dann nicht mehr über Zahl der Einträge, sondern nach der Speicherbelegung.

96 Präfix-Suffix-Komprimierung
Die Schlüssel einer Seite werden fortlaufend komprimiert derart, dass nur der Teil des Schlüssels vom Zeichen, in dem er sich vom Vorgänger (Position V) unterscheidet, bis zum Zeichen, in dem er sich vom Nachfolger (Position N) unterscheidet, zu übernehmen ist (front and rear compression). Eintrag enthält Anzahl F = V – 1 der Zeichen des Schlüssels, die mit Vorgänger übereinstimmen (erster Eintrag: F = 0) Länge L = max(N – V, 0) + 1 des komprimierten Schlüssels dazugehörige Zeichenfolge

97 Beispiel Aufsuchalgorithmus (mit Kellermechanismus) kann zwar nicht die Schlüssel in ihrer Gänze, aber doch bis zur Eindeutigkeitslänge rekonstruieren.

98 Mehrdimensionale Indexe
Kapitel 6.5 Mehrdimensionale Indexe

99 Kapitel 6.5.1 Vorüberlegungen

100 Anfragearten Wertbasierter Zugriff auf der Grundlage mehrerer Attribute, dies einzeln oder in beliebigen Kombinationen. 1. Exact Match Query spezifiziert Suchwert für jede Dimension Di 2. Partial Match Query spezifiziert Suchwert für einen Teil der Dimensionen 3. Range Query spezifiziert ein Suchintervall [ugi, ogi ] für jede Dimension 4. Partial Range Query spezifiziert ein Suchintervall für einen Teil der Dimensionen relation PERS (PNR, PNAME, ANR, GEBJAHR, ORT) Partial Match Query: ANR =„K55“ GEBJAHR = 1945  ORT = „KA“ Partial Range Query: GEBJAHR  1940  GEBJAHR  1950

101 Mehrere eindimensionale Indexe
Lösung mit eindimensionalen Indexen Erfordert Indexe auf Stellvertretersätzen. Konjunktive Zerlegung von Anfragen in Einattributanfragen mit nachfolgender Schnittmengenbildung über den Stellvertretern. Flexible Lösung auf der Grundlage von Standardverfahren. Performanz?

102 Mehrdimensionale Datenstrukturen
Wertebereiche D0,..., Dk-1: alle Di sind endlich, linear geordnet und besitzen kleinstes (-i) und größtes (i) Element Datenraum D = D0...Dk-1 k-dimensionaler Schlüssel entspricht Punkt im Datenraum, p  D

103 Kapitel 6.5.2 Lineare Einbettungen

104 Lineare Einbettungen Bevorzugung von Range Queries: Linearisierung unter Bewahren mehrdimensionaler Nachbarschaftsverhältnisse. Transformation von Mengen mehrdimensionaler Punktobjekte in eindimensionale Folge unter möglichst gutem Erhalten der topologischen Struktur. Anschließend Abbildung auf eindimensionale Struktur, z.B. B*-Baum. Möglichkeiten der Transformation: Partitionieren des Datenraums durch gleichförmiges Raster. Jede Zelle besitzt Nummer, die ihre Position in der linearen Ordnung definiert. Definition der linearen Ordnung mittels eindimensionaler Einbettung (space filling curve).

105 Wichtige Einbettungen
1 3 1 2 1 2 3 2 2 3 3 1 7 4 11 8 5 7 13 15 15 12 11 10 4 6 12 14 6 5 10 9 14 13 8 9 1 3 11 1 2 13 14 1 2 6 9 7 2 8 10 3 12 15 3 4 5 z-Ordnung Gray-Code Hilberts Kurve Nummerierung: Kurvennummern gemäß Abfolge auf der Kurve

106 Beispiel Hilbert-Kurve
Range-Query bzgl. dem Suchintervall [12, 38] x [1,29] Zu lesende Kurvennummern: 2, 3, 4, 5, 6, 7, 8, 9 und 13 Es bieten sich daher folgende Suchschritte an: Einstieg in Seite zu Kurvennummer 2 über Index Dann lineares Lesen der Seiten zu 2 bis 9 über Listenverkettung Einstieg in Seite mit Hilbertkurvennummer 13 über Index Index Kurvennummer  Seitenadresse 40 15 12 11 10 14 13 8 9 1 2 7 6 3 4 5 40 106

107 Beispiel Z-Kurve Range-Query bzgl. dem Suchintervall [12, 38] x [1,29]
Zu lesende Kurvennummern: 2, 3, 6, 8, 9, 10, 11, 12 und 14 Es bieten sich daher folgende Suchschritte an: Einstieg in Seite mit Z-Kurvennummer 2 über Index Dann lineares Lesen der Seiten zu 2 und 3 über Listenverkettung Einstieg in Seite mit Z-Kurvennummer 6 über Index Dann lineares Lesen der Seiten 6 bis 14 über Listenverkettung Index Kurvennummer  Seitenadresse 40 5 7 13 15 4 6 12 14 1 3 9 11 2 8 10 40 107

108 Kapitel 6.5.3 Raumstrukturen

109 Charakterisierung Charakterisierung gemäß der Art der Aufteilung des Datenraums in Gebiete: 1. nur atomare Gebiete (beschreibbar durch ein Rechteck) 2. vollständig (die Vereinigung aller Gebiete ergibt den gesamten Datenraum) 3. disjunkt (die Gebiete überlappen nicht) Grid-File (Gitter-Datei): atomar, vollständig, disjunkt

110 Charakterisierung Charakterisierung gemäß der Art der Aufteilung des Datenraums in Gebiete: 1. nur atomare Gebiete (beschreibbar durch ein Rechteck) 2. vollständig (die Vereinigung aller Gebiete ergibt den gesamten Datenraum) 3. disjunkt (die Gebiete überlappen nicht) K-D-B-Baum: atomar, vollständig, disjunkt

111 Charakterisierung Charakterisierung gemäß der Art der Aufteilung des Datenraums in Gebiete: 1. nur atomare Gebiete (beschreibbar durch ein Rechteck) 2. vollständig (die Vereinigung aller Gebiete ergibt den gesamten Datenraum) 3. disjunkt (die Gebiete überlappen nicht) R+-Baum: atomar, disjunkt

112 Charakterisierung Charakterisierung gemäß der Art der Aufteilung des Datenraums in Gebiete: 1. nur atomare Gebiete (beschreibbar durch ein Rechteck) 2. vollständig (die Vereinigung aller Gebiete ergibt den gesamten Datenraum) 3. disjunkt (die Gebiete überlappen nicht) R-Baum: atomar

113 Charakterisierung Charakterisierung gemäß der Art der Aufteilung des Datenraums in Gebiete: 1. nur atomare Gebiete (beschreibbar durch ein Rechteck) 2. vollständig (die Vereinigung aller Gebiete ergibt den gesamten Datenraum) 3. disjunkt (die Gebiete überlappen nicht) Z-B-Baum: vollständig,disjunkt

114 Varianten Quad-Baum (1974) KdB-Baum (1985)
Mehrdimensionaler B-Baum (1982) Z-B-Baum (1982) R+-Baum (1987) Buddy-Hash-Baum (1989) Grid-File (1984) Ausführlicher Überblick bei Härder/Rahm Kap. 9 Indextechniken sind auch heute noch ein intensiv bearbeitetes Gebiet der (Datenbank-)Algorithmik mit anwendungsspezifischer Ausrichtung!

115 Gitter-Datei (Grid File)
Kapitel 6.5.4 Gitter-Datei (Grid File)

116 Grundgedanke (1) Ansatz: Grundgedanke aus dem Erweiterbaren Hashing: Gleichförmige, dynamische Unterteilung des Schlüsselraums, um Zugriffsfaktor auf 2 zu begrenzen. Untersetzung des Seitenwachstums in in Breitenwachstum des Index Indexteil mit Wegweisern 1-stufig Bestimmung der Einträge mittels Raumpunktrechnung Datenseiten Platzierung der Sätze gemäß Raumpunktrechnung Gezieltes Splitten an der Bedarfsstelle

117 Grundgedanke (2) Gitterbildung durch Einteilung der Achsen in Intervalle. Eine Partitionierung einer Dimension Di ist gegeben durch einen Vektor, der die Einteilung in Intervalle definiert: Pi = (di,0, di,1,...,di,ki) ::= [-i, di,0], (di,0, di,1],...,(di,ki, i] Gleichförmige Speicherplatzbelegung durch Anpassung des Gitters an die Dichte des Datenraums D = D0… Dk-1. Modifikation einer Gitter-Partition erfolgt durch Änderung entlang einer Dimension (Spalten oder Zusammenlegen). D1 d1,2 d1,1 d1,0 d0,0 d0,1 d0,2 D0 d0,2

118 Prinzip der zwei Plattenzugriffe: KatalogSeite
Grid-File-Struktur Menge von Seiten zur Speicherung von Datensätzen. Jede Seite kann bis zu c Sätze speichern. Katalogstruktur (Grid Directory): Repräsentation des Gitters. Zentrale Datenstruktur des Grid File. Aufgabe: Definition und Wartung der dynamischen Beziehungen zwischen den Gitter-Gebieten des abstrakten Satzraums und den gespeicherten Sätzen auf den Seiten. Prinzip der zwei Plattenzugriffe: KatalogSeite D1 d1,2 d1,1 d1,0 d0,0 d0,1 d0,2 D0

119 Seitenorganisation (1)
Zuordnung von Seiten zu Gitter-Gebieten: Für eine gute Seitenbelegung erfolgt wie beim Erweiterbaren Hashing eine n:1-Zuordnung zwischen Gitter-Gebieten und Seiten. „Bereich“ von Seite B: Menge der Gitter-Gebiete, die B zugeordnet sind. Seiten Gitter-Gebiete (Gridblöcke)

120 Seitenorganisation (2)

121 Katalog-Struktur (1) Aufgabe des Katalogs: Darstellung und Verwaltung der dynamischen Beziehung zwischen den Gitter-Gebieten und den Seiten mit den gespeicherten Sätzen. Struktur des Katalogs: 1.Grid-Matrix: dynamische, k-dimensionale Matrix, deren Einträge die Beziehung zwischen Gitter-Gebieten, Bereichen und Seiten regeln. 2. k ein-dimensionale Vektoren, die jeweils eine Unterteilung einer Dimension definieren.

122 Katalog-Struktur (2) D0 FIND(K55,KL) D1 Grid-Matrix Seite K00 K17 K39
AA DA FR MK (K55,KL) ZZ Grid-Matrix Seite

123 Einfügen und Löschen (1)
Seitenkapazität: 3 Einträge Alternierende Spaltstrategie Registrieren mittels eines k-dimensionalen Buddy-Systems AA ZZ K99 K00 A Seite I(K54, DA) I(K02,AB) I(K87,ST) A Buddy-Anordnung

124 Einfügen und Löschen (2)
Seitenkapazität: 3 Einträge Alternierende Spaltstrategie Registrieren mittels eines k-dimensionalen Buddy-Baums AA ZZ K99 K00 K60 I(K54, DA) A I(K02,AB) I(K87,ST) B I(K75, MO) I(K55,KL) D(K54,DA) B I(K03,ZO) I(K15, DA) A

125 Einfügen und Löschen (3)
K00 K60 K99 I(K15, DA) I(K25,KA) I(K51,FR) AA A B JA B A C C ZZ K00 K99 K40 K60 AA A B I(K56, DA) B C JA C A D ZZ D

126 Verwaltung der Grid-File-Struktur
k-dimensionaler Buddy-Baum Erkennung der potenziellen Partner für Verschmelzen. Jede Seite hat einen eindeutigen Zwilling: Ein Zwillingspaar wird erzeugt, wenn sein Bereich geteilt wird. Verschmelzen in umgekehrter Reihenfolge. B C A D

127 Leistungsbetrachtungen
Grid-Matrix kann sehr groß werden und muss daher auf den Hintergrundspeicher ausgelagert und bei Zugriffen seitenweise eingelagert werden. Erzwingt Linearisierung der Matrix. Die k ein-dimensionalen Vektoren sollten unbedingt im Hauptspeicher gehalten werden. Alle Frageformen lassen sich zu Range Queries vereinheitlichen point query: Untergrenze = Obergrenze partially specified query: Für nicht spezifizierte Attribute: Untergrenze = Minimalwert (Domäne) Obergrenze = Maximalwert (Domäne) Linearisierung führt zu Ungleichbehandlung der Attribute bei Range Queries.

128 Kapitel 6.5.5 KdB-Baum

129 Grundstruktur (1) KdB-Baum Indexteil mit Wegweisern
Bessere Gleichbehandlung aller Attribute auch bei der Realisierung. KdB-Baum Satzmenge physisch gespeichert abhängig vom Index-Verfahren

130 Grundstruktur (2) KdB-Baum besteht aus einer Menge von Seiten und einem Verweis auf die Wurzel-Seite. 2 Arten von Seiten: R-Seiten enthalten eine Menge von Paaren (region, nachf) region: Spezifikation einer Region. nachf: Verweis auf Nachfolger-Seite im Baum. Die R-Seiten definieren die Aufteilung des Datenraums in Regionen. P-Seiten enthalten eine Menge von Paaren (punkt, location) punkt: Spezifikation eines Punktes. location: Verweis auf zugehörigen Datensatz (im Folgenden vereinfachend weggelassen). Die P-Seiten sind die Blätter des Baums.

131 Beispiel D0=D1=[0,..., 100), Seitenkapazität = 3 D1 ws
[0,100) x [50,100) [0,30) x [0,50) [30,100) x [0,50) 50 30 100 D0 1 R-Seite 3 P-Seiten

132 Grundstruktur (3) Definierende Eigenschaften
1. R-Seiten enthalten keine Null-Zeiger und sind nicht leer. 2. Die Länge aller Pfade von der Wurzel zu den Blättern (P-Seiten) ist identisch. 3. Alle Regionen in einer R-Seite sind disjunkt; ihre Vereinigung ergibt wieder eine Region. 4. Falls die Wurzel-Seite eine R-Seite ist, ergibt die Vereinigung ihrer Regionen den gesamten Datenraum. 5. Falls ein Eintrag (region, nachf) in einer R-Seite vorkommt, und a) nachf ist eine R-Seite, dann ist die Vereinigung aller Regionen in nachf gleich region. b) nachf ist eine P-Seite, dann liegen alle Punkte von nachf in region.

133 Vorbereitende Definitionen
Sei xi  Di und R = I0...Ik-1 eine Region mit Ii = [mini ,maxi), 0  i  k-1 Falls xi  Ii, definiere linke Teilregion von R bezüglich xi: leftregion (R, xi):= I0...[mini,xi)...Ik-1 rechte Teilregion von R bezüglich xi: rightregion (R,xi):=I0...[xi,maxi)...Ik-1 Falls xi  Ii, dann gilt R liegt links von xi gdw. maxi  xi R liegt rechts von xi gdw. xi < mini Sei p=(p0,..., pk-1)  D ein Punkt. Dann gilt p liegt links von xi gdw. pi < xi p liegt rechts von xi gdw. pi xi

134 Vorbereitende Definitionen
Sei xi  Di und R = I0...Ik-1 eine Region mit Ii = [mini ,maxi), 0  i  k-1 Falls xi  Ii, definiere linke Teilregion von R bezüglich xi: leftregion (R, xi):= I0...[mini,xi)...Ik-1 rechte Teilregion von R bezüglich xi: rightregion (R,xi):=I0...[xi,maxi)...Ik-1 Falls xi  Ii, dann gilt R liegt links von xi gdw. maxi  xi R liegt rechts von xi gdw. xi < mini Sei p=(p0,..., pk-1)  D ein Punkt. Dann gilt p liegt links von xi gdw. pi < xi p liegt rechts von xi gdw. pi xi R max1 min1 max0 min0 x0 D0 D1

135 Vorbereitende Definitionen
Sei xi  Di und R = I0...Ik-1 eine Region mit Ii = [mini ,maxi), 0  i  k-1 Falls xi  Ii, definiere linke Teilregion von R bezüglich xi: leftregion (R, xi):= I0...[mini,xi)...Ik-1 rechte Teilregion von R bezüglich xi: rightregion (R,xi):=I0...[xi,maxi)...Ik-1 Falls xi  Ii, dann gilt R liegt links von xi gdw. maxi  xi R liegt rechts von xi gdw. xi < mini Sei p= (p0,..., pk-1)  D ein Punkt. Dann gilt p liegt links von xi gdw. pi < xi p liegt rechts von xi gdw. pi xi R max1 min1 max0 min0 x0 D0 D1

136 Spalten von Seiten (1) Split (page, xi):
if page verweist auf eine R-Seite return (R-Split (page xi )); else return (P-Split (page, xi )); P-Split (page, xi): Erzeuge neue P-Seiten leftpage und rightpage; forall Punkte p in page: if p links von xi: Füge p in leftpage ein; else Füge p in rightpage ein; Lösche page; return (leftpage, rightpage);

137 Spalten von P-Seiten x0 D0 D1 D0 D1 leftpage x0 rightpage x0 D0 D1

138 Spalten von Seiten (2) R-Split (page, xi):
Erzeuge neue R-Seiten leftpage und rightpage; forall Paare (region, nachf) in page: if region links von xi: Füge (region, nachf) in leftpage ein; else if region rechts von xi: Füge (region, nachf) in rightpage ein; else begin (leftpage', rightpage'):= Split (nachf,xi); Füge (leftregion(region, xi), leftpage') in leftpage ein; Füge (rightregion(region, xi), rightpage') in rightpage ein; end; Lösche page; return (leftpage, rightpage);

139 Spalten von R-Seiten D0 D1 x0 D0 D1 x0 leftpage rightpage x0 D0 D1

140 Einfügen von Datensätzen
Insert (ws, p): // ws: Wurzelseite, p: ein Punkt // if ws=Null do begin Erzeuge neue P-Seite page; Füge p in page ein; Setze ws := page; return end; Führe Exact Match Query nach p durch; Ergebnis: Verweis auf Seite page, in die p eingefügt werden soll; if p schon in page do begin Sonderbehandlung; return end; if kein Überlauf von page do return;

141 Einfügen von Datensätzen
Marke M1; // Überlauf von page Wähle (erneut) eine Domain Di und einen Wert xi  Di so, dass durch das Splitten von page entlang xi zwei nicht volle Seiten entstehen; (leftpage, rightpage) := Split (page, xi) if page Wurzel-Seite ws do begin Erzeuge neue R-Seite newpage mit den Einträgen (D0… [-i,xi) …  Dk-1, leftpage) und (D0…  [xi,i) …  Dk-1, rightpage); Setze ws := newpage; return end; Sei parentpage die Vaterseite von page; Ersetze in parentpage(region, page) durch (leftregion(region, xi),leftpage) und (rightregion(region, xi), rightpage); if Seitenüberlauf von parentpage do begin Setze page := parentpage; goto M1 end; else return; end Insert ;

142 Einfügen von Sätzen D0=D1=[0,..., 100), Seitenkapazität = 3
Insert(ws,(75,80)) Insert(ws,(5,15)) Insert(ws,(20,40)) Insert(ws,(80,30)) D1 100 ws 50 100 D0 P-Seiten

143 Einfügen von Sätzen D0=D1=[0,..., 100), Seitenkapazität = 3
Insert(ws,(75,80)) Insert(ws,(5,15)) Insert(ws,(20,40)) Insert(ws,(80,30)) Insert(ws,(20,90)) Insert(ws,(55,20)) D1 100 ws [0,100) x [50,100) [0,100) x [0,50) 50 30 100 D0 R-Seiten P-Seiten

144 Einfügen von Sätzen D0=D1=[0,..., 100), Seitenkapazität = 3
Insert(ws,(75,80)) Insert(ws,(5,15)) Insert(ws,(20,40)) Insert(ws,(80,30)) Insert(ws,(20,90)) Insert(ws,(55,20)) Insert(ws,(50,60)) D1 Insert(ws,(60,60)) 100 ws [0,100) x [50,100) [0,30) x [0,50) [30,100) x [0,50) 70 50 30 100 D0 R-Seiten P-Seiten

145 Einfügen von Sätzen D0=D1=[0,..., 100), Seitenkapazität = 3
Insert(ws,(60,60)) D1 100 ws [0,100) x [70,100) 70 [0,100) x [50,70) 50 [0,30) x [0,50) [30,100) x [0,50) 30 100 D0 R-Seiten P-Seiten

146 Einfügen von Sätzen D0=D1=[0,..., 100), Seitenkapazität = 3
Insert(ws,(60,60)) ws D1 100 [0,100) x [70,100) [0,100) x [50,100) [0,100) x [50,70) 70 50 [0,100) x [0,50) [0,30) x [0,50) [30,100) x [0,50) 30 100 D0 R-Seiten P-Seiten

147 Strategien für das Spalten
Aufteilung des Datenraums: Zyklisches Spalten von Seiten: Wenn Partial Match Queries auf D0 bevorzugt unterstützt werden sollen: Spalten entlang D0 wann immer möglich. D1 D0 D1 D0 Falls Verteilung der Daten in D = D0… Dk-1 bekannt: Definiere Länge eines Intervalls Ii  Di als Erwartungswert der Wahrscheinlichkeit, dass Komponente ki eines Schlüssels k D in Ii liegt. Wähle beim Splitten einer Region I0 … Ik-1 immer das längste Intervall.

148 Strategien für das Spalten
Auswahl eines Wertes xi: Wähle xi so, dass in der zu splittenden Seite gleich viele Punkte links und rechts von xi liegen. u.U. muss eine Neuwahl der Spalt-Dimension erfolgen: x0 D0 D1

149 Eigenschaften des K-D-B-Baumes
Bearbeitung von Range Queries: Rekursives Durchlaufen der Äste des Baumes, deren Knoten Regionen enthalten, die geschnitten mit der Anfrage-Region nicht die leere Menge ergeben. Für den Seitenfüllgrad kann im K-D-B-Baum keine untere Grenze garantiert werden. Daher gelegentliche Reorganisation notwendig. Es existieren mehrere mögliche Reorganisations-Maßnahmen. Beispiel: Zusammenlegen benachbarter Seiten. Problem: Die Vereinigung der Regionen der beiden Seiten muss wieder eine Region ergeben. Dies ist nicht immer der Fall! D0 D1 A B C A kann weder mit B noch mit C zusammengelegt werden.

150 Vergleich K-D-B-Baum mit Grid-File
+ Gleichbehandlung der Attribute besser steuerbar - Auslastung der Seiten bei Löschoperationen nicht garantiert, daher: größere Tiefe des Baums 5–6 Seitenzugriffe für Exact Match Queries Grid-File: + Nur 2 Seitenzugriffe bei Exact Match Query ± Verschmelzen von Seiten einfacher - Ungleichbehandlung der Attribute bei Range Query


Herunterladen ppt "Zugriffsschicht: Satzzugriffsstrukturen"

Ähnliche Präsentationen


Google-Anzeigen