DBS1-Übung - Friedrich-Schiller

Werbung
Datenbanksysteme I
WS 2012/13
- Übung 0 Bernhard Pietsch
Friedrich-Schiller-Universität Jena
Lehrstuhl für Datenbanken und
Informationssysteme
Organisatorisches (I)
• http://www.informatik.unijena.de/dbis/lehre/ws2012/dbs1/index.html
– Prüfungsmodalitäten
– Organisatorisches und Hinweise
– Ergänzende Materialien zur Vorlesung und Übung
• Klausur:
18. Februar 2013
16.00 - 17.30 Uhr
HS 1, Carl-Zeiss-Str. 3
• Klausurteilnahme nur für angemeldete Studenten:
– B.Sc.:
elektronisch über Friedolin
– Diplom und M.Sc.: schriftlich über Formular
2
DBS1-Übung
29.10.2012
Organisatorisches (II)
•
2 Übungsgruppen
– Mo, 14:15 – 15:45 Uhr, SR 130 CZ
– Do, 08:15 – 9:45 Uhr, SR 226 CZ
– Einschreibung per Friedolin
3
•
7 Übungstermine
– Vertiefung und praktische Erprobung des Vorlesungsstoffes
– Vorbereitung auf die Klausur
•
1. Übungstermin: Zugriffspfade
– Motivation
– Mehrwegbäume (B-Bäume, B*-Bäume)
– Streuspeicherverfahren (Hashing, Extendible Hashing)
•
2. - 7. Übungstermin:
– Besprechung der Aufgabenblätter
DBS1-Übung
29.10.2012
Seite / Page
• grundlegende Einheit der Datenspeicherung in DBMS
• Dateneinheit fester Größe, welche bei den meisten DBMS von
Datenbankadministrator festgelegt werden kann
• Typische Seitengrößen sind 4,8,16 oder 32 KB
• enthält einen Header und eine Menge von Datensätzen
Header
3240
3233
3235
11
17
23
7
Küspert
Göbel
Büchse
Eichner
3204 40 Pietsch
3233 69 Koch
3240 42 Friedel
3244
Header 12 Rossak 3243
• Datensätze werden seitenweise auf Externspeicher abgelegt
• Um schnellen Zugriff zu erzielen, werden einige Seiten im
Arbeitsspeicher gepuffert
4
DBS1-Übung
29.10.2012
Zielstellung der Ablage
• Ablage von Daten soll einfachen, schnellen und
inhaltsbezogenen Zugriff ermöglichen
– Bsp: "Gib mir alle Angestellten, die im Raum 3240 arbeiten und
deren Nachname mit „B“ beginnt.“
• Randbedingungen
– Große Datenmengen nicht komplett im Hauptspeicher ablegbar
– I.d.R. mehr Suchanfragen als Änderungen auf Informationen
Header
3240
3233
3235
5
11
17
23
7
Küspert
Göbel
Büchse
Eichner
3204 40 Pietsch
3233 69 Koch
3240 42 Friedel
3244
DBS1-Übung
Header 12 Rossak 3243
29.10.2012
Zugriffspfade
• Motivation:
Sequentielle Suche über GB/TB an Daten nicht akzeptabel
• Zielstellung:
– Minimierung der Anzahl von Externspeicherzugriffen
(Latenz um Faktor 106 langsamer als beim Arbeitsspeicher)
– Zugriff auf Daten mit konstantem oder logarithmischem
Aufwand durch zusätzliche Speicherpfade
• Zielkonflikt:
Zugriffsbeschleunigung vs. Aktualisierungsaufwand
Header
3240
3233
3235
6
11
17
23
7
Küspert
Göbel
Büchse
Eichner
3204 40 Pietsch
3233 69 Koch
3240 42 Friedel
3244
DBS1-Übung
Header 12 Rossak 3243
29.10.2012
Speicherstrukturen
Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm
7
DBS1-Übung
29.10.2012
Mehrwegbäume
• Ausgangspunkt: vollständig balancierter binärer Suchbaum
–
–



