ppt - 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
Applications
Anwendungen
SQL
Interface
SQL-Schnittstelle
Figure inspired by Ramakrishnan/ Gehrke: “Dat abase Management Systems”, McGraw-Hill 2003.
Webformulare
Web
Forms
Ausführer
Executor
Parser
Parser
Operator
Evaluator
Operator-Evaluierer
Optimizer
Optimierer
Transaction
Transaktions
Manager
Dateiverwaltungsund Zugriffsmethoden
Files and Access
Methods
Verwalter
Puffer-Verwalter
Buffer
Manager
Lock
SperrVerwalter
Manager
Verwalter
für Manager
externen
Disk
Space
RWiederecovery
herstellungsManager
Verwalter
dieser Teil des
thiscourse
Kurses
SQL-Kommandos
SQLCommands
Speicher
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
HERE ZI
PCO
DE8999
BETWEEN 8800 AND 8999
WHERE ZIPCODE W
BETWEEN
8800
AND
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
auf
derefficiently?
Platte
could we prepare
for such CUSTOMERS
queriesand evaluate
them
(nach ZIPCODE )
We could
• Zur
Evaluierung
von
Verwendung von
1. sort
the table on disk
(inAnfragen
ZI PCODEorder).
binärer
Suche,
um
erstes
Tupel
zu to
finden,
2.
To answer
queries,
then
use binary
search
find firstdann
Scan
solange
< 8999
qualifying
tuple,ZIPCODE
and scan as long
as ZI PCODE < 8999.
scan
scan
k* denotes the full data record with search key k.
Fall 2008
k* denotiert
einen
Datensatz
mit Schlüssel
k Zürich
Systems Group
— Department
of Computer
Science — ETH
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
undSearch
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ährendthe
der
Scan-Phase
We get sequential
accessduring
scan
phase.
EsWe
müssen
log2log
(#Tupel)
während der Such-Phase
need to read
2(# tuples) tuples during the search phase.
gelesen
werden
We need
to read about as many pagesfor this.
whole
point of eine
binarySeite!
search is that we make far,
✗ Für(The
jeden
Zugriff
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
•
• •
• •
8953*
9016*
data
pages
9200*
9532*
• • • •
•
9016
9532
index pages
• • • •
9016
9532
•
8570
8604
8808
•
4104*
• • • •
8280
8570
8604
8280
8808
• • • •
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*
8406*
8600*
8604*
8570*
8700*
8600*
8808*
8604*
8887*
8700*
8910*
8953*
8808*
9016*
8887*
9200*
8910*
9532*
•
• •
• •
8050
•
4222
4222
4528
4528
6330
6330
8050
•
8180
8910
•
8180
8910
Idee:Idea:
Beschleunige
die phase
Suchphase
durch sog. Index
Accelerate the search
using an index.
Allnodes
nodes are
size
of aof
page
I All
index entry separator
arethe
the
size
a page
•Knoten
von
der
Größe
einer
Seite
index entry
I
key
separator
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
•
•
•
•
SearchVerzweigung,
effort: logfanout (# kleine
tuples) Tiefe
– I Hohe
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
50
6 50
SAM 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,
(z.B.
nach eineroverflow
vorherigenpagesneed
Löschung) to be added.
(Note
that
these will violate
the sequentielle
sequential Ordnung)
order.)
– Sonst
füge
Überlauf-Seite
ein (zerstört
ISAM indexes
degrade after some time.
– I ISAM-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
-trees: Basics
B+-Bäume
ähnlich
zu ISAM-Index,
wobei
B+-trees
look like ISAM
indexes,
where
leaf nodes are, generally,
not in sequential
order Ordnung
on disk,
•Blattknoten
üblicherweise
nicht in seq.
leaves arezu
connected
form a double-linked
list:2
•Blätter
doppelttoverketteter
Liste verbunden
I
I
...
...
...
...
•Blätter
enthalten
tatsächliche
Daten
leaves may
contain actual
data (like the
ISAM(wie
index)ISAM-Index)
oder
(Rids)
auf(e.g.,
Datenseiten
or justReferenzen
referencesto data
pages
rids). % slides 67 and 70
I
I
–We
Wir
nehmen
Folgenden
assume
the im
latter
case in theLetzteres
following,an
since it is
the Knoten
more common
one.
•Jeder
enthält
zwischen d und 2d Einträge
each
B+-tree
node contains
between d Wurzel
and 2d entries
(d is
(d
heißt
Ordnung
des Baumes,
ist Ausnahme)
I
the order of the B+-tree; the root is the only exception)
2
+
10
Suche +im B+-Baum
ching
a
B
-tree
Searching a B+-tree
nction:
sear ch
( k)ch ( k)
1 Function:
sear
urn2 treturn
r ee sear
( k,chroot)
; ;
t r eech
sear
( k, root)
1 Function: t r ee sear ch ( k, node)
nction:
t r ee sear ch ( k, node)
2 if node is a leaf then
node
is a return
leaf then
3
node;
return
node;
4 switch k do
itch5 k docase k < k0
6 k < k return t r ee sear ch ( k, p0 ) ;
case
0
7 return
casetkri eek sear
< ki+ 1ch ( k, p0 ) ;
8
return t r ee sear ch ( k, pi ) ;
case ki k <k ki+< 1k
9
case k2dlast k
returnreturn
t r ee tsear
ch (ch
k, (pk,i ) p;p2dlast) ); ;
10
r ee sear
case k2d k
return t ir<ee
sear ch ( k, p2d ) ;
last ≤ 2d
Fall 2008
•I I Funktionsaufruf
Function
searchch
( search(k)
k)
Function sear
( k)
bestimmt
Blatt,toto
das
returns
pointer
returns aapointer
thethe
leaf node
node that
contains
potentielle
Treffer
für eine
leaf
that
contains
potentialnach
hits
search
Suche
Elementen
potential
hitsfor
for
search
key k.
key
mit k.
Schlüssel k enthält
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
node 7
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 8
Zeiger
· · · pointers to data...pages
· · ·auf Datenseiten ...
• Insert
Einfügung
eines
Eintrags
mit Schlüssel 4222
new entry
with key
4222.
ist genug
insimply
Knoten
3,. einfach
!– Es
Enough
space inPlatz
node 3,
insert
einfügen
!– Erhalte
Keep entries
sorted within
nodes. der Knoten
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
node 7
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 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
!
Fall 2008
Keep entries sorted within nodes.
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)
9016
9016 9200
node 2
node 8
9200
6423 8887
node 7
separator 6330
key 6330.eines Eintrags mit new
• Insert
Einfügung
Schlüssel
node 5
Knoten 4 aufgespalten
New! separator
Must splitgoes
nodeinto
4. node 1
Neuer
Separator
Knoten
(including
pointer to in
new
page). 1
!
node 6
node 7
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
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
6423
6423
64238050
80508105
–
!
–
Must
split
node
Insert
key
6330.4.
node 9
5012
6330
!
node 4
5012
6330
node 3
node 4
node 8
8105
8700
8700 8808
8700
8887
8808
9016
node 6
8570
8604
node 5
8500
8570
8500 8604
node 9
5012
6330
node 4
8280
8404
node 1
node 2
8404
6423
5012
8050
6423
8105
4123
4222 5012
4450 6330
4528
4123
4222
4450
4528
8280
6423
8050
8105 8280
node 0
node 1
node 3
8700
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)
8700
9016
5012
6423
8280
node 0
Insert key 6330.
!
Must split node 4.
!
New separator goes into node 1
node 6
9016
9200
8700
8808
8887
8500
8570
8604
node 5
node 7
new separator
new entry
node 8
6423
node 9
17
3
0
5
node 4
8280
8404
6423
8050
8105
node 2
2
0
node 3
5012
6330
4123
4222
4450
4528
node 1
Insert: Examples (Insert with Inner Node Split)
node 3
node 9
node 10
node 5
node 5
node 6
8700
9016
node 6
node 7
9016
9200
8604
node 2
8700
8808
8887
node 2
9016
9200
node 10
8500
8280
8570
8404
8604
node 9
8245
8105
8180
8245
node 12
8280
8180
8404
node 12
8700
8700
8500 9016
8808
8887
8570
8280
node 4
node 4
6423
8050 8105
8105
5012
6330
node 11
6423
8050
node 1
5012
6330
node 1
node 11
8105
8280
6423
8500
5012
node 3
node 0
node 0
4450
4528
4123
4104
4104
4123
4222
4222
50124222
4450
4222
4528
6423
8500
Insert: Beispiele mit Aufspaltung innerer
Insert: Examples (Insert with Inner Node Split)
Knoten
node 7
node 8
node 8
8105
8280
8105
4222
8280
5012
4222
5012
6423
Neuer
Separator
new separator
Nach 8180,
8245,
füge
4104
ein new separator
!
Must
split
node
3.
! Must split node 3.
aus Knotenaufspaltung
split leaf split
Node
1overflows
!3itund
split it9 from leaffrom
•Aufspaltung
von
Knoten
! ! Node
1overflows
! split
! ! New
separator
into root
separator
into root
•Knoten
1 New
läuft
übergoes
 goes
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
Warum
können sich verschieben
?
6423
After 8180, 8245, insert key 4104.
After 8180, 8245, insert key 4104.
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: t r ee i nser t ( k, rid, node)
2 if node is a leaf then
3
return l eaf i nser t ( k, rid, node) ;
4 else
5
switch k do
6
case k < k0
7
hsep, ptri
t r ee i nser t ( k, rid, p0 ) ;
case ki k < ki+ 1
hsep, ptri
t r ee i nser t ( k, rid, pi ) ;
8
9
10
11
case kk2dlast <kk
hsep, ptri
12
13
if sep is null then
return hnull, nulli ;
14
15
else
see t r ee sear ch ( )
t r ee i nser t ( k, rid, pp2dlast
) ;) ;
i < last ≤ 2d
return spl i t ( sep, ptr, node) ;
20
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
61
Algorithmus leaf_insert
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: i nser t ( k, rid)
2 hkey, ptri
t r ee i nser t ( 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 i nser t rid)
( k, rid)
is called
from outside.
• insert(k,
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
eletion
• Falls Knoten genügend gefüllt (mindestens d+1
Einträge), Eintrag einfach löschen
I
(inner nodes)
Innere
Knoten
4222
5012
6423
8280
8105
8280
merge
3460
8500
• Merge
Sonstnodes
verschmelze
wegen
in case of anKnoten
underflow
(“undoUnterfüllung
a split ”):
3460
6423
8500
I
If –
a node
is sufficiently
(i.e., contains
least d + 1entries,
Hinterher
könnenfullinnere
KnotenatSchlüssel
enthalten,
we may simply remove the entry from the node.
die zu Einträgen gehören, die nicht mehr existieren.
I
Note: Afterward, inner nodesmay contain keys that no
– Das
ist OK
longer exist in the database. This is perfectly legal.
4222
5012
I
“Pull” separator into merged node.
– Ziehe Separator in den verschmolzenen Knoten
24
etion
Löschung
•
I
I
l 2008
Neuverteilung
redistribution
6423
8280
3460
5823
8500
Innere?Knoten
4222
5012
8105
8280
4222
5012
5823
3460
6423
8500
It’snot
quiteist
that
• Leider
dieeasy...
Situation nicht immer so einfach
Merging only works if two neighboring nodes were 50 % full.
• Verschmelzung
wenn Nachbarknoten zu 50%
Otherwise,
we have tonur,
re-distribute:
I voll
“rotate” entry through parent
• Sonst muss Neuverteilung erfolgen
– Rotiere Eintrag über den Elternknoten
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 (OnlineIndexreorganisation)
– 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
1 In
einigen Implementierungen können lange Zeichenketten
nicht
alsGraefe:
Index verwendet
G.
Sorting Andwerden
Indexing With Partitioned B-Trees. CIDR
2003
•Führende artifizielle Indexattribute partitionieren den
B+-Baum horizontal (z.B. zur verteilten Verarbeitung)
29
B+-Bäume und Sortierung
B+-trees and Sorting
Eine
typische
nach
Alternative
sieht
A
typical
situationSituation
according to
alternative
2 looks2like
this: so aus:
...
...
...
index file
...
...
data file
What are the implicationswhen we want to execute
Was passiert,
Folgendes
ausführt?
SELECT * wenn
FROM Cman
USTOMER
S ORDER BY
ZI PCODE ?
SELECT * FORM CUSOTMERS ORDER BY ZIPCODE;
30
Geclusterte B+-Bäume
Wenn die
Clustered
B+Datei
-treesmit den Datensätzen sortiert und
If the data file was
sorted, the scenario
would look
sequentiell
gespeichert
ist, erfolgt
derdifferent:
Zugriff schneller
...
...
...
index file
...
...
data file
Ein
so organisierter Index heißt geclusterter Index
We call such an index a clustered index.
I Scanning the index
•Sequentieller
Zugriff
während
der Scan-Phase
now leads
to sequential
access.
I This is particularly good for range queries.
•Besonders
für Bereichsanfragen
Warum macht man
Indexe nicht immer
Why don’t we make all indexesclustered?
geeignet
geclustert?
31
Fall 2008
Systems Group — Department of Computer Science — ETH Zürich
69
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
B
Prefix
and
Suffix
Truncation
Prefix
and
Suffix
Truncation
+
B -tree
fanout
is proportional
to the number
of index entriesper
Einträge
Seite,
also umgekehrt
proportional
zur
B+-treepro
fanout
is proportional
to the number
of index entriesper
page,
tothe
thekey
keysize.
size.
Schlüsselgröße
page,i.e.,
i.e.,inversely
inversely proportional
proportional to
RR
educe
forvariable-length
variable-length
strings.
educekey
keysize,
size, particularly
particularly
for
strings.
•Ziel:! !Schlüsselgröße
verringern
Goof
oofyy
(insb. relevant bei Zeichenketten
variabler Länge)
G
Dai
uck
Daisy
sy DD
uck
Dagober
Duck
Dagober
t t Duck
sy Duck
DDaiai sy
i ckeyMouse
Mouse Mi ni
Mi niMouse
Mouse
MiMckey
GG
oof
oofyy
MiM
ckey
i ckeyMouse
Mouse
Mi niMi ni
Mouse
Mouse
Suffixtruncation:
truncation: Make
Make separator
asas
necessary:
Suffix
separatorkeysonly
keysonlyasaslong
long
necessary:
Suffix-Abschneidung: Beschränkung
der Separatoren auf
G
G
relevante Präfixe
Dai
Mi c Mi n
Dai
Dagober t Duck
Dagober t Duck
Mi c
Dai sy Duck
Dai sy Duck
Goof y
Goof y
Mi n
Mi ckey Mouse
Mi ckey Mouse
Mi ni Mouse
Mi ni Mouse
Note that separators need not be actual data values.
Note that separators need not be actual data values.
Separatoren
benötigen
Datenwerte
nicht
Fall 2008
Systems Group — Department
of Computer Science
— ETH Zürich
Fall 2008
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
···
···
Mi c
Goof y
Mi n
Mi ckey Mouse
Mi
Mi ni Mouse
Goof y
c n
Mi ckey Mouse
Mi ni Mouse
•Speichere
gemeinsamen Präfix nur einmal (z.B. als
Prefix truncation:
k0) I Store common prefix only once (e.g., as “k0 ”).
I Keys have
become
now.
•Schlüssel
sind
nun highly
starkdiscriminative
diskriminierend
Violating the “50 % occupation” rule can help improve the
Außerkraftsetzen
der 50%-Füllungsregel kann
effectiveness of prefix truncation.
Effektivität der Präfixabschneidung verbessern
% R. Bayer, K. Unterauer: Prefix B-Trees. ACM TODS2(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
+-Bäumen
Bulk-Loading
von
B
+
Bulk-Loading B -trees
+-tree is particularly
Building
a
B
when thebei
inputsortierter
is sorted.
Aufbau eines B+-Baums easy
ist einfach
Eingabe
...
...
...
Build B+-tree bottom-up and left-to-right.
I
+-Baumes von links nach rechts möglich
•Aufbau
des
B
I Create a parent for every 2d + 1unparented nodes.
(Actual implementations
typically
some space for future
•Eventuell
mit Freiraum
für leave
Updates
updates.
% e.g., DB2’s PCTFREE parameter)
What use casescould 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
Indexing in 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.
bucket 0
bucket 1
key
h
h : dom(key) !
[0 .. n − 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 Particularlyfür
•Insbesondere
und
good(lange)
for strings Zeichenketten
(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