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