Abbildung der Knoten inkl. ausgehender Kanten auf eine Seite
Pro Knoten aber nur ein Schlüsselwert
Seiten sind nur zu einem Bruchteil ausgelastet
geringer Verzweigungsgrad und große Baumhöhe
viele Seitenzugriffen und somit viele Externspeicherzugriffe
• Zielstellung der Mehrwegbäume
– Zusammenfassung mehrerer Sätze/Schlüssel zu einem Knoten
– Höherer Verzweigungsgrad führt zu niedriger Baumhöhe
– Kompromiss für wahlfreien Schlüsselzugriff und sortierte
Verarbeitung
– Aufwand von Änderungsoperationen akzeptabel
• Beispiele: B- und B+, B*-Baum
8
DBS1-Übung
29.10.2012
B-Baum
• Vorschlag von R. Bayer und E. McCreight (1970)
• Daten und Suchinformationen in Baumstruktur angeordnet
• Baumknoten werden auf Seiten abgebildet, die vom DBMS
verwaltet werden
• Seiten- bzw. Knotenaufbau:
• Beispielknoten:
...
9
...
DBS1-Übung
...
29.10.2012
B-Baum
• Definition eines B-Baums mit Ordnung n:
– Jeder Weg von der Wurzel zum Blatt hat die gleiche Länge h
– Jeder Knoten (außer Wurzel und Blätter) hat mindestens n+1
Söhne. Die Wurzel ist ein Blatt oder hat mindestens 2 Söhne.
Jedes Blatt besitzt mindestens n Einträge.
– Jeder Knoten hat höchstens 2n+1 Söhne
• Beispiel mit n=2:
• Beschränkung der Höhe für N Datensätze (N>0):
N +1
log 2n +1 ( N +1 )≤h≤log n +1 (
)
2
10
DBS1-Übung
29.10.2012
Suchen im B-Baum
11
DBS1-Übung
29.10.2012
Einfügen im B-Baum (I)
12
DBS1-Übung
29.10.2012
Einfügen im B-Baum (II)
13
DBS1-Übung
29.10.2012
Löschen im B-Baum (I)
14
DBS1-Übung
29.10.2012
Löschen im B-Baum (II)
15
DBS1-Übung
29.10.2012
Löschen im B-Baum (III)
16
DBS1-Übung
29.10.2012
Löschen im B-Baum (IV)
17
DBS1-Übung
29.10.2012
Löschen im B-Baum (V)
18
DBS1-Übung
29.10.2012
Bewertung
• B-Baum ist robust gegen Entartung durch Reorganisation
• Ordnung n beeinflusst Effizienz
– großes n  niedrige Baumhöhe  bessere Performance
• Jede zusätzliche Seitenanforderung kostet viel Zeit
( Pufferverwaltung)
• Wurzelknoten möglichst im Hauptspeicher halten
– ABER: n ist durch Seitengröße beschränkt (z.B. 4, 8, 16 KB)
• Doppelrolle der Schlüsselwerte si
– si bildet ab auf Datensatz di und ist Weiche zur Suchsteuerung
– Datenteil für Suchsteuerung nicht erforderlich
– Idee: Datenteile nur auf Blattebene speichern  B+-Baum
19
DBS1-Übung
29.10.2012
B+-Baum
20
DBS1-Übung
29.10.2012
B+-Baum
• Häufigste Art der Index-Implementierung in DBMS
• Indexbaum:
–
–
–

keine Datensätze, sondern Schlüssel und Zeiger auf Kinder
Datensätze befinden sich ausschl. in der Blattebene des B+-Baums
Gesamtbaum somit flacher als B-Baum
Platz für mehr Schlüssel bei fester Seitengröße
• Lösch-Vorgang einfacher als im B-Baum
– Daten werden nur in Blättern entfernt
– Schlüssel in inneren Knoten bleiben als Wegweiser erhalten
 Weniger Seiten müssen geändert werden
