node - IFIS Uni Lübeck - Universität zu Lübeck

Werbung
Datenbanken
Prof. Dr. Ralf Möller
Universität zu Lübeck
Institut für Informationssysteme
Karsten Martiny (Übungen)
Architektur eines DBMS
Architecture of a DBMS / Course Outline
Anwendungen
Applications
Webformulare
Web
Forms
SQL-Schnittstelle
SQL
Interface
Operator-Evaluierer
Operator
Evaluator
Optimierer
Optimizer
Transaction
TransaktionsVerwalter
Manager
Lock
SperrVerwalter
Manager
Dateiverwaltungsund Zugriffsmethoden
Files
and Access
Methods
Puffer-Verwalter
Buffer
Manager
WiederRecovery
herstellungsManager
Verwalter
this course
Parser
Parser
dieser Teil des Kurses
Ausführer
Executor
Figure inspired by Ramakrishnan/Gehrke: “Database Management Systems”, McGraw-Hill 2003.
SQL-Kommandos
SQL
Commands
Verwalter
für externen
Speicher
Disk Space
Manager
DBMS
Dateien
für Daten
und Indexe. . .
data
files,
indices,
Fall 2008
Datenbank
Database
Systems Group — Department of Computer Science — ETH Zürich
3
2
Danksagung
• Diese Vorlesung ist inspiriert von den Präsentationen
zu dem Kurs:
„Architecture and Implementation of Database Systems“
von Jens Teubner an der ETH Zürich
• Graphiken wurden mit Zustimmung des Autors aus
diesem Kurs übernommen
3
Effiziente Evaluierung einer Anfrage
SELECT *
SELECT *
FROM CUSTOMERS
FROM CUSTOMERS
WHERE ZIPCODE WHERE
BETWEEN ZIPCODE
8800 AND 8999
BETWEEN 8800 AND 8999
4104*
4123*
4222*
4450*
4528*
5012*
6330*
6423*
8050*
8105*
8180*
8245*
8280*
8406*
8570*
8600*
8604*
8700*
8808*
8887*
8910*
8953*
9016*
9200*
9532*
• How
Sortierung
der Tabelle
CUSTOMERS
auf derthem
Platte
could we prepare
for such
queries and evaluate
efficiently?
(nach ZIPCODE )
We could
• Zur
Evaluierung
von(in
Anfragen
Verwendung von binärer
1. sort
the table on disk
ZIPCODE order).
Suche, um erstes Tupel zu finden, dann Scan solange
2. To answer queries, then use binary search to find first
ZIPCODE
<tuple,
8999and scan as long as ZIPCODE < 8999.
qualifying
k* denotes the full data record with search key k.
Fall 2008
scan
scan
k* denotiert
einen
Datensatz
mit Schlüssel
Systems Group
— Department
of Computer
Science k
— ETH Zürich
48
4
4104*
4123*
4222*
4450*
4528*
5012*
6330*
6423*
8050*
8105*
8180*
8245*
8280*
8406*
8570*
8600*
8604*
8700*
8808*
8887*
8910*
8953*
9016*
9200*
9532*
Geordnete
und Search
binäre Suche
Ordered
FilesDateien
and Binary
page 0
page 1
page 2
page 3
page 4
page 5
page 6
page 7
page 8
page 9 page 10 page 11 page 12
scan
ü Sequentieller
Zugriff
während
Scan-Phase
We get sequential
access
during der
the scan
phase.
Es We
müssen
während
Such-Phase
gelesen
need tolog
read
log2 (# tuples)
tuplesder
during
the search phase.
2(#Tupel)
werden
We need to read about as many pages for this.
whole
point of
binary
search is that we make far,
✗Für (The
jeden
Zugriff
eine
Seite!
unpredictable jumps. This largely defeats prefetching.)
– Weite Sprünge sind die Idee der binären Suche
– Kein Prefetching möglich
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
49
5
ISAM—Indexed
Sequential
Access
Method
ISAM: Indexed Sequential
Access
Method
Idea: Accelerate the search phase using an index.
ISAM—Indexed Sequential Access Method
• • •
All nodes
nodes are
size
of aof
page
IIAll
separator
arethe
the
size
a page
• Knoten
von der
Größe
einer
Seiteindex entry
index entry
–
–
data
pages
• • •
9016
9532
index pages
• • • • •
9016
9532
• • • • •
4104*
4104*
4123*
4123*
4222*
4222*
4450*
4450*
4528*
4528*
5012*
5012*
6330*
6330*
6423*
6423*
8050*
8050*
8105*
8180*
8105*
8245*
8180*
8280*
8245*
8406*
8280*
8570*
8600*
8406*
8604*
8570*
8700*
8600*
8808*
8604*
8887*
8700*
8910*
8953*
8808*
9016*
8887*
9200*
8910*
9532*
8953*
9016*
data
pages
9200*
9532*
• • • • •
8570
8604
8808
• • • • •
• • •
8280
8570
8604
8280
8808
8050
4222
4222
4528
4528
6330
6330
8050
8180
8910
• • •
index pages
8180
8910
Idee:Idea:
Beschleunige
Suchphase
durch
Accelerate the die
search
phase using an
index.sog. Index
key
key
! hundreds of entries per page
!
hundreds
oflow
entries
per pagep0 k1 p1 k2 p2 · · · kn pn
Hunderte
Einträge
pro
Seite
! large fanout,
depth
•
• p0 k•1 p1 k2 p2• · · · kn pn
!
large
fanout,
low
depth
I
Search
effort: logfanout (#
tuples)Tiefe
•
•
•
•
Hohe
Verzweigung,
kleine
I
Search effort: logfanout (# tuples)
• Suchaufwand: logVerzweigung(#Tupel)
Fall 2008
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
Systems Group — Department of Computer Science — ETH Zürich
separator
50
6 50
ISAM Index: Updates
ISAM-Index:
Aktualisierungsoperationen
ISAM indexes are inherently static.
Deletion is not a problem: delete record from data page.
ISAM-Indexe sind statisch
I Inserting data can cause more effort:
• Löschen einfach: Lösche Datensatz von Datenseite
I If space is left on respective leaf page, insert record
• Einfügen von Daten aufwendig
there (e.g., after a preceding deletion).
– Falls noch Platz auf Blattseite, füge Datensatz ein
I Otherwise, overflow pages need to be added.
(z.B. nach einer vorherigen Löschung)
(Note
these willein
violate
the
sequential
order.)
– Sonst
fügethat
Überlauf-Seite
(zerstört
sequentielle
Ordnung)
ISAM indexes
degrade after some time.
– IISAM-Index
degeneriert
I
···
···
···
···
···
···
···
overflow
pages
Überlauf-Seiten
7
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
51
Anmerkungen
• Das Vorsehen von Freiraum bei der Indexerzeugung
reduziert das Einfügeproblem (typisch sind 20% Freiraum)
• Da Seiten statisch, keine Zugriffskoordination nötig
– Zugriffskoordination (Sperren) vermindert gleichzeitigen
Zugriff (besonders nahe der Wurzel) für andere Anfragen
• ISAM ist nützlich für (relativ) statische Daten
Von IBM Ende der 1960er Jahre entwickelt
8
B+-Bäume: Eine dynamische Indexstruktur
B+-Bäume von ISAM-Index abgeleitet, sind aber dynamisch
• Keine Überlauf-Ketten
• Balancierung wird aufrechterhalten
• Behandelt insert und delete angemessen
Minimale Besetzungsregel für B+-Baum-Knoten (außer der
Wurzel): 50% (typisch sind 67%)
• Verzweigung nicht zu klein (Zugriff O(log n))
• Indexknotensuche nicht zu linear
R. Bayer and E. M. McCreight, Organization and Maintenance of Large
Ordered Indexes, Acta Informatica, vol. 1, no. 3, 1972
9
B+-Bäume: Grundlagen
B+-trees: Basics
B+-Bäume
zu ISAM-Index,
wobei
B+-trees
look likeähnlich
ISAM indexes,
where
I
I
•leafBlattknoten
üblicherweise
nicht in order
seq. Ordnung
nodes are, generally,
not in sequential
on disk,
are connected
to form
a double-linked
list:2
•leaves
Blätter
zu doppelt
verketteter
Liste verbunden
...
...
I
2
...
•leaves
Blätter
tatsächliche
Daten
ISAM-Index)
mayenthalten
contain actual
data (like the
ISAM(wie
index)
oderreferences
Referenzen
(Rids)
auf(e.g.,
Datenseiten
or just
to data
pages
rids). % slides 67 and 70
I
I
...
–We
Wirassume
nehmen
Folgenden
Letzteres
an since it is
theim
latter
case in the
following,
the more
common
one.zwischen d und 2d Einträge
• Jeder
Knoten
enthält
+-tree node contains between d and 2d entries (d is
each
(d Bheißt
Ordnung
des
Baumes,
Wurzel
ist
Ausnahme)
+
the order of the B -tree; the root is the only exception)
This is not really a B+-tree requirement, but most systems implement it.
10
+-Baum
Suche im
B
+-tree
earching
a
B
Searching a B+-tree
Function:
search
(k) (k)
1 Function:
search
return2 tree
(k, root);
return search
tree search
(k, root);
1 Function: tree search (k, node)
Function:
tree search (k, node)
2 if node is a leaf then
if node3 is a return
leaf then
node;
return
node;
4 switch k do
switch5 k docase k < k0
6
case
k < k0return tree search (k, p0 );
7 return
case tree
ki  k <
ki+1 (k, p0 );
search
8
return tree search (k, pi );
case ki  k <
ki+1k
9
case kk2dlast<
k
return
tree
search
(k,(k,
pi );
);
10
return tree
search
pp2dlast
);
case k2d  k
return tree search (k, p2d );
Fall 2008
i < last ≤ 2d
•IIFunktionsaufruf
search(k)
Function
search
(k)
Function search
(k)
bestimmt
Blatt,todas
returns
pointer
to
returns aapointer
thethe
potentielle
Treffer
für eine
leaf node
node that
contains
leaf
that
contains
potential
hits
for
search
Suche
nach
potential
hitsElementen
for
search mit
key k.
Schlüssel
k enthält
key k.
index entry separator
key
index entry separator
p0 k1 p1 k2 p2 · · · k2d p2d
•
•
•
•
key
p0 k1 p1 k2 p2 · · · k2d p2d
•
•node•page layout•
node page layout
Systems Group — Department of Computer Science — ETH Zürich
55
11
Insert: Überblick
• B+-Baum soll nach Einfügung balanciert bleiben
– keine Überlauf-Seiten
• Algorithmus für insert(k, p) für Schlüsselwert k und
Datenseite p
1. Finde Blattseite n, in der Eintrag für k sein kann
2. Falls n genug Platz hat (höchstens 2d-1 Einträge),
füge Eintrag <k, p> in n ein
3. Sonst muss Knoten n aufgeteilt werden in n und n‘ –
weiterhin muss ein Separator in den Vater von n
eingefügt werden
Die mögliche Aufspaltung erfolgt rekursiv nach oben,
eventuell bis zur Wurzel (wodurch sich der Baum erhöht)
12
Insert: Beispiel ohne Aufspaltung
... Zeiger auf Datenseiten ...
• Einfügung eines Eintrags mit Schlüssel 4222
– Es ist genug Platz in Knoten 3, einfach einfügen
– Erhalte Sortierung innerhalb der Knoten
13
Insert: Beispiel ohne Aufspaltung
8500
Insert: Examples (Insert without Split)
8700
9016
5012
8280
node 0
node 5
node 6
9016
9200
8700
8808
8887
node 4
8500
8570
8604
5012
6423
8050
8105
node 3
node 2
8280
8404
4123
4222
4450
4528
node 1
node 7
node 8
Zeiger· ·auf
· · · pointers to data...pages
· Datenseiten ...
• Insert
Einfügung
eines
new entry
with Eintrags
key 4222. mit Schlüssel 4222
!
Enough
space Platz
in node
simply insert.
– Es
ist genug
in3,Knoten
3, einfach einfügen
!
Keep entries
sorted within
nodes. der Knoten
– Erhalte
Sortierung
innerhalb
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
57
14
Insert: Beispiel mit Aufspaltung
8500
Insert: Examples (Insert without Split)
8700
9016
5012
8280
node 0
node 5
node 6
9016
9200
8700
8808
8887
node 4
8500
8570
8604
5012
6423
8050
8105
node 3
node 2
8280
8404
4123
4222
4450
4528
node 1
node 7
node 8
· · · pointers to data pages · · ·
• Einfügung eines Eintrags mit Schlüssel 6330
Insert new entry with key 4222.
– Knoten 4 aufgespalten
! Enough space in node 3, simply insert.
– Neuer Separator in Knoten 1
! Keep entries sorted within nodes.
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
57
15
Insert: Beispiel mit Aufspaltung
8500
Insert: Examples (Insert with Leaf Split)
Insert: Examples (Insert with Leaf Split)
8700
9016
Fall 2008
node 6
new entry
! New separator goes into node 1
(including pointer to new page).
new separator
new entry
node 4
Systems Group — Department of Computer Science — ETH Zürich
Fall 2008
9200
node 7
Systems Group — Department of Computer Science — ETH Zürich
node 8
6423
6423
6423 8050
8050 8105
Insert4key
6330.
– Knoten
aufgespalten
! New!separator
goes
Must split
nodeinto
4. node 1
– Neuer
Separator
innew
Knoten
(including
pointer to
page).1
node 5
5012
6330
! Must split node 4.
node 9
5012
6330
node 4
node 8
node 4
8105
node 7
new separator
key 6330.
• Insert
Einfügung
eines Eintrags mit Schlüssel
6330
node 3
9016
9016 9200
node 6
node 2
6423 8887
node 5
node 2
8570
8604
node 9
8500
8570
8500 8604
node 4
8280
8404
node 1
5012
6330
node 3
8280
6423
8050
8105 8280
6423
5012
8050
6423
8105
4123
4222
4450
4528
4123
4222 5012
4450 6330
4528
node 1
8404
node 0
8700
8808
8700
8700
8887
8808
9016
5012
6423
8280
8500
node 0
new node 9
new node 9
58
58
16
Insert: Beispiel mit Aufspaltung
• Einfügung von 8180, 8245...
8500
Insert: Examples (Insert with Leaf Split)
5012
6423
8280
8700
9016
node 0
Insert key 6330.
! Must split node 4.
! New separator goes into node 1
9016
9200
8700
8808
8887
8500
8570
8604
node 5
node 6
node 7
new separator
new entry
node 8
6423
node 9
17
423
050
105
node 4
8280
8404
6423
8050
8105
node 2
012
330
node 3
5012
6330
4123
4222
4450
4528
node 1
Insert: Examples (Insert with Inner Node Split)
6423
8500
Insert: Beispiele mit Aufspaltung innerer Knoten
Insert: Examples (Insert with Inner Node Split)
node 9
node 10
After 8180, 8245, insert key 4104.
node 5
8700
9016
node 6
8604
9016
9200
node 5
node 6
node 7
After 8180, 8245, insert key 4104.
node 7
node 8
8105
4222
8280
5012
6423
Neuer
new Separator
separator
Nach 8180,
8245,
füge
4104
ein
new
separator
!
Must
split
node
3.
! Must split node 3.
aus Knotenaufspaltung
leaffrom
split leaf split
• Aufspaltung
von
Knoten
undit9 from
Node
1 overflows
!3itsplit
!!
Node
1 overflows
! split
!!
New
separator
goes goes
root
separator
into root
• Knoten
1New
läuft
über
àinto
Aufspaltung
Unlike
during
leaf leaf
split,split,
separator
key
Unlike
during
separator
key
node 1
new node 12
node 1
• Neuer
Separator
für
Wurzel
does not remain in inner node.
Why?
does not remain in inner node.
Why?
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
59
Separatorschlüssel
aus
inneren Knoten
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
können sich verschieben
Warum?
4222
5012
9016
9200
8700
8700
8500 9016
8808
8887
8570
8500
8280
8570
8404
8604
node 10
node 2
8700
8808
8887
8105
8280
node 9
8105
8280
8180
8404
8245
8180
8245
6423
8050 8105
8105
8280
node 4
node 4
node 12
node 2
node 8
6423
node 11
6423
8050
node 11
5012
6330
node 1
node 12
8105
8280
node 3
node 1
6330
node 3
node 0
4450
4528
5012
4123
4104
4123
4104
5012
4222
4222
50124222
4450
4222
4528
6423
8500
node 0
new node 12
59
18
Insert: Aufspaltung eines inneren Knotens
• Aufspaltung beginnt auf Blattebene und verläuft nach
oben solange Indexknoten vollständig belegt
• Schließlich kann die Wurzel aufgespalten werden
– Aufspaltung wie bei inneren Knoten
– Separator für einen neuen Wurzelknoten verwenden
• Nur Wurzelknoten mit Füllgrad < 50% möglich
• Erhöhung nur bei Einfügung einer neuen Wurzel
Wie oft wird das
erfolgen?
19
Zusammenfassung: Algorithmus tree_insert
Insertion Algorithm
1 Function: tree insert (k, rid, node)
2 if node is a leaf then
3
return leaf insert (k, rid, node);
4 else
5
switch k do
6
case k < k0
7
hsep, ptri
case ki  k < ki+1
hsep, ptri
tree insert (k, rid, pi );
8
9
case kk2dlast<kk
hsep, ptri
10
11
12
13
14
15
tree insert (k, rid, p0 );
tree insert (k, rid, pp2dlast
);) ;
if sep is null then
return hnull, nulli;
else
Fall 2008
see tree search ()
i < last ≤ 2d
return split (sep, ptr, node);
Systems Group — Department of Computer Science — ETH Zürich
61
20
Algorithmus leaf_insert
1
Function: leaf insert (k, rid, node)
2
if another entry fits into node then
insert hk, ridi into node ;
return hnull, nulli;
3
4
5
else
allocate new leaf page p ;
+
+
take hk1+ , p1+ i, . . . , hk2d+1
, p2d+1
i := entries from node [ {hk, ptr i}
+
+
leave entries hk1 , p1 i, . . . , hkd+ , pd+ i in node ;
+
+
+
+
move entries hkd+1
, pd+1
i, . . . , hk2d+1
, p2d+1
i to p ;
6
7
8
9
+
return hkd+1
, pi;
10
1
Function: split (k, ptr , node)
2
if another entry fits into node then
insert hk, ptr i into node ;
return hnull, nulli;
3
4
5
6
7
else
allocate new leaf page p ;
+
+
take hk1+ , p1+ i, . . . , hk2d+1
, p2d+1
i := entries from node [ {hk, ptr i}
21
Algorithmus split
node p;
Der erste Zeiger p0 in der neuen Seite p
wird auf pd+1 gesetzt. Dieser Zeiger bildet
die Trennstelle, kommt demnach nicht
mehr auf der alten Seite node vor.
22
Algorithmus insert
Insertion Algorithm
1 Function: insert (k, rid)
2 hkey, ptri
tree insert (k, rid, root); // root contains the root of the index tree
3 if key is not null then
4
allocate new root page r;
with
5
populate nr with
6
p0
root;
7
k1
key;
8
p1
ptr;
9
root
r;
I insert (k, rid) is called from outside.
• insert(k,
rid) wird von außen aufgerufen
I Note how leaf node entries point to rids, while inner nodes
• Blattknoten
enthalten Rids,
innere Knoten enthalten
+
contain pointers to other
B -tree nodes.
+
Zeiger auf andere B -Baum-Knoten
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
63
23
Löschung
Deletion
• Falls Knoten genügend gefüllt (mindestens d+1
Einträge), Eintrag einfach löschen
I
If –
a node
is sufficiently
(i.e., contains
at least d +enthalten,
1 entries, die
Hinterher
könnenfull
innere
Knoten Schlüssel
we may
simply remove
the entry
from the
node.
zu Einträgen
gehören,
die nicht
mehr
existieren.
I Note: Afterward, inner nodes may contain keys that no
– Das ist OK
longer exist in the database. This is perfectly legal.
• Merge
Sonstnodes
verschmelze
wegen
Unterfüllung
in case of Knoten
an underflow
(“undo
a split”):
I
(inner nodes)
Innere
Knoten
3460
8500
merge
4222
5012
6423
8280
8105
8280
4222
5012
3460
6423
8500
I
“Pull” separator into merged node.
– Ziehe Separator in den verschmolzenen Knoten
24
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
64
Deletion
Löschung
I
Neuverteilung
redistribution
6423
8280
Innere?Knoten
4222
5012
8105
8280
4222
5012
5823
I
3460
5823
8500
It’s
quite
..
• not
Leider
istthat
die easy.
Situation
nicht immer so einfach
3460
6423
8500

Merging only works if two neighboring nodes were 50 % full.
• Verschmelzung
nur,
wenn Nachbarknoten zu 50% voll
Otherwise,
we have to
re-distribute:
• ISonst
muss
Neuverteilung
erfolgen
“rotate”
entry
through parent
– Rotiere Eintrag über den Elternknoten
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
65
25
B+-Bäume in realen Systemen
• Implementierungen verzichten auf die Kosten der
Verschmelzung und der Neuverteilung und weichen die
Regel der Minimumbelegung auf
• Beispiel: IBM DB2 UDB
– MINPCTUSED als Parameter zur Steuerung der
Blattknotenverschmelzung (Online-Indexreorganisation)
– Innere Knoten werden niemals verschmolzen
(nur bei Reorganisation der gesamten Tabelle)
• Zur Verbesserung der Nebenläufigkeit evtl. nur
Markierung von Knoten als gelöscht
(keine aufwendige Neuverzeigerung)
PCT = Partition Change Tracking
26
Was wird in den Blättern gespeichert?
Drei Alternativen
1. Vollständiger Datensatz k*
(ein solcher Index heißt geclustert, siehe unten)
2. Ein Paar <k, rid>, wobei rid (record ID) ein Zeiger auf
einen Datensatz darstellt
3. Ein Paar <k, {rid1, rid2, ... }>, wobei alle Rids den
Suchschlüssel k haben
Varianten 2. und 3. bedingen, dass Rids stabil sein müssen,
also nicht (einfach) verschoben werden können
Alternative 2 scheint am meisten verwendet zu werden
27
Erzeugung von Indexstrukturen in SQL
Implizite Indexe
Indexe automatisch erzeugt für Primärschlüssel und
Unique-Integritätsbedingungen
Explizite Indexe
• Einfache Indexe:
CREATE INDEX name
ON table_name(attr) ;
Beispiel
CREATE INDEX ZipcodeIndex
ON CUSTOMERS(ZIPCODE) ;
SELECT *
FROM CUSTOMERS
WHERE ZIPCODE BETWEEN 8800 AND 8999 ;
• Zusammengesetzte Indexe (Verbundindexe):
CREATE INDEX name
ON table_name(attr1, attr2, ..., attrn) ;
28
Indexe mit zusammengesetzten Schlüsseln
B+-Bäume können verwendet werden, um Dinge mit einer
definierten totalen Ordnung zu indizieren (im Prinzip1)
• Integer, Zeichenketten, Datumsangaben, ...,
• und auch eine Hintereinandersetzung davon
(basierend auf einer lexikographischen Ordnung)
Beispiel:
CREATE INDEX idx_lastname_firstname
ON CUSTOMERS (LASTNAME, FIRSTNAME);
Eine weitere Anwendung sind partitionierte B+-Bäume
• Führende artifizielle Indexattribute partitionieren den
B+-Baum horizontal (z.B. zur verteilten Verarbeitung)
1
In einigen Implementierungen können lange Zeichenketten nicht
als Index verwendet werden
G. Graefe: Sorting And Indexing With Partitioned B-Trees. CIDR 2003
29
B+-Bäume und Sortierung
B+-trees and Sorting
typische
Situation
nach
Alternative
2 sieht
so aus:
AEine
typical
situation
according
to alternative
2 looks
like this:
...
...
...
index file
...
...
data file
What are the implications when we want to execute
Was passiert,
Folgendes
ausführt?
SELECT *wenn
FROMman
CUSTOMERS
ORDER
BY ZIPCODE ?
SELECT * FORM CUSOTMERS ORDER BY ZIPCODE;
30
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
68
Geclusterte B+-Bäume
+-trees
Wenn dieBDatei
mit den Datensätzen sortiert und
Clustered
If the data file was
sorted, the scenario
wouldder
lookZugriff
different:schneller
sequentiell
gespeichert
ist, erfolgt
...
...
...
index file
...
...
data file
Ein
so
organisierter
Index
heißt
geclusterter
Index
We call such an index a clustered index.
• ISequentieller
Zugriff
während
der Scan-Phase
Scanning the index
now leads
to sequential
access.
This is particularly
good for range queries.
• IBesonders
für Bereichsanfragen
Warum macht man
Indexe nicht immer
Why don’t we make all indexes clustered?
geeignet
geclustert?
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
69
31
Index-organisierte Tabellen
Alternative 1 von oben ist ein Spezialfall eines
geclusterten Index
• Indexdatei = Datensatz-Datei
• Eine solche Datei nennt man index-organisiert
Oracle:
CREATE TABLE (...
...,
PRIMARY KEY (...))
ORGANIZATION INDEX;
Warum macht man
Indexe nicht immer
index-organisiert?
32
Suffix-Abschneidung
+-Baum-Verzweigung proportional zur Anzahl der Einträge
B
Prefix
and
Suffix
Truncation
Prefix
and
Suffix
Truncation
+-tree also
pro BSeite,
umgekehrt
proportional
zurofSchlüsselgröße
fanout
is
proportional
to the number
index entries per
B+-tree fanout is proportional to the number of index entries per
page,
i.e.,
tothe
thekey
keysize.
size.
• Ziel:
Schlüsselgröße
verringern
page,
i.e.,inversely
inversely proportional
proportional
to
!!Reduce
key
particularly
forvariable-length
variable-length
strings.
(insb.
relevant
bei
variabler Länge)
Reduce
key size,
size, Zeichenketten
particularly for
strings.
Goofy
Goofy
Daisy
Daisy Duck
Duck
Dagobert
DagobertDuck
Duck
Daisy
Daisy Duck
Duck
MickeyMouse
Mouse Mini
Mini
Mouse
Mickey
Mouse
Goofy
Goofy
MickeyMouse
Mouse
Mickey
Mini
Mouse
Mini
Mouse
Suffix-Abschneidung:
Beschränkung
derasas
Separatoren
auf
Suffixtruncation:
truncation: Make
separator
long
asas
necessary:
Suffix
separatorkeys
keysonly
only
long
necessary:
relevante Präfixe
GG
Dai
Dai
DagobertDuck
Duck
Dagobert
Mic
Mic MinMin
Daisy Duck
Duck
Daisy
Goofy
Goofy
Mickey
MickeyMouse
Mouse
Mini
Mouse
Mini
Mouse
Separatoren
benötigen
nicht
Note that separators
need Datenwerte
not be actual data
values.
Note that separators need not be actual data values.
Fall 2008
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
Systems Group — Department of Computer Science — ETH Zürich
71
71
33
Präfixabschneidung
Prefix Truncation
Keys within
a node
often share a common
prefix. Präfix auf
Häufig
treten
Zeichenketten
mit gleichem
···
···
Mic
Goofy
Min
Mickey Mouse
Mi c n
Mini Mouse
Goofy
Mickey Mouse
Mini Mouse
• Prefix
Speichere
gemeinsamen Präfix nur einmal (z.B. als k0)
truncation:
I Store common
prefix
onlydiskriminierend
once (e.g., as “k0 ”).
• Schlüssel
sind nun
stark
I Keys have become highly discriminative now.
Außerkraftsetzen der 50%-Füllungsregel kann Effektivität
Violating the “50 % occupation” rule can help improve the
dereffectiveness
Präfixabschneidung
verbessern
of prefix truncation.
% R. Bayer, K. Unterauer: Prefix B-Trees. ACM TODS 2(1), March 1977
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
R. Bayer, K. Unterauer: Prefix B-Trees. ACM TODS 2(1), 1977
72
34
Bulk-Loading von B+-Bäumen
Bulk-Loading B+-trees
Building
B+-treeBis+-Baums
particularly
when bei
the input
is sorted.
Aufbaua eines
isteasy
einfach
sortierter
Eingabe
...
...
...
+-Baumes von links nach rechts möglich
• IAufbau
des
B
+
Build B -tree bottom-up and left-to-right.
• IEventuell
mit Freiraum
Updates nodes.
Create a parent
for every 2d für
+ 1 unparented
(Actual implementations typically leave some space for future
updates. % e.g., DB2’s PCTFREE parameter)
What use cases could you think of for bulk-loading?
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
75
35
B, B+, B*, ...
Bisher B+-Bäume diskutiert
Ursprünglicher Vorschlag von Bayer und McCreight
enthielt sog. B-Bäume
• Innere Knoten enthalten auch Datensätze
Es gibt auch B*-Bäume
• Fülle innere Knoten zu 2/3 statt nur zur 1/2
• Umverteilung beim Einfügen
(bei zwei vollen Knoten auf drei Knoten umverteilen)
B-Baum meint irgendeine dieser Formen, meist werden
in realen DBs die B+-Bäume implementiert
B+-Bäume auch außerhalb von DBs verwendet
36
Indexe: Zusammenfassung
• Zugriff auf Daten von O(n) ungefähr auf O(log n)
• Kosten der Indexierung aber nicht zu vernachlässigen
– Nicht bei „kleinen“ Tabellen
– Nicht bei häufigen Update- oder Insert-Anweisungen
– Nicht bei Spalten mit vielen Null-Werten
• Standardisierung nicht gegeben
• MYSQL oder PostgreSQL (Ausschnitt):
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type]
ON tbl_name (index_col_name,...) [index_type]
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
37
Hash-basierte Indexierung
Hash-Based
Indexingin Datenbanken
B+-Bäume
dominieren
B+-trees are by far the predominant type of indices in databases.
Eine Alternative
ist die hash-basierte Indexierung
An alternative is hash-based indexing.
key
h : dom(key) ! [0 .. n
bucket 0
bucket 1
h
1]
..
.
bucket n
•
•
...
1•
primary
bucket pages
overflow
pages
• Hash-Indexe
eignen sich nur für Gleichheitsprädikate
I Hash indices can only be used to answer equality predicates.
I Particularly für
• Insbesondere
und
good(lange)
for stringsZeichenketten
(even for very long ones).
Verbundindexe
• Statt Kollisionslisten: Lineares Sondieren, o.a. Techniken
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
77
38
Dynamisches Hashen
Problem: Wie groß soll die Anzahl n der Hash-Felder sein?
• n zu groß à schlechte Platznutzung und –Lokalität
• n zu klein à Viele Überlaufseiten, lange Listen
Datenbanken verwenden daher dynamisches Hashen
(dynamisch wachsende und schrumpfende Bildbereiche)
• Erweiterbares Hashen
(Vermeidung des Umkopierens)
Fagin, R.; Nievergelt, J.; Pippenger, N.; Strong, H. R.,
Extendible Hashing - A Fast Access Method for Dynamic Files,
ACM Transactions on Database Systems 4 (3): 315–344, 1979
39
Erweiterbares Hashing (Idee am Beispiel)
Aus: Adam Drozdek, Data Structures and Algorithms
40
Zusammenfassung
• Index-Sequentielle Zugriffsmethode (ISAM-Index)
– Statisch, baum-basierte Indexstruktur
• B+-Bäume
– Die Datenbank-Indexstruktur, auf linearer
Ordnung basierend, dynamisch, kleine
Baumhöhe für fokussierten Zugriff auf
Bereiche
• Geclusterte vs. ungeclusterte Indexe
– Sequentieller Zugriff vs. Verwaltungsaufwand
• Hash-basierte Indexe
– Dynamische Anpassung des Index auf die Daten
Herunterladen