Datenbanksysteme 1 - Friedrich-Schiller

Werbung
Datenbanksysteme 1
- Übung 0 Andreas Göbel
Friedrich-Schiller-Universität Jena
Lehrstuhl für Datenbanken und
Informationssysteme
Vorstellung
Dipl.-Inf. Andreas Göbel
• Bis 31.03.2009: Informatik-Studium an der FSU
• Seit 01.04.2009: Wissenschaftlicher Mitarbeiter an der FSU
–
–
–
–
Lehrstuhl für Datenbanken und Informationssysteme
Raum:
3233
Telefon: 03641/946363
E-Mail: [email protected]
• Forschungsgebiete:
– Database as a Service (DaaS)
– NoSQL-Datenbanken
– Multi-Tenancy-Datenbanken
2
DBS1-Übung
24./27.10.2011
Organisatorisches (I)
• 2 Übungsgruppen
– Mo, 14:15 – 15:45 Uhr
– Do, 08:15 – 09:45 Uhr
– Einschreibung über Friedolin erforderlich
• Je 7 Übungstermine
– Vertiefung und praktische Erprobung des Vorlesungsstoffes
– Vorbereitung auf die Klausur
• 1. Übungstermin: Zugriffspfade
– Mehrwegbäume (B-Bäume, B*-Bäume)
– Streuspeicherverfahren (Hashing, Extendible Hashing)
• 2. - 7. Übungstermin:
– Besprechung der Aufgabenblätter
3
DBS1-Übung
24./27.10.2011
Organisatorisches (II)
• http://www.informatik.uni-jena.de/dbis/lehre/ws2011
/dbs1/index.html
– Prüfungsmodalitäten
– Organisatorisches und Hinweise
– Ergänzende Materialien zur Vorlesung und Übung
• Klausur:
07. Februar 2012
16.00 - 17.30 Uhr
HS 2, Carl-Zeiss-Str. 3
• Klausurteilnahme nur für angemeldete Studenten:
–
–
–
–
4
B.Sc.-Studiengänge:
Diplom-Studiengänge:
M.Sc. Bio-Informatik:
M.Sc. Wirt.-Informatik:
elektronisch über Friedolin
schriftlich über Formular
schriftlich über Formular
schriftlich über Liste (3329, EAP2)
DBS1-Übung
24./27.10.2011
Zugriffspfade - Motivation
• Ablage von Daten soll einfachen, schnellen und
inhaltsbezogenen Zugriff ermöglichen
– Bsp: "Gib mir alle Angestellten, die mehr als 3 Kinder haben und
vor dem 01.01.2010 in die Firma eingetreten sind.“
• Randbedingungen
– Datensätze werden blockweise gespeichert in sog. Seiten
(Dateneinheit fester Größe auf Extern- oder Arbeitsspeicher)
– Große Datenmengen nicht komplett im Hauptspeicher ablegbar
– I.d.R. mehr Suchanfragen als Änderungen auf Informationen
• Wozu Zugriffspfade?
– Sequentielle Suche über GB/TB an Daten nicht akzeptabel
– Minimierung der Anzahl von Externspeicherzugriffen
(Latenz um Faktor 106 langsamer als beim Arbeitsspeicher)
– Zielkonflikt: Zugriffsbeschleunigung vs. Aktualisierungsaufwand
5
DBS1-Übung
24./27.10.2011
Speicherstrukturen
Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm
6
DBS1-Übung
24./27.10.2011
Mehrwegbäume
• Ausgangspunkt: balancierte binäre Suchbäume
– Pro Knoten nur ein Schlüsselwert
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*-Baum
7
DBS1-Übung
24./27.10.2011
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
• Typische Seitengrößen: 4, 8, 16, 32 KB
• Seiten- bzw. Knotenaufbau:
• Beispielknoten:
...
8
...
DBS1-Übung
...
24./27.10.2011
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
log2 n +1 ( N + 1) ≤ h ≤ logn +1 (
)
2
9
DBS1-Übung
24./27.10.2011
DBS1-Übung
24./27.10.2011
Suchen im B-Baum
10
Einfügen im B-Baum (I)
11
DBS1-Übung
24./27.10.2011
Einfügen im B-Baum (II)
12
DBS1-Übung
24./27.10.2011
Löschen im B-Baum (I)
13
DBS1-Übung
24./27.10.2011
Löschen im B-Baum (II)
14
DBS1-Übung
24./27.10.2011
Löschen im B-Baum (III)
15
DBS1-Übung
24./27.10.2011
Löschen im B-Baum (IV)
16
DBS1-Übung
24./27.10.2011
Löschen im B-Baum (V)
17
DBS1-Übung
24./27.10.2011
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
18
DBS1-Übung
24./27.10.2011
B*-Baum
19
DBS1-Übung
24./27.10.2011
B*-Baum
• Vorschlag von Donald Knuth (1973)
• 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
20
DBS1-Übung
24./27.10.2011
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
21
DBS1-Übung
24./27.10.2011
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
22
DBS1-Übung
24./27.10.2011
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
23
DBS1-Übung
24./27.10.2011
Speicherstrukturen
Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm
24
DBS1-Übung
24./27.10.2011
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
25
DBS1-Übung
24./27.10.2011
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
26
DBS1-Übung
24./27.10.2011
Statisches Hashing: Operationen (vereinfacht)
• Gegeben:
– Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S
– Datensatz Di mit Schlüssel Ki
W
• 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
27
DBS1-Übung
24./27.10.2011
Statisches Hashing: Operationen (vereinfacht) II
• Gegeben:
– Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S
– 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!
28
DBS1-Übung
24./27.10.2011
W
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
29
DBS1-Übung
24./27.10.2011
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
30
Km
Ki
Kx
Ko
DBS1-Übung
24./27.10.2011
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
31
DBS1-Übung
24./27.10.2011
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)
32
DBS1-Übung
24./27.10.2011
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
33
DBS1-Übung
24./27.10.2011
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
34
DBS1-Übung
24./27.10.2011
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
35
24./27.10.2011
DBS1-Übung
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
36
DBS1-Übung
B1
24./27.10.2011
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
37
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
0
0
134
8
113
89
6 [00110]
8 [01000]
17 [10001]
25 [11001]
134
8
6 [00110]
8 [01000]
113
17 [10001]
20 [10100]
25 [11001]
B1
24./27.10.2011
DBS1-Übung
Erweiterbares Hashing: Beispiel (3) / Split
1
• Im Beispiel: Einfügen von Wert 20
– Bucket-Überlauf in B1
– Splitting von B1
1
B1
0...
1...
1
• Allokation eines neuen Buckets B2
20
B2
mit d‘(B2) = d‘(B1)
89
• 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
38
DBS1-Übung
24./27.10.2011
Erweiterbares Hashing: Beispiel (4)
1
• Einfügen des Werts 118
– Suche des zugehörigen Buckets
ergibt B2 aufgrund 1. Bitposition
– Freie Kapazität in B2 (|B2| < b)
1
B1
• Erhöhung globaler Tiefe (d=2)
• Directory-Verdopplung
1
1...
B2
1
2
113
20
118
89
17 [10001]
20 [10100]
22 [10110]
25 [11001]
134
8
6 [00110]
8 [01000]
B1
113
20
118
17 [10001]
20 [10100]
22 [10110]
89
30
25 [11001]
30 [11110]
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]
00...
2
01...
B2
10...
11...
2
B
– Differenzierung bei Neuverteilung
gemäß ersten zwei Bits im Hashwert
– Bucket B1 bleibt unverändert mit lokaler Tiefe d'=1
39
6 [00110]
8 [01000]
0...
• Einfügen des Werts 30
– Bucket-Überlauf in B2
Splitting und Erhöhung der
lokalen Tiefe (d'=2) in
Buckets B2 und B3
134
8
3
24./27.10.2011
DBS1-Übung
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
40
DBS1-Übung
2
B1
2
2
00...
B4
01...
10...
2
B2
11...
2
B3
24./27.10.2011
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
41
DBS1-Übung
24./27.10.2011
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
42
DBS1-Übung
24./27.10.2011
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)
43
DBS1-Übung
24./27.10.2011
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
44
DBS1-Übung
24./27.10.2011
Nächste Termine der DBS1-Übung
• Ausgabe des 1. Übungsblatts:
• Besprechung Gruppe 1:
• Besprechung Gruppe 2:
45
DBS1-Übung
01.11.2011
07.11.2011
10.11.2011
24./27.10.2011
Herunterladen