21
DBS1-Übung
29.10.2012
Verkettung der Blätter im B+-Baum
• Blattfolge entspricht sequentieller Datei, üblicherweise mit
(doppelter) Verkettung zwischen den Seiten
 Gleiche logarithmische Zugriffszeit für alle Daten
 sequentieller sortierter Zugriff und wahlfreier
Schlüsselzugriff sind effizient
 Bereichsanfragen, Extremwertanfragen
22
DBS1-Übung
29.10.2012
B+-Bäume in der Praxis
• Typische Werte:
• Ordnung: 100
• Höhe: 3 - 4
• Füllfaktor: 70%
• Durchschnittliche Anzahl von Söhnen: ~133
• Daraus resultierende Kapazitäten:
– Höhe 3: 1333 = 2,352,637 Sätze
– Höhe 4: 1334 = 312,900,700 Sätze
• Pufferung der obersten Stufen:
– Ebene 0:
1 Seite = 8 KB
– Ebene 1:
133 Seiten = 1 MB
– Ebene 2: 17,689 Seiten = 133 MB
23
DBS1-Übung
29.10.2012
Historie und Terminologie
• Überblick der Baumarten:
– D. Comer: The Ubiquitous B-Tree. ACM Computing
Surveys, 11:2, Juni 1979, pp. 121-137.
• Originalpublikation B-Baum:
– R. Bayer, E. M. McCreight: Organization and Maintenance
of Large Ordered Indexes. Acta Informatica, 1:4. 1972. 290306.
• Originalpublikation B*-Baum:
– D. E. Knuth: The Art of Computer Programming, Vol. 3,
Addison-Wesley, 1973.
• Heutige Literatur: B*-Baum = B+-Baum
24
DBS1-Übung
29.10.2012
Speicherstrukturen
Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm
25
DBS1-Übung
29.10.2012
Statisches Hashing: Beschreibung
• Hashtabelle als Indexstruktur
("Von der Ordnung ins Chaos")
• Verwendung von Streuspeicherverfahren bzw.
Hashfunktionen
– Berechnung der Speicheradresse eines Datensatzes über den
Schlüssel (Schlüsseltransformation)
– Hashfunktion h(x) liefert die Seite (Bucket) bzw.
Speicheradresse mit dem Dateneintrag zu Schlüssel x
• Beispiel einer Hashfunktion: "Divisionsrestverfahren"
– Geeignete Division des Schlüssels
– Rest der Division ergibt die relative Adresse in der
Hashtabelle
26
DBS1-Übung
29.10.2012
Statisches Hashing: Hashfunktion
• Hashfunktion h: S  {1, 2, ..., n}
– S = Schlüsselraum, n = Größe des statischen Hash-Bereichs
(Anzahl der Buckets)
– Idealfall: h ist injektiv (keine Kollisionen)
• Nur in Ausnahmefällen möglich
• Jeder Satz kann mit einem Seitenzugriff referenziert werden
– Ziel: möglichst gute Gleichverteilung einer konkreten
Schlüsselmenge
27
DBS1-Übung
29.10.2012
Statisches Hashing: Operationen (vereinfacht)
• Gegeben:
– Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S W
– Datensatz Di mit Schlüssel Ki
• Einfügen
– Generierung der zukünftigen Speicheradresse: h(Ki) = Wi
– Datensatz Di mit Schlüssel Ki wird auf Adresse Wi gespeichert
• Direkte Suche
– Ermittlung der zugehörigen Speicheradresse: h(Ki) = Wi
– Bereitstellung von Datensatz Di mit Schlüssel Ki von Adresse Wi
28
DBS1-Übung
29.10.2012
Statisches Hashing: Operationen (vereinfacht) II
• Gegeben:
– Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S W
– Datensatz Di mit Schlüssel Ki
• Löschen
– Ermittlung der zugehörigen Speicheradresse: h(Ki) = Wi
– Datensatz Di mit Schlüssel Ki wird auf Adresse Wi gelöscht
• Sequentielle Suche
– Sequentieller Durchlauf des Wertebereichs W = W1 ... Wn
– Keine geordnete Schlüsselfolge
 keine sequentielle Suche möglich!
