Datenbanken Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Marc Stelzner (Übungen) Torben Matthias Kempfert (Tutor) Maurice-Raphael Sambale (Tutor) 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 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, vgl. Zeiger zwischen Blattknoten) – 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 Explizite Indexe •Einfache Indexe: CREATE INDEX name ON table_name(attr1) ; •Zusammengesetzte Indexe (composite indexes): CREATE INDEX name ON table_name(attr1, attr2, ..., attrn) ; Implizite Indexe Automatisch erzeugt für Primärschlüssel und UniqueIntegritätsbedingungen 28 Pragmatische Verwendung • 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} 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; 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 educe key size, forvariable-length variable-length strings. ! RR educe key size, particularly particularly for strings. •Ziel! ist es, die Schlüsselgröße zu 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 Zusammengesetzte Schlüssel 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) CREATE INDEX ON TABLE CUSTOMERS (LASTNAME, FIRSTNAME); In den meisten SQL-Dialekten: Eine nützliche Anwendung sind partitionierte B+Bäume 1 In einigen Implementierungen können lange Zeichenketten nicht alsGraefe: Index verwendet G. Sorting Andwerden IndexingWith Partitioned B-Trees. CIDR 2003 35 + +-Bäumen Bulk-Loading von B + Bulk-Loading B -trees +-tree is +-Baums easy Aufbaua Beines Bparticularly ist einfach Building when thebei inputsortierter is sorted. Eingabe ... ... ... I Build B+-tree bottom-up and left-to-right. + •Aufbau des B -Baumes von links nach rechts möglich I Create a parent for every 2d + 1unparented nodes. •Erzeugung eines Elternknotens jeweils fürfuture 2d+1 (Actual implementations typically leave some space for Welche updates.ohne % e.g., DB2’s PCTFREE parameter) Einträge Elternknoten ... Anwendungsfälle für Bulk-Loading? •...What eventuell mit Freiraum für use casescould you think of for bulk-loading? Updates Fall(siehe 2008 Group — Department of Computer Science — in ETH Zürich 75 z.B.Systems Parameter PCTFREE DB2) 36 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 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 good(lange) for strings Zeichenketten (even for very long ones). 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 •Erweiterbares Hashen •Lineares Hashen Eventuell in Implementierung auch B+-Baum auf HashWerten verwendet Hash-Index sind insbesondere für Verbunde geeignet 39 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