Synchronisationsmodul Informatik Teil-Modul „Datenbanken“ Kapitel 4: Interne Datenorganisation Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 1 Interne Datenorganisation 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 2 Datensuche wertebasiert heap-organisiert Wo finde ich die Prüfungsakte des Studenten mit der Matrikelnummer 685 234 ? Irgendwo hier, in einem dieser Ordner! Suchstrategie? Aufwand? Schestag Synchronisationsmodul DB (Master DS) C Kapitel 4 - 3 Datensuche wertebasiert sequenzielle Ablage 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 4 Datensuche wertebasiert mit direkter Referenz 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 Synchronisationsmodul DB (Master DS) C Kapitel 4 - 5 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 6 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 7 Zugriffszeiten 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 8 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 9 Interne Datenorganisation Aufbau eines Speichermediums, Pages und Pufferverwaltung • Datenorganisation • Index und B-Baum • Hash-Indexe Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 10 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 11 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. • Folgende Organisationsformen werden vorgestellt: - Heap-Organisation mit linearer Suche, - Sequenzielle Organisation mit binärer Suche, - Indexsequentiellen Organisation, bei der eine sequenzielle DateiOrganisationsform durch eine Indexdatei über dem Sortierattribut der sequenziellen Datei ergänzt wird. • Im Folgenden wird generell von „Dateien“ gesprochen, im Zusammenhang mit relationalen DBMS kann man sich jeweils Tabellen vorstellen. Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 12 Die Heap-Organisation – lineare Suche • Die Daten der Datei liegen in unsortierter Form vor: 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 … Heap-Organisation einer Datei Record ID Record 1 Record 2 Record 3 Record 4 Record 5 … • Die Daten werden fortlaufend 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 13 Die Sequenzielle Organisation – binäre Suche • 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 … Synchronisationsmodul DB (Master DS) … Page 2 … Page 3 … Kapitel 4 - 14 Die Sequenzielle Organisation – binäre Suche 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 15 Interne Datenorganisation Aufbau eines Speichermediums, Pages und Pufferverwaltung Datenorganisation • Index und B-Baum • Hash-Indexe Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 16 Die Indexdatei • • • 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(-datei). Als Plural im Kontext mit Datenbanken spricht man häufig von Indexen. Eine Indexdatei hat im Prinzip eine „2-spaltige Struktur“: Wert des indizierten Attributes auf- oder absteigend sortiert Schestag physische Adresse PID oder RID Synchronisationsmodul DB (Master DS) Kapitel 4 - 17 Die Indexdatei 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 … Record ID … 2384 3887 … 2922 … … 8734 … Synchronisationsmodul DB (Master DS) Kapitel 4 - 18 Die Indexdatei 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. Der Begriff des Index ist nicht spezifisch für relationale DBMS sondern spielt auch in DBMS auf der Grundlage anderer Datenbankmodelle eine wichtige Rolle als Zugriffspfad! Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 19 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 20 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 21 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 ... Synchronisationsmodul DB (Master DS) Kapitel 4 - 22 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 23 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 …. Wo findet man den Datensatz mit ISBN 2889? Schestag 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| … Synchronisationsmodul DB (Master DS) Kapitel 4 - 24 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 25 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 26 Indexsequenzielle Dateiorganisation Eine sequenzielle Datei-Organisationsform kann durch eine Indexdatei über dem Sortierattribut der sequenziellen Datei ergänzt wird. Man spricht dann von indexsequenzieller Dateiorganiation. Eine indexsequentielle Datei kann man sich als Baum mit mindestens zwei Ebenen vorstellen: Blattebene: Hauptdatei mit den gespeicherten Datensätzen Die Knoten in allen anderen Ebenen des Baumes sind Indexdateien • Man spricht von einem n-stufigen Index, wenn es eine Hauptdatei und n Indexdateien gibt Der ISBN-Index auf Folie 4-24 ist ein 1-stufiger Index. • Der i+1-te Index zeigt auf den i-ten Index. • Wird eine Indexdatei selbst zu groß, so kann diese wieder indexsequenziell verwaltet werden. Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 27 Indexiert-nichtsequenzieller Zugriffspfad Ist keine Sortierung in der Hauptdatei gegeben, so kann man dennoch einstufige oder mehrstufige, indexiert-nichtsequenzielle Zugriffspfade aufbauen. Die höheren Indexstufen sind dann wieder indexsequentiell organisiert. Unabhängig von der zugrunde liegenden Dateiorganisation der Hauptdatei gilt: Eine Indizierung von Indexstufen 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 28 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 Synchronisationsmodul DB (Master DS) 122 112 109 103 108 102 117 130 119 125 132 106 99 93 80 95 74 81 89 68 78 53 87 71 66 70 72 45 47 51 58 36 38 40 39 35 33 16 20 48 43 37 24 14 13 11 10 5 8 1 3 17 27 7 114 76 115 41 75 12 Kapitel 4 - 29 B-Baum • • • 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. Im Datenbankbereich sind die Knoten der Suchbäume zugeschnitten auf die Seitenstruktur des DBMS. 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 Synchronisationsmodul DB (Master DS) a, b b, c c Kapitel 4 - 30 Seitenformat des B-Baums Seitenformat: Z0 S1 Z1 D1 S2 Z2 D2 S3 … Sm Zm Dm frei Zi = Zeiger auf Seite der nächsten Stufe Si = Schlüssel (Zugriffsattributwert) Di = Daten des Satzes oder Verweis auf den Satz (bzw. die Sätze) d.h. materialisiert oder referenziert Ein B-Baum ist als Primär- und Sekundärindex geeignet. Um in einem B-Baum mit n Knoten der Ordnung m einen Wert zu suchen, muss man höchstens logm (n)-mal auf die Platte bzw. den Index zugreifen. Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 31 Variante B+-Baum Der B+-Baum ist die in der Praxis am häufigsten eingesetzte Variante des B-Baumes: Änderungsoperationen sind effizienter, die Baumhöhe ist verringert. Die Daten befinden sich nur auf den Blattseiten. Die inneren Knoten enthalten nur Schlüssel und Zeiger auf die nachfolgende Seite der nächsten Stufe: • Seitenformat innere Knoten: Z0 S1 Z1 S2 Z2 S3 … Sm Zm frei Zi = Zeiger auf Seite der nächsten Stufe Si = Schlüssel • Seitenformat Blattknoten: V S1 D1 S2 D2 S3 … Sm Dm frei N Si = Schlüssel Di = Daten des Satzes oder Verweis auf den Satz V = Vorgänger-Zeiger N = Nachfolger-Zeiger Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 32 B-Baum vs. B+-Baum 13 Schulz … 14 Meier • … keine Daten(-verweise) in den inneren Knoten es passen mehr Einträge auf eine Seite Reduktion der Höhe des Baumes weniger Seitenzugriffe bei lookup, insert, delete aber jetzt immer logm(n) Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 33 B- und B+-Bäume • B- und 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- bzw. B+-Baum werden neben dem Suchen (Lookup) alle Arten von Update-Operationen ausgeführt (insert, update, delete). Bei UpdateOperationen 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 34 Index inclusion – Anmerkung zu Praktikum 2 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 ); Synchronisationsmodul DB (Master DS) Kapitel 4 - 35 Interne Datenorganisation Aufbau eines Speichermediums, Pages und Pufferverwaltung Datenorganisation Index und B-Baum • Hash-Indexe Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 36 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. Schlüsselmenge (Keys k) Menge der Speicherplätze (Adressen) logisch {1011, 1012, 1013, ... 1021, 1022, 1023, ... 3011, 3012, ...} Schestag physisch Hash-Funktion h(k) Synchronisationsmodul DB (Master DS) Kapitel 4 - 37 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, ...} Synchronisationsmodul DB (Master DS) h(27) = 27 h(489) = 489 h(1.020) = 20 h(3027) = 27 ... Kapitel 4 - 38 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 39 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 40 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 41 Vorkenntnisse: Ergebnisse des Eingangstests* 1 Fragen und Antworten aus dem Bereich „Zugriffspfade “ richtig 1. Was ist ein Index? (3/11) falsch im Prinzip richtig, aber … Ein Index wird verwendet, um die Performance einer DB zu erhöhen. Grundsätzlich ist damit eine effiziente Speicherstruktur gemeint. Ohne Index müsste bei einer Abfrage die komplette Datenbank durchlaufen werden, bis der Treffer erreicht wird. Der Index enthält alle möglichen wählbaren Daten. Eine Positionsbezeichnung innerhalb eines Vektors/Arrays. Meistens als natürliche Zahl ausgewiesen. Wie würden Sie die Antwort nach Kapitel 4 formulieren? * insgesamt 11 Teilnehmer Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 42 Vorkenntnisse: Ergebnisse des Eingangstests 2 richtig 2. Was ist ein B-Baum? (1/11) falsch im Prinzip richtig, aber … Ein binomialer Baum. Jeder Knoten hat zwei Kind-Knoten. Wie würden Sie die Antwort nach Kapitel 4 formulieren? Schestag Synchronisationsmodul DB (Master DS) Kapitel 4 - 43 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 44 Anhang A: Binäre Suche in Arrays 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 45 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 46 Anhang A: Binäre Suche in Arrays • 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 47 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 worst case n/2 log2(n)-1 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 48 Anhang B: Suche in B-Bäumen 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 49 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 50 Anhang B: Löschen in B-Bäumen 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 Synchronisationsmodul DB (Master DS) Kapitel 4 - 51