29
DBS1-Übung
29.10.2012
Statisches Hashing: Kollision
•
Definition:
– Zwei Schlüssel Ki und Kn kollidieren bezüglich einer Hashfunktion h,
wenn gilt: h(Ki) = h(Kn)
– Ki und Kn nennt man dann auch Synonyme, sie gehören zu einer
Kollisionsklasse
•
Kollisionsbehandlung umfasst folgende Aufgaben
– Einfügen: Finden einer freien Speicheradresse beim Einfügen
– Suchen: Auffinden eines Schlüssels, der nicht auf der Adresse
gespeichert wurde, die die Hashfunktion bestimmt
 Alle Operationen werden durch Kollisionsbehandlung komplexer
•
Viele Hashfunktionen (z.B. Modulo) bilden eine größere Schlüsselmenge
in einen kleineren Wertebereich ab  Kollision ist dann zwangsläufig
30
DBS1-Übung
29.10.2012
Statisches Hashing: Kollisionsbehandlung
• Offenes Hashen
– Kollisionen werden im Primärbereich untergebracht
• Suche einer anderen noch nicht belegten Adresse in der Hashtabelle
• Lineares/quadratisches Sondieren, Doppeltes Hashen
– Gleiche Strategie beim Wiederauffinden
– Lösch-Problematik: Einträge dürfen nicht einfach gelöscht
werden, sonst herrschen veränderte Voraussetzungen
(Lösung: Delete-Flag)
h(Kx) = h(Km)
Kx
31
Km
Ki
Kx
Ko
DBS1-Übung
29.10.2012
Statisches Hashing: Kollisionsbehandlung II
• Geschlossenes Hashen
– Kollisionen werden im separaten Überlaufbereich
gespeichert
• Überlaufbereich für alle Kollisionen
• Überlaufbereich pro Adresse
– Gefahr der Entartung
• Überlauflisten werden zu lang
• Performance sinkt (Suche in einer Liste!)
h(Kx) = h(Km)
Kx
Km
Ki
Kx
Ko
32
DBS1-Übung
29.10.2012
Statisches Hashing: Fazit
• Vorteile:
– Bei Kollisionsfreiheit: Suchen/Einfügen/Löschen in O(1)
• Nachteile:
– Meist Kollisionsbehandlung nötig: Suchen/Einfügen/Löschen in
O(n)
– Kein sequentieller Zugriff auf Daten möglich
– Hashfunktion entscheidend für die Qualität des Hashverfahrens
• beeinflusst Performance, Berechnungs-Komplexität, Datenverteilung
und Kollisions-Wahrscheinlichkeit
• Es gibt keine optimale Hashfunktion für beliebige Schlüsselmengen!
– Ineffizienz bei unvorhersehbaren / stark wachsenden Datenmengen
• Primärbereich anfangs überdimensioniert (a priori Allokation des
benötigten Speichers), Freihalten von Leerstellen
• Wachsende Überlaufketten verschlechtern Laufzeitverhalten
• Nachträgliche Vergrößerung der Hashtabelle (Re-Hash) teuer / nicht
möglich (24h-Dauerbetrieb!)
 Übergang zum Erweiterbaren Hashing (Fagin et al, 1979)
