fbi h_da Datenbanken Kapitel 4: Interne Datenorganisation Schestag Datenbanken (Bachelor) Kapitel 4 - 1 Interne Datenorganisation fbi h_da Inhalte des Kapitels • Aufbau eines Speichermediums, Pages und Pufferverwaltung • Datenorganisation • Index und B-Baum • Hash-Indexe Lernziele • Die mit dem Zugriff auf den Sekundärspeicher verbundenen PerformanceProbleme sollen klar sein. • Die grundlegende Idee der Pufferverwaltung sollte bekannt sein. • Die interne Datenorganisation und unterschiedliche Zugriffsstrukturen sollen in ihrer Implementierung und strategisch verstanden sein. Schestag Datenbanken (Bachelor) Kapitel 4 - 2 Datensuche wertebasiert sequentiell fbi h_da Wo finde ich die Prüfungsakte des Studenten mit der Matrikelnummer 685 234 ? Irgendwo hier, in einem dieser Ordner! Suchstrategie? Aufwand? Schestag Datenbanken (Bachelor) C Kapitel 4 - 3 Datensuche wertebasiert mit „Zugriffsstruktur“ fbi h_da Klar, in welchem Ordner ich die Prüfungsakte des Studenten mit der Matrikelnummer 685 234 finde! 685 201 685 210 685 211 685 220 685 221 685 230 685 231 685 240 ... ... C Schestag Datenbanken (Bachelor) Kapitel 4 - 4 Datensuche wertebasiert mit direkter Referenz fbi h_da Wo finde ich die Prüfungsakte des Studenten mit der Matrikelnummer 685 234 ? 13 14 15 16 17 18 19 20 21 22 23 25 26 Du findest sie in Ordner Nr. 18, darin die 4. Akte! Woher weiß er das so genau??? Suchstrategie? Aufwand? Schestag 24 Datenbanken (Bachelor) C Kapitel 4 - 5 fbi h_da Aufbau eines Speichermediums – Pages Magnetplattengerät mehrere Platten (Oberflächenspeicherung, beidseitige Speicherung) Spuren, die konzentrische Kreise um die Drehachse bilden Lese- / Schreibkopf a b Sektoren *) (kleinste Einheiten, die das DBMS adressieren und auf die es zugreifen kann) Zylinder (unmittelbar übereinander liegende Spuren) • • Pages (Datenseiten, Datenblöcke) nennt man die Zusammenfassung von mehreren benachbarten Sektoren zu einer Verarbeitungseinheit (Größe einer Page: zwischen 512 Bytes und 8k Bytes). In einer Page können ein oder mehrere vollständige Datensätze, Teile von Datensätzen oder Indexeinträge gespeichert werden. *) Sektorenadresse: Angaben zu Zylinder, Plattenoberfläche und Nr. des Sektors auf der Spur Schestag Datenbanken (Bachelor) Kapitel 4 - 6 fbi h_da Aufbau eines Speichermediums – Pages • Zum Lesen der Daten muss das DBMS eine Page komplett in den Hauptspeicher laden. Eine Page ist die kleinste physische Einheit, die vom DBMS in den Hauptspeicher geladen werden kann (und ist deshalb immer der kleinsten physischen Einheit, die das Betriebssystem mit einem Zugriff in den Hauptspeicher laden kann). Pages sind grundlegende Einheiten für das Lesen und Transferieren von Daten. Adressierung von Datenblöcken (Pointer) • Die Adressierung einer Page erfolgt über physische Adressen (relevant für das Betriebssystem) und logische Adressen (relevant für das DBMS). • Ein Pointer kann sich nicht nur auf eine Page beziehen, sondern auch auf einen bestimmten Datensatz innerhalb einer Page. Man nennt einen solchen Pointer dann auch Record-ID (RID): RID = Adresse der Page + Aufsetzpunkt für den Datensatz innerhalb der Page Schestag Datenbanken (Bachelor) Kapitel 4 - 7 Zugriffszeiten fbi h_da Größenordnung Zugriffszeiten Beispiel: 100 Pages lesen • Hauptspeicher: 100 x 100 ns = 10.000 ns = 0,01 ms • Plattenspeicher: 100 x 10 ms = 1.000 ms = 1 s Zugriffslücke: 10 5 1-10ns Register 10-100ns Cache 100-1000ns Hauptspeicher 10 ms Plattenspeicher sec Archivspeicher Quelle: Kemper:2004 Schestag Datenbanken (Bachelor) Kapitel 4 - 8 fbi h_da Pufferverwaltung • • Puffer: ausgezeichneter Bereich des Hauptspeichers. Er ist in Pufferrahmen gegliedert, jeder Pufferrahmen kann eine Page (Seite) der Platte aufnehmen. DB-Buffer B‘ C‘ A‘ D B A‘ Einlagerung D Auslagerung E‘ ... F G • E‘ F Jede Seite, die von der Platte in den DB-Puffer gelesen wird, wird dort so lange wie möglich vorgehalten, um unnötige I/Os auf die Platte zu vermeiden (vgl. auch Kapitel 7, Transaktionsmanagement). Schestag Datenbanken (Bachelor) Kapitel 4 - 9 Interne Datenorganisation fbi h_da Aufbau eines Speichermediums, Pages und Pufferverwaltung • Datenorganisation • Index und B-Baum • Hash-Indexe Schestag Datenbanken (Bachelor) Kapitel 4 - 10 fbi h_da Interne Datenorganisation • Die interne Datenorganisation sollte so eingerichtet sein, dass die Anzahl der Plattenzugriffe bei der Recherche oder der Manipulation von Daten minimal ist. • Hierfür wird die Anordnung der gespeicherten Daten auf der Platte so optimiert, dass der gewünschte Datensatz durch möglichst wenige I/Os gefunden wird. Eine solche Anordnung nennen wir Speicherstruktur. • Verschiedene Speicherstrukturen haben verschiedene PerformanceCharakteristika, die für jeweils unterschiedliche Applikationen / Datenbankbereiche von Vorteil sein können. • Eine optimale Datenorganisation kann nur erzielt werden, wenn die Datenstrukturen, statistische Informationen zum Datenvolumen sowie Ausprägungen innerhalb der Wertebereiche bekannt sind und berücksichtigt werden ( Optimizer, Systemkatalog, Kapitel 5). Es gibt keine Speicherstruktur, die optimal für alle Applikationen ist! Schestag Datenbanken (Bachelor) Kapitel 4 - 11 fbi h_da Datenorganisation • Beim Zugriff auf die Daten einer Datenbank spielt neben dem MindestFüllgrad der Pages auch die Organisationsform der zugrunde liegenden Daten eine Rolle. • Unter der Organisationsform von Daten versteht man die Form des Abspeicherns und die Möglichkeiten des Zugriffs. • Im folgenden werden die Formen der - sequentiellen Organisation mit linearer Suche, - sequentiellen Organisation mit binärer Suche, - der index-sequentielle Organisation (ISAM) bis hin zum Begriff des Index in einem Datenbanksystem untersucht und mit ihren Vor- und Nachteilen dargestellt. • Im Folgenden wird generell von „Dateien“ gesprochen, im Zusammenhang mit relationalen DBMS kann man sich jeweils Tabellen vorstellen. Schestag Datenbanken (Bachelor) Kapitel 4 - 12 Die sequentielle Organisation – lineare Suche • • • fbi h_da Liegt eine Datei in unsortierter Form vor, so erfordert die Suche von Daten das sequentielle Lesen der Datei: ISBN Titel VerlagID EJahr 3011 1013 2899 1012 3012 … YYY Klm mmm Abc rst … 500 420 310 500 289 1977 2005 1980 2002 2010 … Preis € 49,90 12,95 19,80 24,80 68,80 … Sequentielle Organisation einer Datei Record ID Record 1 Record 2 Record 3 Record 4 Record 5 … Die Daten werden fortlaufend (sequentiell) in der Reihenfolge ihrer Eingabe gespeichert. In dieser Reihenfolge werden sie auch wieder gelesen und verarbeitet. Der Aufwand für (Lineare) Suche in einer unsortierten Datei mit n Datensätzen beträgt O(n), d.h. im „worst case“ müssen alle Datensätze durchlaufen werden, bis der gesuchte Satz gefunden ist. Schestag Datenbanken (Bachelor) Kapitel 4 - 13 Die sequentielle Organisation – binäre Suche • fbi h_da Verbesserungsansatz gegenüber linearer Suche: Die Datei wird nach einem Schlüssel, z.B. nach dem Primärschlüssel, sortiert abgespeichert, mehrere Records werden in einer Page untergebracht, und die Adresse der Pages in einem Pointer verfügbar gemacht. Primär Schlüssel Schestag ISBN Titel 1011 1012 1013 … 2889 … 3011 3012 … XXX Abc Klm VerlagID 500 500 420 EJahr Preis € Page ID 1997 2002 2005 78,90 24,80 12,95 Page 1 mmm 310 1980 19,80 YYY rst … 500 289 1977 2010 … 49,90 68,80 … Datenbanken (Bachelor) … Page 2 … Page 3 … Kapitel 4 - 14 Die sequentielle Organisation – binäre Suche fbi h_da Vorteil: Binäre Suche ist möglich, in der jeweiligen Page müssen die Daten jedoch immer noch sequentiell gelesen werden. Der Aufwand für Binäre Suche in einer sortierten Datei mit n Records beträgt O(log2(n)) – vgl. auch Anhang A. ABER: Das Update in einer Datei, die nach einem Schlüssel sortiert ist, ist mit erheblichen Aufwänden verbunden, insbesondere wenn beim Einfügen oder Löschen von Datensätzen Pagegrenzen überschritten werden! Die Sortierreihenfolge nach einem bestimmten Attribut lässt sich i. d. R. innerhalb einer Datei nicht mit der Sortierreihenfolge nach einem anderen Attribut vereinbaren. Schestag Datenbanken (Bachelor) Kapitel 4 - 15 Interne Datenorganisation fbi h_da Aufbau eines Speichermediums, Pages und Pufferverwaltung Datenorganisation • Index und B-Baum • Hash-Indexe Schestag Datenbanken (Bachelor) Kapitel 4 - 16 Die index-sequentielle Organisation • • • fbi h_da Zu Attributen, die in einer Datei besonders oft als Selektionskriterien verwendet werden, wird eine zweite, sortierte Datei angelegt, die zu jeder Ausprägung des Attributes den Pointer auf die entsprechende Page bzw. den zugehörigen Record enthält. Diese Datei nennt man Index. Als Plural im Kontext mit Datenbanken spricht man häufig von Indexen. Eine Index-Datei hat im Prinzip eine „2-spaltige Struktur“: Wert des indizierten Attributes auf- oder absteigend sortiert Schestag physische Adresse PID oder RID Datenbanken (Bachelor) Kapitel 4 - 17 fbi h_da Die index-sequentielle Organisation Ein Index ist immer sortiert nach dem ihm zugeordneten Attribut und deshalb geeignet, binäre Suche zu unterstützen. Index für die eindeutigen Werte des Attributes ISBN ISBN 1000 2000 … 6000 … Schestag Page ID 1 2 … 6 … Index für die nicht notwendig eindeutigen Werte des Attributes Erscheinungsjahr EJahr EJahr … 1958 1958 … 1959 … … 2011 … Datenbanken (Bachelor) Record ID … 2384 3887 … 2922 … … 8734 … Kapitel 4 - 18 fbi h_da Die index-sequentielle Organisation Ein Index erhöht die Geschwindigkeit beim Suchen, aber er reduziert die Geschwindigkeit bei Updates. • Bei jedem Hinzufügen eines neuen Records oder beim Ändern der entsprechenden Attribute wird auch unmittelbar der Index modifiziert. Diese Updates erfolgen analog den entsprechenden Vorgängen in sortierten Dateien. • Zu einer Datei kann es beliebig viele Indexe geben. Ein Index kann auch aus mehreren Attributen eines Records zusammengesetzt sein. Schestag Datenbanken (Bachelor) Kapitel 4 - 19 fbi h_da Beispiele von Indexen • Index auf dem Attribut VerlagID für die Buch-Datei VerlagID (Index) Schestag Buch-Datei (Daten) Dekor (Index) 310 3011 YYY 1977 500 ... Fisch 420 1013 Klm 2005 420 ... Fisch 500 1011 XXX 1997 500 ... Rose 500 1012 Abc 2002 500 ... Rose 500 2889 mmm 1980 310 ... Rose Datenbanken (Bachelor) Kapitel 4 - 20 fbi h_da Beispiele von Indexen • Index auf dem Attribut VerlagID und auf dem Attribut Erscheinungsjahr (EJahr) für die Buch-Datei VerlagID (Index) Schestag Buch-Datei (Daten) EJahr (Index) 310 3011 YYY 1977 500 ... 1977 420 1013 Klm 2005 420 ... 1980 500 1011 XXX 1997 500 ... 1997 500 1012 Abc 2002 500 ... 2002 500 2889 mmm 1980 310 ... 2005 Datenbanken (Bachelor) Kapitel 4 - 21 fbi h_da Beispiele von Indexen • Index über die zwei Attribute VerlagID und Erscheinungsjahr (EJahr) für die Buch-Datei VerlagID | EJahr (Index) Schestag Buch-Datei (Daten) 310 | 1980 3011 YYY 1977 500 ... 420 | 2005 1013 Klm 2005 420 ... 500 | 1977 1011 XXX 1997 500 ... 500 | 1997 1012 Abc 2002 500 ... 500 | 2002 2889 mmm 1980 310 ... Datenbanken (Bachelor) Kapitel 4 - 22 fbi h_da Dünne und dichte Indexe Man unterscheidet grundsätzlich zwei Arten von Indexen: • dünner Index: die Schlüsselwerte sind eindeutig, und die zugehörigen Tupel werden sortiert gespeichert. • dichter Index: die Schlüsselwerte sind eindeutig, aber die zugehörigen Tupel werden unsortiert gespeichert (Heap-Organisation), oder die Schlüsselwerte können in der Datei mehrmals vorkommen. Welche Schlüsselwerte einer Relation sind immer eindeutig, welche können mehrmals vorkommen? Inwiefern kann man bei eindeutigen Schlüsselwerten und zugehörigen, sortiert gespeicherten Tupeln die Anzahl der Einträge im Index reduzieren? Schestag Datenbanken (Bachelor) Kapitel 4 - 23 fbi h_da Dünner Indexe • Dünner Index auf dem Primärschlüsselfeld ISBN der Buch-Datei. Der Index enthält jeweils den ersten Schlüssel, der in einer Page vorkommt. ISBN (Index) ISBN PID 1000 2000 3000 4000 …. PID 1 PID 2 PID 3 PID 4 …. PID 1 1000|….1011|XXX|1997, … 1012|Abc|2002|… 1013|Klm |2005| … PID 2 2000|….2001|… 2002|… 2003| … PID 3 3000|….3011|YYY|1977| … 3012|rst|2010|… 3013| … Wo findet man den Datensatz mit ISBN 2889? Schestag Datenbanken (Bachelor) Kapitel 4 - 24 fbi h_da Dünner Indexe Dünner Index (non dense index) Die Index-Datei enthält nicht für jeden gespeicherten Record einen Eintrag, sondern nur für jede Page (Datenblock). Die Index-Datei hat weniger Datensätze als die eigentliche Datei, sie ist also „dünner“! Der Index enthält jeweils den ersten (oder letzten) Schlüssel, der in einer Page vorkommt und dessen Adresse (Pagepointer). Um die RID des gesuchten Record in der Index-Page zu finden, muss diese Page im Hauptspeicher noch sequentiell durchsucht werden. Dünne Indexe werden im allgemeinen für die Primärschlüssel der Records einer Datei erstellt (Primärindex). Schestag Datenbanken (Bachelor) Kapitel 4 - 25 fbi h_da Dichter Indexe Dichter Index (dense index) Die Index-Datei enthält für alle Records einen eigenen Index-Eintrag. Die Index-Datei hat genau so viele Datensätze, wie die eigentliche Datei, sie ist also genau so „dicht“ wie die eigentliche Datei! Die Suche im dichten Index erfolgt analog einer Suche in sortierten Dateien. Der Index enthält jeweils den Schlüsselwert und die Adresse des zugehörigen Records (Record-pointer, RID). Dichte Indexe werden im allgemeinen für die Sekundärschlüssel der Records einer Datei erstellt (Sekundärindex). In relationalen Datenbanken ist es i. d. R. sinnvoll, auf einen Fremdschlüssel einen Sekundärindex zu legen (vgl. auch Kapitel 5). Schestag Datenbanken (Bachelor) Kapitel 4 - 26 Indexed-sequentiell Access Method fbi h_da • Eigenschaften der index-sequentiellen Organisation Indexed-sequentiell Access Method – ISAM – Ein Index einer Datei wird immer nach den Schlüsselwerten sortiert gespeichert. – Pro Indexeintrag bzw. Schlüsselwert sind die Adressen der Pages und Records auf dem Speichermedium angegeben. – Bei dünnen, pageorientierten Indexen muss die Page sequentiell durchsucht werden, um die RID gesuchten Records zu finden. • Nachteil: Mit zunehmender Dateigröße nimmt die Performance von Anfrage- und Update-Operationen ab, insbesondere bei dichten Indexen. Lösungsansatz: Wird die Index-Datei selbst zu groß, so kann man für den Index wieder einen Index anlegen. Man erhält so einen mehrstufigen Index. • Eine solche Indizierung kann beliebig oft weiter geführt werden. Man erhält dann eine Baumstruktur, die in der Praxis i.d.R. als B-Baum (balancierter Baum, Bayer-Baum) realisiert wird, um eine Homogenität der Zugriffspfade zu erreichen. Schestag Datenbanken (Bachelor) Kapitel 4 - 27 fbi h_da Indexe und Bäume • Ein mehrstufiger Index als Baumstruktur besitzt die folgenden Komponenten: – Die unterste Ebene eines mehrstufigen Index (Indexbaum) nennt man Blätter des Baumes (sie entsprechen den Records der Datei). Die Adressverweise auf bestimmte Pages des Speichers nennt man Knoten. Der oberste Knoten in der Hierarchie, der keinen Vorgänger mehr hat, heißt Wurzel. Für einen Knoten x nennen wir einen darunter liegenden Knoten Sohn, einen darüber liegenden Knoten Vater (bzw. child und parent). – – – 65 32 97 Schestag Datenbanken (Bachelor) 117 130 119 125 132 109 112 102 103 108 93 80 99 74 122 106 95 47 51 58 68 81 89 53 78 45 87 71 66 70 72 39 43 36 38 33 16 20 35 48 40 37 24 14 13 11 10 5 8 1 3 17 27 7 114 76 115 41 75 12 Kapitel 4 - 28 fbi h_da B-Bäume • Ein B-Baum (Bayer-Baum (1972), balancierter Baum) ist ein mehrstufiger Index, bei dem alle Pfade von der Wurzel zu den Blättern gleich lang sind, ein B-Baum ist also immer höhenbalanciert. • Ein B-Baum der Ordnung m hat die folgenden Eigenschaften: – Alle Knoten sind gleich groß (aber sie müssen nicht alle immer gleich viele Einträge haben!). – Jeder Knoten enthält höchstens 2m Records. – Jeder Knoten - mit Ausnahme der Wurzel - enthält mindestens m Records. – Die Wurzel enthält maximal 2m Records und mindestens einen Record. – Jeder Record besteht aus einem Schlüssel- und einem nicht-Schlüssel-Anteil. – Ein Knoten - mit Ausnahme von Wurzel und Blättern - hat n+1 Nachfolgeknoten, wenn er n Schlüssel enthält (m n 2m). n=3 a b c a Schestag Datenbanken (Bachelor) a, b b, c c Kapitel 4 - 29 fbi h_da B-Bäume • Um in einem B-Baum mit n Knoten der Ordnung m einen Wert zu suchen, muss man höchstens logm+1(n)-mal auf die Platte bzw. den Index zu-greifen. • B-Bäume sind geeignet sowohl für – Punktanfragen ("Prodnr = 101322“) als auch für – Bereichsanfragen ("Preis 50.00 und Preis 200.00"). • In einem B-Baum werden neben dem Suchen alle Arten von UpdateOperationen ausgeführt (insert, update, delete). Bei Update-Operationen muss jeweils für die Balanciertheit des Baumes gesorgt werden. vgl. Hörsaalübung Algorithmen zum Suchen, Einfügen und Löschen in B-Bäumen: vgl. Anhang B. Schestag Datenbanken (Bachelor) Kapitel 4 - 30 Index inclusion – Anmerkung zu Praktikum 2 fbi h_da Warum kommt es im angegebenen Fall zu einer Index inclusion? Wie kann man diese Index inclusion verhindern? ??? /*==============================================================*/ /* Table: BOOT */ /*==============================================================*/ create table BOOT ( BOOTSTYP VARCHAR2(20) not null, BOOTSNR INTEGER not null, LETZTEWARTUNG DATE, constraint PK_BOOT primary key (BOOTSTYP, BOOTSNR) ); Schestag /*==============================================================*/ /* Index: BOOTSTYPZUORDNUNG_FK */ /*==============================================================*/ create index BOOTSTYPZUORDNUNG_FK on BOOT ( BOOTSTYP ASC ); Datenbanken (Bachelor) Kapitel 4 - 31 Interne Datenorganisation fbi h_da Aufbau eines Speichermediums, Pages und Pufferverwaltung Datenorganisation Index und B-Baum • Hash-Indexe Schestag Datenbanken (Bachelor) Kapitel 4 - 32 fbi h_da Hash-Indexe • Nachteil der Datenverwaltung über B-Bäume: In der Regel sind beim Durchlaufen der Pfade mehrere I/Os auf externen Speicher notwendig. Eine alternative Methode zur Datenverwaltung mit Hilfe von Indexen sind die Hash-Indexe: • • Die Record-Adressen werden über einen geeigneten Algorithmus, der Hash-Funktion, aufgrund des Schlüsselwertes unmittelbar berechnet. Eine Hash-Funktion sollte – „einfach“ zu berechnen sein, und – die Menge der Schlüsselwerte möglichst gleichmäßig und zufällig auf die Menge der verfügbaren Adressen abbilden. Menge der Speicherplätze (Adressen) Schlüsselmenge (Keys k) logisch {1011, 1012, 1013, ... 1021, 1022, 1023, ... 3011, 3012, ...} Schestag physisch Hash-Funktion h(k) Datenbanken (Bachelor) Kapitel 4 - 33 fbi h_da Hash-Indexe • • Voraussetzung : Datenbestände, die relativ „statisch“ sind, und bei denen möglichst selten Löschoperationen auftreten. Hash-Indexe eignen sich also nicht für sehr „dynamische“ Datenbestände. Die „bekannteste“ Hash-Funktion ist die Modulo-Funktion (DivisionsRest-Verfahren): h(k) = k mod p k=Schlüsselwert, p=Anzahl der vorhandenen Adressen • Die Modulo-Funktion lässt sich nur auf ganzzahlige numerische Schlüssel anwenden. Alphanumerische oder dezimale Schlüssel müssen so umgewandelt werden, dass sie ebenfalls in ganzzahliger, numerischer Form vorliegen. • Beispiel: Schestag p=1000, k={27, 489, 1.020, 2.027, ...} Datenbanken (Bachelor) h(27) = 27 h(489) = 489 h(1.020) = 20 h(3027) = 27 ... Kapitel 4 - 34 fbi h_da Hash-Indexe Kollisionsbehandlung (1) Für jede Adresse wird ein Überlaufbereich vorgesehen, und gleiche HashFunktionswerte werden durch Pointer linear verkettet. Suche nach einem Record entspricht der Berechnung des HashFunktionswertes und anschließender sequentieller Suche nach dem Schlüssel. Nachteil: Dieses Verfahren benötigt u. U. viel Speicherplatz und ist häufig ineffizient in der Suche. Schestag Datenbanken (Bachelor) Kapitel 4 - 35 fbi h_da Hash-Indexe Kollisionsbehandlung (2) Offene Hash-Verfahren Im Fall einer Kollision wird für den betroffenen Record durch Anwenden einer zweiten Hash-Funktion eine Ersatzadresse ermittelt. Dieses Verfahren kann – falls nötig – beliebig oft fortgeführt werden, und Adressen aus kollidierenden Bereichen können durch lineare Listen verkettet werden (Kollisionsketten). Die Berechnung des ersten Hash-Funktionswertes bezeichnet man als Streuen, die Berechnung der Ersatzwerte als Sondieren. Beispiel: hi(k)=(h(k)+c·i) mod m, c=const., lineares Sondieren hi(k)=(h(k)+i2) mod m, quadratisches Sondieren Sind Hash-Indexe für Punkt- und Bereichsabfragen gleichermaßen geeignet? Schestag Datenbanken (Bachelor) Kapitel 4 - 36 fbi h_da Zusammenfassung • Persistente Daten werden auf dem Plattenspeicher in Form von Pages verwaltet. • Der DB-Puffer ist geeignet, einmal geladene Pages im Hauptspeicher vorzuhalten, um den Zugriff auf die Daten zu beschleunigen. • Indexe (B-Bäume und Hash-Indexe) sind Zugriffsstrukturen, die dazu geeignet sind, wertebasierte Suche performant zu unterstützen. • Primärindexe sind geeignet für Primärschlüsselspalten, Sekundärindexe für Fremdschlüsselspalten. • Ein strategisches Unterscheidungsmerkmal für unterschiedliche Zugriffsstrukturen ist ihre Eignung für Punkt- und / oder Bereichsabfragen. Schestag Datenbanken (Bachelor) Kapitel 4 - 37 fbi h_da Datenbanken Einführung Semantische Datenmodellierung Relationenmodell Interne Datenorganisation 5. SQL - Structured Query Language 6. Prozedurale Spracherweiterungen von SQL, Stored Procedure und Trigger, JDBC 7. Transaktionsmanagement Schestag Datenbanken (Bachelor) Kapitel 4 - 38 Anhang A: Binäre Suche in Arrays fbi h_da Der Algorithmus a[n] sei ein geordnetes Array mit n Elementen, d.h. anfangs 0 = min (Index-Minimum), n-1 = max (Index-Maximum). x sei der gesuchte Wert. x wird gesucht im Bereich a[min] ... a[max]. Wähle einen Index pos zwischen min und max, idealerweise [(min+max)/2], wobei [ ] die Gauss-Klammer darstellt. Folgende Schritte werden wiederholt durchgeführt: • a[pos] > x suche weiter im Bereich a[min] ... a[pos-1] • a[pos] < x suche weiter im Bereich a[pos+1] ... a[max] • a[pos] = x Der Wert x befindet sich im Array bei Index pos. Der Wert x ist nicht im Array enthalten, wenn min > max erreicht wird. Schestag Datenbanken (Bachelor) Kapitel 4 - 39 fbi h_da Anhang A: Binäre Suche in Arrays • Wählt man für den Start-Index pos zwischen min und max den Wert „in der Mitte“, so halbiert sich der Aufwand für die Lösung des Problems bei jedem Schritt. eine Verdoppelung der Arraygröße bewirkt beim linearen Suchen eine Verdoppelung des Aufwandes, beim binären Suchen eine Erhöhung des Aufwandes um einen Schritt! • Einen Bereich von n Elementen kann man höchstens log2(n) mal halbieren.*) • Zu jeder natürlichen Zahl n gibt es eine natürliche Zahl m, sodass n zwischen den Zahlen 2m und 2m+1 liegt, d.h. 2m n 2m+1 . *) Zur Erinnerung: log2(n) = y : n = 2y, z.B. log2(32) = 5, denn 25 = 32. Schestag Datenbanken (Bachelor) Kapitel 4 - 40 Anhang A: Binäre Suche in Arrays • fbi h_da Beispiel Es sei n=19 m =4, denn 24 = 16 < 19 < 32 = 24+1 = 25. Um in einem Array mit 19 Elementen einen vorgegebenen Wert zu finden, benötigen wir maximal 4 Schritte: n=19 n=9 n=4 n=2 n=1 Schestag Datenbanken (Bachelor) Kapitel 4 - 41 fbi h_da Anhang A: Binäre Suche in Arrays • Die Komplexität f(n) eines Algorithmus ist i.d.R. funktional abhängig von einer „Leitgröße“ n. – Beim linearen Suchen können wir lineare Abhängigkeit beobachten, – beim binären Suchen dagegen logarithmische Abhängigkeit: best case lineare Suche 1 binäre Suche 1 average case n/2 log2(n)-1 worst case n log2(n) • Es ist schwierig, den genauen Aufwand zu bestimmen. Man schätzt deshalb für große n den Aufwand durch eine Funktion g(n) ab, sodass gilt: f(n) c ·g(n), mit einer Konstanten c. Man sagt, „f(n) ist höchstens von der Ordnung g(n)“ und schreibt f(n) = O(g(n)) („O-Notation“). Es gilt also: n/2 entspricht O(n), n entspricht O(n), log2(n)-1 entspricht O(log(n)) und log2(n) entspricht O(log(n)). • Häufige Komplexitäten von Algorithmen sind: konstant, linear, polynomial (alle Komplexitäten der Form n2-quadratisch, n3-kubisch, n4,...), logarithmisch, log-linear und exponentiell. Schestag Datenbanken (Bachelor) Kapitel 4 - 42 Anhang B: Suche in B-Bäumen fbi h_da Suchen eines Schlüssels s im B-Baum 1. Prüfe, beginnend bei der Wurzel, ob s im gerade betrachteten Knoten x enthalten ist. Falls ja fertig. Falls nein 2. 2. Prüfe, ob x ein Blatt (= Knoten ohne “Söhne”) ist. Falls ja erfolgloses Ende der Suche. Falls nein 3. 3. Stelle fest, zwischen welchen Schlüsseln si-1 und si des Knotens x der Schlüssel s liegt (bzw. ob s < s1 oder s > sk ist) und setze die Suche danach mit 1. beim Knoten x.sohn[i] fort. Schestag Datenbanken (Bachelor) Kapitel 4 - 43 fbi h_da Anhang B: Einfügen in B-Bäume Das Einfügen eines Schlüssels s geschieht grundsätzlich in den Blättern. 1. Durchlaufe den B-Baum mit dem neu einzutragenden Schlüssel wie beim Suchen, bis das Blatt gefunden wird, wo der Schlüssel einzutragen ist. Die Zahl der Schlüssel je Knoten (mit Ausnahme der Wurzel) muss zwischen m und 2m liegen. 2.a Anzahl der Schlüssel im Knoten < 2m Einfügen erfolgreich beendet. 2.b Anzahl der Schlüssel im Knoten = 2m es entsteht ein Überlauf, da das Blatt nach Einfügen 2m + 1 Schlüssel enthalten würde. Teile den Knoten in zwei Knoten zu je m Schlüsseln. Der mittlere Schlüssel des Knoten wird vom „Vater“ aufgenommen; die beiden Zeiger rechts und links dieses Schlüssels im „Vater“ zeigen dann auf das alte und das neue darunterliegende Blatt. Läuft auch der Vaterknoten über, so muss dieser ebenfalls in zwei Knoten aufgeteilt werden etc. 3. Läuft die Wurzel über, dann wird sie aufgespalten und eine neue Wurzel angelegt. Der B-Baum ist dann um eine Stufe gewachsen. B-Bäume wachsen von den Blättern zur Wurzel hin! Schestag Datenbanken (Bachelor) Kapitel 4 - 44 Anhang B: Löschen in B-Bäumen fbi h_da 1. Suche den Knoten x, in dem der Schlüssel s enthalten ist. 2. x ist ein Blatt lösche s (ggf. muß ein Unterlauf bereinigt werden, s.u.), andernfalls 3. 3. Ermittle den nächstgrößeren Schlüssel s’ zu s in einem Blatt des Baumes. 4. Ersetze s durch s’ und lösche s’ im Blatt x’. Enthält das Blatt x’ weiterhin m Schlüssel, so ist das Löschen beendet; andernfalls 5. 5. In x’ stehen nur noch (m-1) Schlüssel, man spricht von einem Unterlauf. Fasse x’ und einen benachbarten Knoten x’’, der den selben Vater wie x’ hat, zu einem neuen Knoten zusammen und übernehme dabei denjenigen Schlüssel aus dem Vaterknoten, dessen beide Zeiger auf die benachbarten Knoten gezeigt haben. 6.a Ist der neue Knoten zu groß, muß er entsprechend dem Überlaufverfahren (s. Einfügen) wieder in zwei gleichgroße Knoten aufgeteilt werden, wobei der mittlere Schlüssel vom „Vater“ aufgenommen wird. 6.b Ist der „Vater“ beim Zusammenfassen von x’ und x’’ zu klein geworden, so muß auch er mit einem benachbarten Knoten zusammengefaßt werden etc. Dieser Prozeß kann sich bis zur Wurzel fortsetzen. Enthält die Wurzel vor dem Zusammenfassen nur einen Schlüssel, so verringert sich die Höhe des Baumes um 1. Die Höhe eines B-Baumes kann sich beim Löschen verringern! Schestag Datenbanken (Bachelor) Kapitel 4 - 45