33
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Ziele
• Dynamisches Wachsen und Schrumpfen des Wertebereichs
der Hashfunktion
– Buckets werden erst bei Bedarf bereitgestellt
– Dichte Speicherplatzbelegung möglich
– Vermeidung von Überlaufmechanismen und totaler
Reorganisation
• Konstantes Laufzeitverhalten
– Zugriffszeit unabhängig vom Umfang des Datenbestands
– Auffinden eines Satzes soll nicht mehr als zwei
Seitenzugriffe erfordern
34
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Beschreibung
• Hashtabelle gegliedert in zwei Bereiche
– Directory (Inhaltsverzeichnis)
– Eigentliche Hashbuckets
• Zugriff zu den Werten in den Hashbuckets nur über
Directory möglich
– Zusätzliche Indirektion (evtl. Externspeicherzugriff!)
– Notwendiges Hilfsmittel für die gewünschten
Erweiterungseigenschaften
• Bucket mit fester Länge (z.B. Seitengröße 4KB) und
Kapazität b
– Abhängig von den zu hashenden Daten (Wertlänge)
– Abhängig von Datenintegration (Einbettung vs.
Auslagerung)
• Hashfunktion h generiert Pseudoschlüssel zu einem Satz x
35
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Realistische Werte
• Bucketkapazität: b=100, b=1000
– Abhängig von der Seitengröße (2, 4, 8, 16 KB, etc.)
– Abhängig von Wahl der Einbettung
(eingebetteter vs. ausgelagerter Ansatz)
• h(x) mit h: S  [0, 232-1]
– Gewährleistet hinreichend viele Bitpositionen
36
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Beispiel (1)
• Ein leeres Bucket mit Bucket-Kapazität b = 4
• Hashfunktion h(x) = x mod 32
• Lokale Tiefe eines Bucket d‘:
Anzahl von Bits, die benötigt wird, um zu
entscheiden, ob ein Eintrag in dieses Bucket gehört
• Globale Tiefe des Directory d:
Maximale Anzahl Bits, die benötigt wird, um zu
entscheiden, in welches Bucket ein Eintrag gehört
(d = max(d‘))
d‘ = 0
d=0
37
DBS1-Übung
B1
29.10.2012
Erweiterbares Hashing: Beispiel (2)
• Schrittweiser Aufbau einer Hashtabelle
durch sukzessives Einfügen einiger
Werte in der vorgegebenen Reihenfolge:
• Einfügen von Werten 134, 8, 113 und 89
– Alle Werte in Bucket B1
38
DBS1-Übung
0
x
h(x)
[h(x)]2
134
6
00110
8
8
01000
113
17
10001
89
25
11001
20
20
10100
118
22
10110
30
30
11110
107
11
01011
37
5
00101
77
13
01101
B1
134
8
113
89
0
29.10.2012
6 [00110]
8 [01000]
17 [10001]
25 [11001]
Erweiterbares Hashing: Beispiel (3) / Split
1
• Im Beispiel: Einfügen von Wert 20
1
– Bucket-Überlauf in B1
0...
– Splitting von B1
1...
B1
1
• Allokation eines neuen Buckets B2
mit d‘(B2) = d‘(B1)
B2
134
8
6 [00110]
8 [01000]
113
20
89
17 [10001]
20 [10100]
25 [11001]
• Erhöhung der lokalen Tiefen von B1 und B2 um 1
Hinweis: mögliche weitere lokale Tiefen werden nicht verändert
• Hashfunktion h generiert Pseudoschlüssel der Einträge
• Füllen der Buckets: jedes Bucket enthält nur Sätze, deren
Pseudoschlüssel in den ersten d' Bits übereinstimmen
• Falls d ≠ max(d‘):
– Erhöhung der globalen Tiefe um 1
– Directory enthält 2d Einträge  verdoppelt sich mit jedem
zusätzlichen Bit
39
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Beispiel (4)
1
• Einfügen des Werts 118
– Suche des zugehörigen Buckets
ergibt B2 aufgrund 1. Bitposition
1
B1
1
1...
B2
• Einfügen des Werts 30
• Erhöhung globaler Tiefe (d=2)
• Directory-Verdopplung
1
2
B1
DBS1-Übung
113
20
118
89
17 [10001]
20 [10100]
22 [10110]
25 [11001]
134
8
6 [00110]
8 [01000]
113
20
118
17 [10001]
20 [10100]
22 [10110]
89
30
25 [11001]
30 [11110]
00...
01...
2
B2
10...
11...
2
– Differenzierung bei Neuverteilung
gemäß ersten zwei Bits im Hashwert
– Bucket B1 bleibt unverändert mit lokaler Tiefe d'=1
40
6 [00110]
8 [01000]
0...
– Freie Kapazität in B2 (|B2| < b)
– Bucket-Überlauf in B2
 Splitting und Erhöhung der
lokalen Tiefe (d'=2) in
Buckets B2 und B3
134
8
B3
29.10.2012
Erweiterbares Hashing: Beispiel (5)
• Einfügen der Werte 107, 37 und 77
– Wert 107 wird in Bucket B1 abgelegt
durch Zuordnung über "01..."
– Wert 37 wird in Bucket B1 abgelegt
durch Zuordnung über "00..."
– Bucket-Überlauf in B1 bei Wert 77,
Splitting in B1 und B4
– Erhöhung der lokalen Tiefe für
Bucket B1 und B4 (d'=2)
– Keine Directory-Verdopplung,
da weiterhin die globale Tiefe
mit d=2 (d=max(d')) bleibt
41
DBS1-Übung
2
B1
2
2
00...
B4
01...
10...
2
B2
11...
37
134
5 [00101]
6 [00110]
8
107
77
8 [01000]
11 [01011]
13 [01101]
113
20
118
17 [10001]
20 [10100]
22 [10110]
89
30
25 [11001]
30 [11110]
2
B3
29.10.2012
Erweiterbares Hashing: Operationen
• Gegeben:
– Hashfunktion h, Buckets B1 ,… , Bn mit Kapazität b
– Datensatz D mit Schlüssel K
• Suche von D:
– Anwendung der Hashfunktion h(K) ergibt Pseudoschlüssel
für Directory
– Ermittlung des zugeordneten Buckets Bi über das Directory
– Durchsuchen von Bucket Bi nach K (z.B. mit binärer Suche)
• Einfügen von D:
– Suche von D  gefunden?
• Ja: Fehlermeldung, fertig!
• Nein: Ist noch Platz im Bucket Bi, also |Bi|<b?
– Ja: Einfügen von D in Bucket Bi
– Nein: Splitting von Bucket Bi zwei neue Buckets
» Lokale Neuverteilung der Einträge aus Bi und Verweiskorrektur
» Eventuell Verdopplung des Directory wegen Selektivität
42
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Fazit
• Hashfunktion sollte gut gewählt sein
– Möglichst "zufälliges" Ergebnis
– h(x) sollte an jeder Bitposition den Wert 0/1 mit gleicher
Wahrscheinlichkeit (0.5) generieren
– Hashverfahren reagieren empfindlich auf unausgewogene
Hashfunktionen
43
DBS1-Übung
29.10.2012
Erweiterbares Hashing: Sonderfall 1 (Entartung)
• Eine Einfügung kann mehrere Directory-Verdopplungen
zur Folge haben
– Alle betrachteten b+1 Hashwerte h(x) haben an Position i
den gleichen Wert 0 oder 1
– Bei guter Hashfunktion und großer Bucketkapazität b sehr
selten
– Beispiel:
• b=2, h(x): S  [0, 31]
• Einfügereihenfolge: 2 (00010), 3 (00011), 6 (00110)
44
DBS1-Übung
29.10.2012
Extendible Hashing vs. B+-Baum
• Speicherplatzbelegung:
– Extendible Hashing: ≈ 70% [ln2] für gesamten (!) HashBucket-Bereich (nur Einfügen, ideale Hashfunktion)
Zusatzaufwand (Speicher) für Directory moderat
(anwachsend)
– B+-Baum: ≈ 70% [ln2] Füllgrad der Baumknoten
• Wahlfreier Zugriff
– Extendible Hashing: O(1) durch Anwenden der
Hashfunktion
– B+-Baum: O(log n N) durch Abstieg im Indexbaum
• Sequentieller Zugriff:
– Extendible Hashing: Keine direkte Unterstützung
– B+-Baum: Abstieg im Baum und Nutzung der verketteten
Blattebene
45
DBS1-Übung
29.10.2012
Herunterladen