Zusammenfassung der Vorlesungen Einführung in Datenbanken (Prof. Jarke) Implementierung von Datenbanken (Prof. Jarke) Indexstrukturen von Datenbanken (Prof. Seidl) zur Vorbereitung der Vertiefungsprüfung bei Herrn Prof. Jarke Mir hat diese Zusammenstellung sehr geholfen. Hoffe, dass sie auch Euch eine Hilfe sein kann. Zusammenfassung von Indexstrukturen von Datenbanken eher grob, da Prüfung bei Herrn Prof. Jarke Daniel Dünnebacke Aachen, Mai 2007 Keine Gewähr auf Richtigkeit und Vollständigkeit! Anmerkungen an [email protected]! Danke Inhaltsverzeichnis Inhaltsverzeichnis....................................................................................................................... 2 Einführung in Datenbanken........................................................................................................ 4 Datenbankentwurf .................................................................................................................. 4 ER-Diagramm ........................................................................................................................ 4 UML vs. ER ........................................................................................................................... 5 Algorithmus zur Übersetzung von ER in Relationenschema................................................. 5 SQL-Abfrage .......................................................................................................................... 6 Views...................................................................................................................................... 7 Relationales Datenmodell ...................................................................................................... 7 Tupel- /Domaincalculus ......................................................................................................... 7 Functional Dependencies ....................................................................................................... 7 Armstrong Axiome................................................................................................................. 8 Normalformen ........................................................................................................................ 8 Algorithmen zur Prüfung und Erstellung besserer Schemas.................................................. 9 OO-Datenbanken.................................................................................................................. 10 XML ..................................................................................................................................... 10 Implementierung von Datenbanken ......................................................................................... 12 5-Schichten-Modell DBMS.................................................................................................. 12 Tableau-Methode ................................................................................................................. 13 Implementierung von Joins .................................................................................................. 13 B/ B*-Bäume........................................................................................................................ 13 algebraische Optimierung .................................................................................................... 14 Semi-Join.............................................................................................................................. 14 gutartige ßà bösartige Komponenten................................................................................ 15 Quantgraphen ....................................................................................................................... 15 Kostenmodelle...................................................................................................................... 15 Transaktionsverwaltung ....................................................................................................... 15 Transaktion......................................................................................................................... 16 Konflikte............................................................................................................................. 16 ACID-Prinzip ..................................................................................................................... 16 Read-Write-Modell ............................................................................................................ 16 Serialisierbarkeit................................................................................................................. 17 Deadlocks ........................................................................................................................... 18 Scheduler .............................................................................................................................. 18 sperrende Scheduler ........................................................................................................... 19 nicht-sperrende Scheduler .................................................................................................. 19 Recovery............................................................................................................................... 20 LOGs .................................................................................................................................. 20 UNDO-REDO .................................................................................................................... 20 Indexstrukturen von Datenbanken ........................................................................................... 21 Indexierung eindimensionaler Daten ................................................................................... 21 Hashing............................................................................................................................... 21 B-Baum .............................................................................................................................. 22 Bitmap Indexing ................................................................................................................. 23 Indexierung mehrdimensionaler Daten ................................................................................ 23 Invertierte Listen ................................................................................................................ 23 Raumfüllende Kurven ........................................................................................................ 24 Quad-Tree........................................................................................................................... 24 2 Grid-File ............................................................................................................................. 25 MDB-Bäume ...................................................................................................................... 25 Indexierung räumlicher Daten.............................................................................................. 26 Punkttransformation ........................................................................................................... 26 Clipping.............................................................................................................................. 26 R-Bäume............................................................................................................................. 26 Approximation ................................................................................................................... 29 Dekomposition ................................................................................................................... 30 Indexierung hochdimensionaler Daten................................................................................. 30 X-Baum .............................................................................................................................. 30 Indexstrukturen für metrische Daten .................................................................................... 31 Varianten ............................................................................................................................ 31 M-Baum ............................................................................................................................. 32 Indexstrukturen für Intervalldaten........................................................................................ 33 Interval B-Tree ................................................................................................................... 33 Relationalen Intervallbaum ................................................................................................ 33 3 Einführung in Datenbanken Datenbankentwurf Ziele des Datenbankentwurfs: (KEVAMS) - Korrektheit: Wiedergabe der Konzepte des Modells, Integrität, Konsistenz, Datenwiederherstellung - Effizienz: Reaktionszeit, Kosten von Anfragen, Ressourcen - Vollständigkeit aller relevanten Anwendungsaspekte - Adaptivität: Anpaßbarkeit an neue oder unterschiedliche Anforderungen - Minimalität: Keine nichtnotwendige Redundanz - Sicherheit: Datenschutz, Authorisierungsmechanismen, Verfügbarkeit Vorgehen - Anforderungsanalyse - konzeptioneller Entwurf - Der Entwurf ist unabhängig vom Zielsystem - Definition von Objekten (Entitäten), Relationen, Anwendungsregeln, is_A, Constraints (ER-Diagramm ↔ UML) - logischer Entwurf - Konvertierung der Konzepte in ein konkretes Datenmodell - Implementierung - Validierung/ Akzeptanztest ER-Diagramm Entitäten sind Objekte oder Personen der realen Welt. Sie werden durch Attribute beschrieben. Attribute charakterisieren und unterscheiden Entitäten voneinander. Weiterhin charakterisieren sie Beziehungen zwischen den Entitäten. Schlüsselattribute (unterstrichen) dienen als eindeutiges Identifizierungsmerkmal Mehrwertige Attribute können mehrere Werte aus ihrem Wertebereich annehmen Beziehungen verbinden Entitäten miteinander. Sie können ebenfalls Attribute besitzen Kardinalitäten geben an, wie viele Entitäten eines Typs an einer Beziehung teilnehmen können. Teilnahmezwang kann allerdings nicht dargestellt werden. Arten: - 1:1 – Beziehung - 1:m – Beziehung - n:m – Beziehung - min:max – Beziehung (Definition unterer bzw. oberer Grenzen) 4 Generalisierungen und Spezialisierungen werden mit Hilfe der isA-Beziehung ausgedrückt. Sie stehen für Vererbungsbeziehungen zwischen allgemeinen und speziellen Entitäten. Möglichkeiten: - disjunkt: à in Richtung Spezialisierung - nicht disjunkt: Überlappungen möglich. à in Richtung Generalisierung - total: vollständige Dekomposition: t neben dem Symbol - teilweise: mehr zerlegbare Teile möglich: p neben dem Symbol Aggregationen eigenen sich zum Zusammenbau von komplexen Objekten. Dies erhöht die Lesbarkeit des Diagramms, interne Strukturen werden so versteckt. UML vs. ER (Kemper, S.57ff) Anders als im ERD beschreibt eine Klasse nicht nur die strukturelle Repräsentation (Attribute) der Objekte sondern auch deren Verhalten in der Form von zugeordneten Operationen. Objekte/ Klassen Assoziation Generalisierung/ Spezialisierung Aggregation Entitäten Beziehungen mit Attributen Generalisierung/ Spezialisierung Kategorien (über existenzabhängige Entities) Lässt sich Aggregation auch im ER-Diagramm ausdrücken? Ja, Simulation über Assoziationen, aber etwas andere Semantik, da in UML ein Objekt nur an einer Aggregation teilnehmen kann, dieser Constraint lässt sich in ER nicht ausdrücken! Algorithmus zur Übersetzung von ER in Relationenschema relationale Entwurfsziele (RINN) - geringe Relationenzahl (Joins teuer) - einfacher Charakter von Integritätsbestimmungen (Schlüsselbedingungen,…) - potentiell wenige Nullwerte (Platzverbrauch und Semantikprobleme) - gute Normalformeneigenschaft zur Verhinderung von Anomalien Entitäten mit Attributen Jede Entität wird zu einer Relation (Tabelle). Ihre Attribute bilden ihre Spalten. Zusammengesetzte Attribute werden aufgelöst und ihre atomaren Bestandteile werden in der Tabelle erfasst. Für jedes mehrwertige Attribut wird eine neue Tabelle erstellt, welche als Schlüssel den zusammengesetzten Schlüssel bestehend aus dem Primärschlüssel der Entität zusammen mit dem Attributsnamen erhält. Bei starken Entitätstypen bilden die unterstrichenen Attribute auch den Primärschlüssel. Bei schwachen Entitätstypen werden ebenfalls alle Attribute miteinbezogen. Als Fremdschlüssel wird der PK der Beziehung verwendet, die mit den Eigentümerentitätstypen korrespondiert. Der Primärschlüssel wird aus der Kombination des PK der Eigentümerentität, dem Fremd- und partiellen Schlüssel gewählt. 1:n – Beziehungen 5 Diese Beziehungen werden in die betroffene Entität auf der „n-Seite“ integriert. Die Relation der „n-Seite“ erhält als Fremdschlüssel den Schlüssel der Entität auf der „1- Seite“ und alle Attribute der Beziehung. Grund: Jede Entitätsinstanz hängt mit genau einer Instanz auf der „1-Seite“ zusammen. 1:1 Beziehungen Handelt es sich um zwei totale Teilnahmen, so werden beide Entitäten zu einer Relation verschmolzen. Die betroffenen Entitäten dürfen nicht an anderen Beziehungen teilnehmen. Ansonsten erhält der Entitätstyp mit totaler Teilnahme als Fremdschlüssel den PK des anderen Typen und alle Attribute der Beziehung. m:n - Beziehungen Die Beziehung wird als neue Tabelle erstellt. Ihr Schlüssel setzt sich aus den PKs der teilnehmenden Entitäten zusammen. Die teilnehmenden Entitäten werden nach den bekannten Regeln übersetzt. Anmerkung: Diese Methode ist auch bei allen anderen Beziehungstypen möglich. Es können so Nullwerte in Fremdschlüsseln vermieden werden. Rekursive Beziehungen Es werden zwei unabhängige Tabellen erstellt. Ihr Schlüssel ist jeweils die Kombination der PKs der beiden teilnehmenden Entitäten. Generalisierung / Spezialisierung Vier Möglichkeiten: Erstelle eine Tabelle für die Generalisierungsentität, dann für jede Spezialisierung eine Tabelle mit den Attributen der jeweiligen Spezialisierung und dem Primärschlüssel der Generalisierung. Erstelle eine Relation für jede Subklasse mit den passenden Attributen und dem PK der Generalisierung disjunkte Subklassen: Erstelle eine einzelne Relation mit allen Attributen, demselben PK und einem diskriminierenden Attribut, welches die Zugehörigkeit eines Tupels zu einer Subklasse ausdrückt (z.B. Stellentyp) überlappende Subklassen: Erstelle eine Relation mit demselben PK der Generalisierung. Es werden für jeden Subtyp diskriminierende Attribute eingeführt, die boolesche Werte die Zugehörigkeiten der Tupel zu den jeweiligen Subklassen anzeigen. SQL-Abfrage Select… From… Where… Group by… Order by… Having… RA-Algebra Projektion (unsortiert n*log(n)) Join; kartesisches Produkt (Auswahl der zu bearbeitenden Relationen) Selektion Umbenennung Vereinigung Mengendifferenz Schnitt 6 Views Für Views gibt es keine Modellierung im rel. Modell. Views (in SQL) sind virtuelle Tabellen. Durch sie ist es möglich, Spalten aus verschiedenen Basistabellen zusammenzuführen und deren Spaltennamen umzubenennen Relationales Datenmodell Ein Datenmodell dient allgemein der Herstellung einer Abstraktion zum Zwecke der Beschreibung eines Problems (Realweltsituation) Abstraktion - Klassifikation - Aggregation (Zusammenbau) - Verallgemeinerung bzw. Spezialisierung D = ( R, ∑ R ) (siehe Aufgabe 3.2 der Übung zu EDB aus WS 05/06) D = relationales Datenbankschema R = Menge von relationalen Schemata ∑R = Menge von interrelationalen Abhängigkeiten Relationen: Teilmenge des kartesischen Produktes der Wertemengen der Attribute Tupel: Elemente von diesen Operationen: Algebra/ Kalkül Operationen der Relationenalgebra: - Schnitt, Vereinigung, Differenz benötigen verträgliche Attributmengen - Projektion, Selektion, Join, Renaming Integritätsbedingungen: Interrellational: z.B. Foreign Keys Intrarelational: Keys Tupel- /Domaincalculus Tuple: Domain: {n | (∃a )(∃b) : Angestellter (a ) ∧ Abteilung (b) ∧ b.Ort =" Düsseldorf "∧ a.name = n} {n | (∃A# )(∃Abt # )(∃Mgr # ) : Angestellter ( A# , n, Abt # ) ∧ Abteilung ( Abt # , " Düsseldorf " , Mgr # )} Functional Dependencies Eigenschaft: Abschlusseigenschaft: Das Ergebnis einer relationalen Operation ist stets wieder eine Relation. Dies ist ein Vorteil gegenüber objektorientierten Anfragesprachen. Definition: Sei V eine Menge von Attributen X, Y aus V, r ist aus Rel(V) (x à y) (r) := 1, falls für alle u, w aus r: u(x) = w(x) => u(y) = w(y) 0 sonst 7 Eine funktionale Abhängigkeit (bezeichnet durch XàY, zwischen zwei Attributmengen X und Y) die Teilmengen eines universellen Relationsschemas („eine große Tabelle mit eindeutigen Attributsnamen“) sind, bezeichnet die Abhängigkeit der Attributsmenge Y von der Menge X. Das heißt, dass die Werte von Y eindeutig durch die Werte von X bestimmt sind. Key Definition: Sei K eine Teilmenge von V (K à V) (r) := 1, falls für alle u, w aus r: u(K) = w(K) => u(V) = w(V) = r Armstrong Axiome Y ⊆ X ⇒ X →Y - Reflexivität X → Y ∧ Z ⊆ W ⇒ XW → YZ - Erweiterung - Transitivität X →Y ∧Y → Z ⇒ X → Z von FDs zum Ziel der Erhaltung der funktionalen Abhängigkeiten. Beweis direkt aus den Fds! Weitere (RAP): - Reflexivität X →X - Akkumulation X → YZ ∧ Z → AW ⇒ X → YZA X →Y ∧Z ⊆Y ⇒ X → Z - Projektivität FDs korrekt und vollständig (Beweis siehe Vossen, S.158) Normalformen (Vossen, S.193ff) Nachteile Normierung: Fragmentierung der Informationen - wegen der Anomalien notwendig - aber Zusammensetzen der Fragmente mit Join teuer Die ersten drei Normalformen sowie die Boyce-Codd Normalform basieren auf den vorgestellten funktionalen Abhängigkeiten zwischen den Attributen einer Relation. Ziele der Normalisierung sind die Erreichung von minimaler Redundanz und die Minimierung/ Eliminierung von Einfüge-, Lösch- und Update-Anomalien (Vossen, S.192). Die Eigenschaft des verlustfreien Joins ( (∀r ∈ Sat ( R )) r =>< ki=1 π X i (r )) gewährleistet, dass in Bezug auf die nach der Zerlegung erstellten Relationenschemas keine unechten Tupel erzeugt werden. (Test durch Tableau-Methode) + Die Eigenschaft der Abhängigkeitswahrung ((U ik=1 Fi ) = F + ) gewährleistet, dass jede funktionale Abhängigkeit nach der Zerlegung in mindestens einer Relation dargestellt wird. (Test durch Abschlussberechnung durch Armstrong-Axiome) Die Eigenschaft des verlustfreien Joins muss auf jeden Fall erreicht werden, während die Eigenschaft der Abhängigkeitswahrung manchmal geopfert werden kann (siehe später). Weiterhin besteht kein Zwang, bis zur höchstmöglichen Normalform normalisieren zu müssen 8 1NF Die Relation sollte keine nicht atomaren Attribute oder verschachtelte Relationen enthalten. Lösung: Erstelle für jedes nicht atomare Attribut oder jede verschachtelte Relation neue Relationen. 2NF In Relationen, deren Primärschlüssel mehrere Attribute enthalten, sollte kein Nichtschlüsselattribut funktional von einem Teil des Primärschlüssels abhängen. (l-minimal) Lösung: Zerlege die Relation und erstelle eine neue für jeden partiellen Schlüssel mit seinen abhängigen Attributen. Erhalte die (restliche) Relation mit dem ursprünglichen Primärschlüssel und Attributen, die von diesem funktional voll abhängig sind. 3NF Eine Relation sollte kein Nichtschlüsselattribut enthalten, das funktional von einem anderen Nichtschlüsselattribut (oder von einer Menge von Nichtschlüsselattributen) bestimmt wird. Das heißt, es sollte keine transitive Abhängigkeit eines Nichtschlüsselattributs vom Primärschlüssel bestehen. Lösung: Zerlege die Relation und erstelle eine neue, die das bzw. die Nichtschlüsselattribute beinhaltet, die funktional von anderen Nichtschlüsselattributen bestimmt werden. BCNF Geringfügiger Unterschied zu 3NF: Das verletzende Attribut kann nur prim sein. Problem: Bei der BCNF können funktionale Abhängigkeiten verloren gehen. Der später präsentierte Algorithmus stellt jedoch sicher, dass so wenige wie möglich bei der Zerlegung verloren gehen. Strenger als 3NF, da jede NF in BCNF auch in 3NF ist. Nur falls XàA in einem Relationsschema R gilt, während X kein Superschlüssel und A ein Prime-Attribut ist, befindet sich R nur in 3NF und nicht in BCNF. Algorithmen zur Prüfung und Erstellung besserer Schemas Die Dekomposition Input: Ein universelles Schema R(U,F) Output: Eine verlustfreie BCNF – Zerlegung D=(R,.) von R àAllerdings können funktionale Abhängigkeiten verloren gehen (nicht immer abhängigkeitserhaltend), der Algorithmus stellt allerdings sicher, dass nur eine minimale Menge von FDs verloren geht. Der Synthesealgorithmus Die Idee des Verfahrens besteht grob gesagt darin, für jede (neue) linke Seite einer FD in einer Basis für die vorgegebene FD-Menge ein eigenes Schema zu erzeugen. Input: Ein universelles Schema R(U,F) Output: Eine verlustfreie, unabhängige Zerlegung in 3NF (mit beibehalten aller FDs) D=(R,.) von R. Dieser Algorithmus arbeitet schneller als der Dekompositionsalgorithmus. Anmerkung: Die beiden Algorithmen sind nicht-deterministisch. Der Synthesealgorithmus hängt von der erzeugten minimalen Hülle von F ab, d. h. es existieren mehrere minimale Hüllen. Der Zerlegungsalgorithmus ist abhängig von der Reihenfolge, in der ihm die funktionalen Abhängigkeiten zugeführt werden. à Einige Entwürfe können somit anderen unterlegen oder sogar gänzlich unerwünscht sein. 9 OO-Datenbanken (Kemper, S. 357) Konzepte: - Objekte und Klassen - Generalisierung/ Spezialisierung und Vererbung - OID (zustands- und ortsunabhängiger Objektidentifier) [a) + b)] à jedes Objekt ist eindeutig über seine automatisch vom System generierte Identität referenzierbar - Polymorphität - Integration von Verhaltens- und Struktur-Beschreibung [c) + d)] à Operationen werden integraler Bestandteil der Objektdatenbank à Vermeidung der umständlichen und i.A. ineffizienten Transformationen zwischen Datenbank und Programmiersprache à Durch Objektkapselung (Geheimnisprinzip), da die interne Struktur den Benutzern verborgen bleibt Unzulänglichkeiten des relationalen Datenmodells (Kemper, S. 355) a) Segmentierung - spätere Zusammenführung teuer b) Künstliche Schlüsselattribute - häufig keine Anwendungssystematik, trotzdem müssen sie gewartet werden c) Fehlende Verhaltens-Beschreibung d) Externe Programmierschnittstelle Darstellung von Entitäten nur als Tupel à besteht aus einer festen Anzahl von atomaren (nicht aus komplexeren Strukturen zusammengesetzt) Literalen à ist ein unveränderlicher Wert Zum Vergleich von OODB und RDB siehe Aufgabe 9.1!!!! XML semi-strukturierte Daten (z.B. auch RDF): Darunter versteht man Daten, die zum großen Teil eine fest vorgegebene Struktur besitzen; gleichzeitig aber auch Elemente beinhalten, die diesem statischen Schema nicht unterliegen. semi-strukturierte Daten weisen eine gewisse Struktur auf, können aber nicht in ein Datenbankschema eingeordnet werden. Das hat den Vorteil, dass sich Informationen einerseits strukturieren lassen, andererseits aber kein starres Schema eingehalten werden muss. XML beschreibt die Struktur und die Semantik, nicht die Formatierung (im Ggs. zu HTML) relationales Datenmodell à strukturiert XML à semi-strukturiert HTML à Formatierungssprache (kein Schema) Bestandteile: - optionale Präambel - optionales Schema - einziges Wurzelelement, welches beliebig viele und beliebig tief geschachtelte Unterelemente beinhalten kann 10 ohne Schema: wohl-geformt mit Schema (umbedingt einhalten): valide oder gültig Anfragesprache XQuery à flwr (gesprochen „flower“) - Ausdruck for… for $z in //zimmertyp return $z Bei der Auswertung wird $z mehrfach gebunden, nacheinander an alle Zimmertypen, und in jedem Schritt ausgegeben. Variablen werden sukzessive gebunden (Variablengültigkeit; SQL:from) let… let $z := //zimmertyp return $z Ergebnis ist eine Sequenz von Knoten, $z wird an eine Knotenmenge gebunden where… Selektion; optional order by… optional return… XML Struktur (z.B.<Kosten><VK>{$m/@Preis}</VK></Kosten>) ($--> Variablenbezeichnung) Beispiel: for $book in /medialist/book where $book/author = „Nissen“ return $book Rückgabe sind komplette Knoten mit daran hängenden Teilbäumen (strukturierte Rückgaben) gegenüber einfachen Werten in SQL (Werte von Attributen, die in der SELECT-Klausel stehen)! XPath-Syntax als „Untersprache“! Zugriff auf Elemente: Das zentrale Konzept von XPath sind die so genannten Lokalisierungspfade, die aus aneinander gereihten - jeweils durch ein „/“ Zeichen voneinander abgetrennten Lokalisierungsschritten bestehen. Ein Lokalisierungsschritt selektiert - ausgehend von einem Referenzknoten - eine Knotenmenge. Jeder der Knoten in dieser Menge dient dann als Referenzknoten für den nachfolgenden Lokalisierungsschritt in einem längeren Lokalisierungspfad. Alle im letzten Lokalisierungsschritt so selektierten Knotenmengen werden vereinigt und bilden das Ergebnis des gesamten Lokalisierungspfades. 11 Implementierung von Datenbanken 5-Schichten-Modell DBMS (siehe Übung 1.3 SS03, Folie 12) Transaktion(sprogramm) à Mengen-orientierte Schnittstelle (a) à Translate and optimize queries logische Datenstruktur à Satz-orientierte Schnittstelle (b) à Manage cursor, sort components and dictionary logische Zugriffsstrukturen à Interne Satzschnittstelle (c) à Manage record and index Speicherstrukturen à System Buffer Schnittstelle (d) à Manage buffer and segments Seitenzuweisung à Dateischnittstelle (e) à Manage files and external memory Speicherzuweisungs-Strukturen à Geräteschnittstelle (f) à physikalisches Laufwerk Schnittstellen: (a) set-oriented interfaces Objekte: Relationen, Views, Tuples Prozeduren: select, insert, delete, update (modify) (b) record-oriented interfaces Objekte: record, set, keys, access paths Prozeduren: retrieve, dispose, change (c) internal record interfaces Objekte: z.B. B*-Bäume Prozeduren: insert, delete, update (modify) (d) system buffer interfaces Objekte: Seiten, Segmente Prozeduren: read, write (e) file interfaces Objekte: Prozeduren: blocks, files read, write 12 (e) device interfaces Objekte: tracks, cylinder, channel Prozeduren: read, write am Beispiel eines SQL-Ausdruckes (abgefragt=retrieved): (a) Der SQL-Query wird in das System gegeben. Eine Liste von Titeln wird als Ergebnis des Queries abgefragt. (b) Die Informationen des Titel-Feldes aller Records, die in dem Feld Autor „XYZ“ haben werden abgefragt. (c) „XYZ“ wird in dem B*-Baum mit Autor im Index erreicht. (d) Seiten und Segmente, wo die relevanten Records gespeichert werden, werden abgefragt. (e) Blocks und Files,… (f) Tracks und Zylinder,… SQL-Anfrage über die verschiedenen Schichten: 1. Schicht ist mengenorientiert, dort startet die Anfrage und wird in entsprechenden Relationenalgebra-Ausdruck übersetzt. Dann wird Zugriffskontrolle für die entsprechenden Daten ausgeführt und die Überprüfung von Integritätsbedingen durchgeführt. à Anfrageoptimierung à Anfragegraphen, die auf dem Tupelkalkül basiert à algebraische Optimierung, bei der Maß für die Güte der Optimierung die Größe der zu verarbeitenden Relationen bzw. die Anzahl der Tupel ist. Dazu wird ein Operatorbaum erzeugt und dort nach heuristischen Regeln die Operatoren der Relationenalgebra vertauscht. Dabei ist es wichtig Projektion und Selektion möglichst weit zu den Blättern zu verlagern und den Verbund so weit wie möglich nach oben (da teuer). Darüber hinaus sollte das kartesische Produkt ersetzt werden. Tableau-Methode (auch in EDB) High Level Optimierung zur Vermeidung überflüssiger Teilanfragen. (lossless-join) Implementierung von Joins Hash-Join Merge/ Sort-Loop Nested Loop Komplexität Wenn die Basistabellen über die Joinspalten gehasht sind, Join in den Hashbuckets ausführen O(n+m) [sinnvoll, wenn Verwendung einer HauptspeicherHashtabelle möglich ist] Wenn die Basisrelationen passend sortiert sind, kommen die Tupel gleich in der passenden Reihenfolge O(n*log(n)) [normalerweise linear] [WC: O(n 2 ) , wenn beide Relationen nur gleiche Attribute besitzen; Kreuzprodukt] Wenn`s nichts besseres gibt [quadratisch] O(n*m) B/ B*-Bäume (auch in EDB) „The Ideal Tree“: - Geringe Baumhöhe (Zugriffsschritte log k (n) ) - Balanciertheit - Geringe Erhaltungs-/ und Änderungskosten - Jeder Knoten mindestens zu 50% gefüllt 13 Unterschiede zwischen B-Baum und B*-Baum: Im B*-Baum sind die Daten in den Blättern gespeichert, der Rest dient als Wegweiser (Indexteil). Im B-Baum sind die Daten in allen Knoten enthalten. Im B*-Baum geschieht das Löschen und Einfügen nur in den Blättern. Im B-Baum kann jeder Knoten verändert werden. B*-Bäume (Mindestbelegung der Knoten von 2/3): k ≤ n ≤ 2k Datensätze in inneren Knoten (n+1 Pointer) k * ≤ m ≤ 2k * Datensätze in Blättern + 2 Pointer 2(k + 1) h −1 − 1 ≤ u ≤ (2k + 1) h − 1 ist die Schlüsselanzahl bei Höhe h ≥ 1 Kosten: Suche h (genauer: log k (n) ) Eigenschaften: - Wiederholen der Schlüssel in Blättern - Mindestknotengröße - Mindestzahl der Zeiger in Knoten - Ausgeglichenheit algebraische Optimierung (Vossen, S. 306ff) Anfrage-Optimierung, die algebraische Optimierung genannt wird, basiert auf der Anwendung algebraischer Regeln und hat insbesondere keinen Bezug auf die Datenstrukturen, in welchen die Operanden gespeichert sind. Durch Anfrage-Bäume! Äquivalenz: Zwei Ausdrücke sind äquivalent, falls sie bei jeder Auswertung bezüglich des aktuellen Zustandes über dem vorgegebenen Datenbankschema das gleiche Ergebnis liefern. Auf diese Weise ist es häufig möglich, die Auswertungs- bzw. Antwortzeit zu verkürzen, ohne die spezielle Wahl der Datenstrukturen für die Speicherung der Relationen, d.h. die konkrete Implementierung der Datenbank zu kennen. Semi-Join besonders effizient R ⊕ S = π R (R ⊗ S ) Ein Semi-Join Ausdruck ist ein Query in relational calculus das komplett auf Komponenten der folgenden Form reduziert werden kann: {EACH r IN exp: SOME r* IN exp* (r.a=r*.b)} à solche Ausdrücke sind gutartig (benign)! 14 Welche Ausdrücke können nicht durch Semi-Joins ausgewertet werden? Solche mit Zyklen im Quantgraph. (hartnäckige, bösartige Teilausdrücke) à Zykel sind dann vorhanden, wenn eine Tupelvariable nicht nur in ihrem definierenden Niveau auftaucht, sondern zusätzlich auch in einem niedrigeren Niveau verwendet werden muss. gutartige ßà bösartige Komponenten Ein flacher Ausdruck im Relationenkalkül ist gutartig, wenn sein Ergebnis durch eine SemiJoin Reduktion berechnet werden kann, z.B. wenn es in eine äquivalente „Generalized Semi Join Expression“ (GSE) transformiert werden kann. à Ausdrücke im Relationenkalkül, die durch einen strikten „tree-like Quantgraph“ mit „EACH“-Wurzel, beliebigen Knoten und beliebigen Prädikaten repräsentiert werden können, sind gutartig Quantgraphen (Kap2, Folien 51ff) Zyklen im Quantgraphen à bösartiger Ausdruck, wenn nicht wie nachfolgend beschrieben auflösbar. Zyklen können aufgelöst werden, wenn: - redundante Kanten gelöscht werden können - wenn alle Absorber (Knoten mit zwei eintreffenden „predicate edges“) ALL-Absorber sind (Splitting-Absorber) - durch „Comparison Doublets“, wenn es sich um SOME-Absorber handelt und die Joins durch Vergleiche ( >, <, ≤, ≥ ) vonstatten gehen. Dann neuer Knoten r* des Knoten r, der zuvor eine eingehende Kante hatte. Kostenmodelle (Kap2, Folien 234ff) Kostenmodelle des „access planning“ berücksichtigen in erster Linie Zugriffe auf den sekundären Speicher und zusätzlich die Kommunikationskosten bei verteilten Datenbanken. Zwei Funktionen die einkalkuliert werden sollten: - Query: DB à Anzahl der zugegriffenen Daten Records è Abschätzung der Größe des Zwischenergebnisses - Access: {|zugegriffene Records|, Datenstruktur (#Blockzugriffe), Buffer des primären Speichers} gegeben: Statistiken über den DB-Zustand Konstruiere ein mathematisches Modell der Datenbank (Parameter System) und eine Menge von Formeln, welche die Größe des Ergebnisses für jede Sequenz von (algebraischer) Operationen abschätzen. Transaktionsverwaltung Grund für verzahnte Ausführung von Transaktionen: - Performance - Auslastung - … Bestandteile - Serialisierung - Fehlerrecovery (Gewährleistung von Atomarität und Durabilität [Dauerhaftigkeit]) 15 Transaktion Eine Transaktion ist eine Serie von Operationen (Lese- und Schreiboperationen), welche eine gegebene Datenbank von einem konsistenten Zustand in einen anderen (nicht unbedingt veränderten) konsistenten Zustand transformiert. Alternativ: Der Zugriff auf eine Datenbank besteht aus einer Folge von Operationen (Lese-, Schreiboperationen). Das Programm oder die Gesamtheit dieser Operationen ist eine Transaktion. Konflikte (Kemper, S.296ff) - Dirty-Read Lost-Update Phantom-Problem s = r1 ( x) w1 ( x)r2 ( x)a1 w2 ( x)c 2 s = r1 ( x)r2 ( x) w1 ( x)c1 w2 ( x)c 2 s = r1 ( x)r1 ( y )r2 ( z ) w2 ( z )r2 ( x) w2 ( x)c 2 r1 ( z )c1 ACID-Prinzip Atomicity: Eine Transaktion wird entweder vollständig ausgeführt oder gar nicht. D.h. wenn im Laufe der Transaktion eine Operation fehlschlägt (o.ä.), dann werden alle Änderungen der DB vor der vorhergehenden Operation wieder rückgängig gemacht. Im anderen Fall werden die Änderungen beibehalten. Consistency: Die Transaktion hinterlässt einen konsistenten Zustand, wenn sie aus einem solchen gestartet wurde, d.h. alle Integritätsbedingungen der DB werden eingehalten. Kommt es zu einem Fehler, so ist die DB in den Zustand wieder zurück zu versetzen, den die vor der Transaktion hatte. Isolation: Die Transaktion läuft isoliert ab, also unabhängig von anderen Transaktionen. Durability: Nach erfolgreicher Durchführung einer Transaktion, sind die Daten gespeichert, so dass sie jeden folgend auftretenden Hard- oder Softwarefehler überstehen/ überleben. Das ACID-Prinzip gewährleistet, dass eine Transaktion/ Programm korrekt ausgeführt wird, bzw. das gewünschte korrekte Ergebnis liefert. Tritt während der Transaktion ein Fehler auf, so hinterlässt sie keine „Spuren“ in der Datenbank, da sie atomar verarbeitet wird. Dieser wieder herzustellende Zustand ist aufgrund der Persistenz/ Durabilität stets wohl definiert. Durch die Isolation werden Anomalien im Mehrbenutzerbetrieb verhindert. Read-Write-Modell (Kap3, Folien 10ff) Eine Datenbank D={x,y,z,..} ist eine Menge von (Datenbank-) Objekten, zu denen die Schreib- und/ oder Leseopertionen Zugriff haben. Eine Transaktion ist eine endliche Menge von Operationen der Form r(x) (read x) oder w(x) (write x) wie folgt: t = p1 , p 2 ,..., p n , mit n < ∞, pi ∈ {r ( x), w( x)} für 1 ≤ i ≤ n und x ∈ D Jeder von einer Transaktion t geschriebener Wert hängt von den Werten aller zuvor von t gelesenen Objekten ab. 16 Serialisierbarkeit Wenn Transaktionen konkurrierend (parallel) ausgeführt werden, als wenn es seriell wären, dann wird dies serialisierte Schedules (Historien) genannt. Ziel: Angabe eines Korrektheitskriteriums für Schedules: Herbrand Semantik (Kap3, Folie 17); Herbrand Universum (Kap3, Folie 18) Reads-From-Relation (RF(x)) RF ( s ) = {(t i , x, t j )} , d.h. dass r j (x) x von wi (x) liest Life-Reads-From-Relation (LRF(x) LRF ( s ) = {(t i , x, t j )} , d.h. dass ein lebendes r j (x) (es ist für ein t ∞ noch sinnvoll) x von wi (x) liest FSR (Final State Serialisierbarkeit) Herbrandsemantik der letzten Schreib-OP je Objekt/ LRF(s); nicht effizient überprüfbar (exponential in der Anzahl ?der Transaktionen?), Phantom-Probleme können auftreten VSR (View Serialisierbarkeit) Herbrandsemantik aller OPs/ RF(s); nicht effizient überprüfbar (NP-vollständig), nicht PCA VSR ⊆ FSR ; beide für praktische Anwendungen ungeeignet!! CSR (Konfliktserialisierbarkeit) Konflikt Relation/ Graph; PCA, effizient prüfbar (Zugehörigkeit zu CSR kann in polynominieller Zeit getestet werden; Graph bilden: O(n); auf Zyklen testen: O(n 2 )), Problem: Dirty-Read (z.B.: s = r1 ( x) w1 ( x)r2 ( x)a1 w2 ( x)c 2 ) Zwei Operationen p ∈ t und q ∈ t ` mit t , t `∈ trans ( s ) und s Schedule (Historie) befinden sich in einem Konflikt, wenn sie auf dem selben Objekt (z.B. x,y,…) operieren und wenigstens einer von ihnen eine Schreib-Operation ist à C(s)={(p,q)|p,q sind im Konflikt und p steht vor q in s} à conf(s) bezeichnet die Konflikt-Relationen (aus C(s)), welche von den abgebrochenen Transaktionen bereinigt wurden. à Konflikt-Graph G(s)=(V,E) mit V=commit(s) [commited Transactions] und (t , t `) ∈ E ⇔ t ≠ t `∧(∃p ∈ t )(∃q ∈ t `)( p, q ) ∈ conf ( s ) (Beispiel zu diesem Vorgehen: Kap3, Folien 27ff) à Serialisierungs-Theorem: s ∈ CSR ⇔ G (s ) hat keine Zyklen Weitere: Commit-Serialisierbarkeit; gilt nur für korrekt ausgeführte Transaktionen 17 Deadlocks Treten beim Zugriff auf die Daten auf, wenn Transaktionen parallel abgearbeitet werden und man einen sperrenden Scheduler verwendet. Werden von modernen DB nicht beachtet. Man kann ja die Transaktion einfach abbrechen. Lösung: konservatives 2PL Scheduling Ansätze zur Behebung von Deadlocks: - Prevention - Avoidance - Detection + Recovery Scheduler (Historie) Beeinflusst eintreffenden Strom von Aktionen, so dass ausgehender Strom äquivalent zu seriellem unter Gewährleistung der Fehlersicherheitskriterien ist. Aufgabe - verzahnte Ausführung von Transaktionen (Wartezeiten von TA können von anderen TA genutzt werden à Beschleunigung gegenüber sequentiellen Fall) Korrektheit (Äquivalenz zu seriellem Schedule) Eigenschaften: - Rücksetzbarkeit (RC; Minimalanforderung) Eine Historie heißt rücksetzbar, falls immer die schreibende Transaktion vor der lesenden Transaktion ihr „commit“ ausführt, also c w < H c r oder: Eine Transaktion darf erst dann ihr „commit“ durchführen, wenn alle Transaktionen, von denen sie gelesen hat, beendet sind. - kaskadische Aborts vermeidend (ACA) mögliches Problem: Das Rücksetzen einer Transaktion setzt eine Lawine von weiteren Rollbacks in Gang. Eine Historie vermeidet kaskadisches Rücksetzen, wenn c w < H rr ( A) gilt, wann immer Tr ein Datum A von Tw oder: Änderungen werden erst nach dem „commit“ freigegeben. - strikt (ST) Bei strikten Historien dürfen auch veränderte Daten einer noch laufenden Transaktion nicht überschrieben werden. Wenn also für ein Datum A die Ordnung ww ( A) < H or ( A) mit oi = ri oder oi = wi gilt, muss Tw zwischenzeitlich mit „commit“ oder „abort“ abgeschlossen worden sein. - rigoros (RG) Eine Historie ist rigoros, wenn sie strikt ist und kein Objekt x wird überschrieben, bevor alle Transaktionen, welche x zuletzt gelesen haben beendet sind. RG ⊆ ST ⊂ ACA ⊂ RC ; RG ⊂ CSR ; RG ⊂ CO 18 sperrende Scheduler read lock (rl(x)) write lock (wl(x)) [read unlock (ru(x)] [write unlock (wu(x)] à ….rl(x)…..r(x)…..ru(x) 2-Phase-Locking (2PL) (Beispiele siehe Kap3, Folie 57; Kemper, S.310ff)) Ein Sperrprotokoll ist „2-Phase“ (Wachstumsphase (Sperren anfordern) und Schrumpfungsphase (Sperren freigeben)), wenn nach dem ersten ou i keine weitere qli (mit o, q ∈ {r , w} . Eigenschaften: - einfache Implementierung - bessere Performance als andere Protokolle - Nicht Deadlock-frei!!! (Beispiel: r1 ( x) w2 ( y ) w2 ( x) c 2 w1 ( y ) c1 ) - Erkennung von Deadlocks durch: - Transaction timer (Zeitmarken) - Waiting Graphs (Zykel = Deadlock) - Timeout strenges 2PL (S2PL): Alle Sperren (exclusive write) werden bis zum Ende gehalten! (keine Schrumpfungsphase à CSR und ST, damit auch ACA) konservatives 2PL: Alle Sperren sind seit dem Start gesetzt! (Preclaiming) à Deadlockfrei, aber nicht praxistauglich (woher soll der Scheduler am Anfang wissen, was er sperren soll) Nachteile des 2PL Protokols: - wenn 2PL Objekte „groß“ sind, so dass nur wenige Sperren zu managen sind, kommen Konflikte häufiger vor - wenn 2PL Objekte „klein“ sind, so dass mehr Parallelität möglich ist, steigen die Kosten des Managements Alternativen: Tree locking (TL) Multiple granularity locking (MGL) nicht-sperrende Scheduler - - Zeitstempel Jeder Transaktion wird hierbei ein eindeutiger Zeitstempel zugeordnet wound-wait Wenn T1 älter als T2 ist, wird T2 abgebrochen oder zurückgesetzt, so dass T1 weiterlaufen kann. Sonst wartet T1 auf die Freigabe der Sperre durch T2 . wait-die Wenn T1 älter als T2 ist, wartet T1 auf die Freigabe der Sperre. Sonst wird T1 abgebrochen oder zurückgesetzt. Optimistische Methode bisher: Konflikte kommen häufig vor à vermeide sie hier: Konflikte sind selten à teste nachher, ob welche aufgetreten sind 19 - Serialisierungsgraphtester (serialization graph tester) basiert auf der Charakteristik der Konflikt-Serialisierbarkeit Generic Validation Read-Phase Validation-Phase - backwards validation - forwards validation Write-Phase Recovery Recovery für Transaktionsfehler System-Absturz (danach UNDO-REDO) Verlust der Datenbank (Headcrash) LOGs (Recovery Protocols) (Kap3, Folien 76ff) Log-Einträge werden streng sequentiell angelegt. Daher lautet die Empfehlung, das Log auf einer eigenen Platte zu führen. à sicherer à vermeidet unnötige Platten-Suchzeiten à Erhöhung des Durchsatzes UNDO-REDO REDO notwendig, wenn Transaktionen bereits vor dem Fehler beendet wurden und die Ergebnisse nicht im stabilen Speicher sind. à Recovery Manager braucht REDO, wenn es Transaktionen erlaubt ist zu terminieren, bevor alle geschriebenen Werte in die DB transferiert sind. UNDO notwendig, wenn Transaktionen noch aktiv waren und einige Ergebnisse schon im Speicher sind. à Recovery Manager braucht UNDO, wenn es noch laufenden Transaktionen erlaubt ist in die DB zu schreiben. Undo-rule (Write-Ahead-Log-Protocol) Das Before-Image einer Schreib-Operation (der alte Wert von x) muss ins Log geschrieben werden, bevor der neue Wert in der stabilen DB erscheint. Redo-rule (Commit-rule) Bevor eine Transaktion terminiert, muss jeder neue Wert, der von dieser geschrieben wurde, in den stabilen Speicher (DB oder Log). Informationen: UNDO Before-Image (alter Wert von x vor der Änderung) geänderter Datenobjekte REDO After Image geänderter Datenobjekte Beide: Welche Transaktion war für die Änderung verantwortlich? überflüssig? UNDO REDO wenn geänderte Seiten erst zum Commit-Zeitpunkt in die stabile Datenbank geschrieben wurde sofern geänderte Seiten spätestens mit dem Commit in die stabile Datenbank geschrieben wurde 20 Indexstrukturen von Datenbanken Braucht man Indexstrukturen eigentlich? Theoretisch nein, sequentielle Suche ginge auch! (Komplexität: linear, O(n)) Praktisch ja, da man eine möglichst gute Leistung erzielen möchte! Aufgaben: - Lokalisierung der physischen Datensätze, die durch den Suchschlüssel (Wertekombination) spezifiziert werden à Ermittlung der physischen Seite(n), in denen diese Datensätze gespeichert sind - Organisation der Seiten unter dynamischen Bedingungen (z.B. Überlauf der Seiten à Aufteilen der Seite auf zwei Seiten) Anforderungen: (EDOSIAN) - Effizientes Suchen - Dynamisches Einfügen, Löschen und Verändern von Datensätzen - Ordnungserhaltung - Gute Speicherplatzausnutzung - Implementierbarkeit - Anpassung an verändernde Datenverteilungen - Nebenläufigkeit Indexierung eindimensionaler Daten Hashing Ziel: direkte Berechnung eines möglichen Speicherortes (möglichst in O(1)) Grundprinzip: verschiedene Elemente mittels Hashfunktion auf denselben Indexwert abbilden a) Speicherung der Schlüssel außerhalb der Tabelle, z.B. als verkettete Liste. Bei Kollisionen werden Elemente unter der selben Adresse abgelegt (im Überlaufbereich). Problem: Wie kann die externe Speicherung effektiv gelöst werden? 21 b) Die Hashtabelle wird bei Bedarf vergrößert, damit Datensätze weiterhin effizient eingefügt und gelöscht werden können. c) Das Directory speichert Verweise auf Datenseiten, in denen die Schlüssel abgelegt werden. Ist eine Datenseite voll, so wird diese gespalten. Auch das Directory muss für hinreichend große Dateien auf dem Sekundärspeicher abgelegt werden. Jeder Datensatz wird mit zwei Zugriffen gefunden. (Speicherplatzausnutzung: ca. 70%) Problem: Oft wächst das Directory superlinear (à Hashfunktion austauschen) d) Hashfunktion liefert direkt die Seitenadressen [h: domain(K)à{Seitennummern}] Überlaufsbehandlung: - kein sofortiges Aufspalten (im Ggs. zu normalen erweiterbaren Hashing) - besondere Kollisionsbehandlung der eingefügten Datensätze gemäß einer Überlaufstrategie (Suche dauert min. 2 Zugriffe) - Verbreitet ist die Überlaufstrategie der „getrennten Verkettung“ - Nutzung zweier verschiedener Seitentypen: Primär- und Überlaufseiten - Jede Überlaufseite ist genau einer Hashadresse h(K) zugeordnet - Neue Überlaufseiten werden mit existierenden (Überlauf- oder Primär) Seiten verkettet Arten des Hashing ohne Dictionary: - lineares Hashing benutze eine Folge von Hashfunktionen - partielle Erweiterung Verdoppelung der Primärseiten e) Bei Kollision wird mittels bestimmter Sondierungsverfahren [f) und g)] eine freie Adresse gesucht. Jede Adresse der Hashtabelle nimmt höchstens einen Schlüssel auf. Problem: Finden geschickter bzw. effizienter Sondierungsverfahren, so dass nur wenige Sondierungsschritte notwendig sind. Bei Kollision wird durch eine Folge h(x,j) mit j=1,2,… solange sondiert, bis eine freie Adresse gefunden wurde. f) Prinzip: Verändern des Hashwertes um eine Konstante c [h(x,j)=(h(x)+c*j) mod m] Problem: Cluster-Bildung (auch primäre Cluster) , d.h., dass Schlüssel mit ähnlichen Hashwerten liegen unter aufeinander folgenden Adressen, deshalb sind viele Sondierungsschritte nötig, um einen freien Platz zu finden. g) h(x,j)=(h(x)+ j 2 ) mod m Problem: Immer noch Bildung sekundärer Cluster h) Doppelhashing soll Clusterbildung verhindern [siehe f) und g)], dafür werden zwei unabhängige Hashfunktionen verwendet. Nahezu ideales Verfahren aufgrund der unabhängigen Hashfunktionen. Dabei heißen zwei Hashfunktionen unabhängig, wenn gilt: Kollisionswahrscheinlichkeit P(h(x)=h(y))=1/m mit m der Größe der Hashtabelle B-Baum (siehe auch IDB, S.13) hierarchische Indexstruktur Idee: Im Gegensatz zum Hashing eine dynamische Datenstruktur, die Bereichsanfragen ermöglicht (lokal Ordnungserhaltend) und effizient wachsen und schrumpfen kann. 22 Untersuchungen zeigen, dass die Knoten in B*-Bäumen zu 2/3 belegt sind Wenn auf eine Unterlaufbehandlung verzichtet wird, wie beim R-Baum, sinkt der Füllgrad von ca. 50%-100% auf 40%-100%. Degeneration? Nein, da er, wenn überhaupt nach oben wächst à immer balanciert Composite Index (Beispiel Telefonbuch) (siehe Folie 2-60) Punktabfragen an die erste und Bereichsanfragen an die zweite Komponente sind effizient beantwortbar. Gilt nicht für mehrdimensionale Bereichsanfragen. Punkt- oder Bereichsanfragen an die zweite Komponente sind nicht effizient beantwortbar. Bitmap Indexing - normalerweise für Attribute mit kleinen Wertebereichen (z.B. „Mann“/ „Frau“) ein Bit pro Attributwert Anordnung der Datensätze entsprechend ihrer physischen Speicherung. Die Anzahl der entstehenden Bitvektoren entspricht der Dimensionen mal der Anzahl unterschiedlicher Werte, die für das jeweilige Attribut existieren. à #Bitvektoren= #Attribute * #verschiedenerWerteJeAttribut Vorteile - effizienter sequentieller Scan (O(n); siehe Folie 2-35) auch logische Verknüpfungen durch sequentiellen Scan effizient möglich (siehe Folie 2-35) geringer Speicherbedarf besonders vorteilhaft bei kleinen Wertebereichen Nachteile - Reihenfolge der Bits und Reihenfolge der Daten müssen übereinstimmen à dadurch können hohe Aktualisierungskosten entstehen (Problematik bei Schreibanfragen) Anfragen - Standard-Bitmap-Indexe - Mehrkomponenten-Bitmap-Indexe Indexierung mehrdimensionaler Daten Invertierte Listen (Beispiel siehe Folie 3-4) Für anfragerelevante Attribute werden Sekundärindexe (invertierte Listen) angelegt. Damit steht für jedes relevante Attribut eine eindimensionale Indexstruktur zur Verfügung. Multiattributtssuche - für jedes Attribut gibt es einen Sekundärindex - Suche in allen Indexen, unabhängig von den anderen - Kombiniere Ergebnisse über Durchschnittsbildung 23 Vorteile - Invertierte Listen sind einigermaßen effizient, wenn die Antwortlisten sehr klein sind Nachteile - Die Attributswerte eines Datensatzes sind nicht in einer Struktur miteinander verbunden. à Die Antwortzeit ist nicht proportional zur Anzahl der Antworten à Die Suche dauert umso länger, je mehr Attribute spezifiziert sind - Hohe Kosten für Update-Operationen - Sekundärindexe beeinflussen die physische Speicherung der Datensätze nicht (es werden nur Verweise gespeichert) à Ordnungserhaltung nicht möglich à schlechtes Leistungsverhältnis Raumfüllende Kurven (basierend auf Composite Indexes à zusammengesetzte Indexes) Ziel: - beide Koordinaten spielen eine gleichberechtigte Rolle bei der Schlüsselbildung - Nachbarschaftseigenschaft: im 2-dimensionalen benachbarte Punkte sollen im Index möglichst auch benachbart sein (auf benachbarten Plattenblöcken) Idee: - Linearisierung des Raums durch raumfüllende Kurven - jeder Punkt des Raums wird genau einmal durchlaufen - jedem Punkt des Raums wird eine eindeutige Position auf der Kurve zugewiesen Auswahl des Ansatzes abhängig von „access pattern“ à Welche Anfragen treten in der Datenbank auf? Datenraum wird durch gleichmäßiges Raster partitioniert, wobei jede Zelle durch eine eindeutige Nummer, die ihre Position in der totalen Ordnung definiert, identifiziert wird à daraus ergibt sich eine 1-dim. Einbettung Ansätze z.B.: Z-Ordnung [00à01à10à11]; diese Bitstrings dienen als Schlüssel in 1-dim. B+-Bäumen - Berechnung des Z-Wertes durch Bit-Verzahnung Gray-Codes [00à01à11à10] Hilbert-Kurve - Besonderheit: benachbarte Punkte auf der Kurve sind auch im 2-dimensionalen benachbart (Umkehrung gilt nur zum Teil) - Anfragen: Raum teilen und Fallunterscheidungen um Felder auszuschließen Quad-Tree (siehe Folien 3-15) nicht-balancierte Datenstruktur für mehrdimensionale Punkt-Objekte Ansatz: Jeder Knoten hat sowohl für die x- als auch für die y-Koordinate je zwei Sohnknoten Aufbau: - erster Punkt bildet Wurzel bei jedem weiteren Punkt - Bestimmung des Quadranten, in dem der Punkt liegt - Abstieg in den entsprechenden Sohnknoten - falls kein Sohnknoten für diesen existiert: Hinzufügen eines Sohnknotens 24 Problem: Entartet zu einer Liste, wenn alle Punkte auf einer Diagonalen liegen Variationen: - MX-Quadtree (siehe Folie 3-17) - diskreter Datenraum ( 2 k * 2 k -Gitter) - Datenpunkte sind Elemente in einer quadratischen Matrix (à MX-Quadtree) - Splits jeweils in der Mitte - Daten nur in Blattknoten gespeichert - PR-Quadtree (siehe Folie 3-18) - Erweiterung des MX-Quadtrees auf nicht-diskrete Daten - rekursive Dekomposition des Raums wie beim MX-QT solange, bis jeder Block maximal einen Punkt enthält - Bucket PR-Quadtree (siehe Folie 3-19) - Erweiterung zu Sekundärspeicherstruktur à mehr als ein Datenpunkt pro Quadrant erlaubt - bei Überlauf: Bildung neuer Quadranten Grid-File (siehe Folien 3-20ff) Idee: Hashverfahren mit Directory für k-dimensionale Schlüssel; ordnungserhaltend Struktur: - Datenraum wird in ein k-dimensionales orthogonales Gitter unterteilt (Grid) - Skalen, die als Suchbäume verwaltet werden, definieren die Einteilung des Gitters für jeweils eine Dimension - Grid-Direcory (GD) ist ein k-dimensionales Array - GD-Element ist eine Zelle des Directories mit dem Verweis auf die Datenseite, welche die entsprechenden Datensätze enthält - Ebenfalls analog zum Hashing mit Directory können mehrere GD-Elemente auf eine Seite verweisen. Eine solche Menge von GD-Elementen heißt Seitenregion Als Verfahren mit Directory vermeidet das Grid-File Überlaufseiten. Wahl der Partitionierungslinie: - Wahl der Splitachse - Ziel: möglichst quadratische Seitenregionen à Längste Achse der Seitenregion als Splitachse auswählen - Ziel: Anfrageverteilung berücksichtigen à Häufig angefragte Achsen feiner unterteilen - Wahl der Splitposition - Ziel: den Datenraum möglichst gleichmäßig aufteilen à Mittelsplit: Halbieren der Datenseite - Ziel: die Daten möglichst gleichmäßig verteilen à Mediansplit: Auf allen Seitenregionen sollen möglichst gleich viele Datensätze stehen (Quantilverfahren) MDB-Bäume (siehe Folien 3-26ff) Multidimensionale B-Bäume Ziel: Speicherung multidimensionaler Schlüssel in einer Indexstruktur Idee: Hierarchie von Bäumen, wobei jeweils jede Hierarchiestufe einem Attribut entspricht EQSON-Zeiger: Zeiger zwischen den B-Bäumen der Hierarchiestufen 25 Indexierung räumlicher Daten Punkttransformation (siehe Folien 3-32) n-dimensionale Rechtecke werden in 2*n-dimensionale Rechtecke überführt Alternativen der Überführung: - Mittentransformation: Das Rechteck wird durch den Mittelpunkt und die jeweils halbe Ausdehnung in x- und y-Richtung beschrieben - Eckentransformation: Das Rechteck wird durch die diagonal gegenüberliegenden Eckpunkte beschrieben. Anfragetypen - Punktanfrage: In welchen Rechtecken liegt der Punkt? - Darstellung für x- und y-Achse (Liegt Koordinate im jeweiligen Intervall?) - beide 2-dim. Koordinatensysteme spannen ein 4-dim. Koordinatensystem auf - der Schnitt beider 4-dim. Lösungshyperkuben enthält Lösungsrechtecke - Rechtecksschnitt: Welche Rechtecke werden geschnitten? - Analyse der Eckpunkte, ob q r schneidet ( r.xli ≤ q.x re , q.xli ≤ r.x re , r. y un ≤ q. y ob und q. y un ≤ r. y ob ) - Rechtecksenthaltensein:In welchen Rechtecken liegt das Rechteck? - Analyse der Eckpunkte, ob q in r enthalten ist ( r.xli ≤ q.xli , q.x re ≤ r.x re , r. y un ≤ q. y un und q. y ob ≤ r. y ob ) Clipping (Objektduplikation; siehe Folien 3-38f) Idee: Rechteck in jede Region einfügen, die es schneidet R-Bäume (Rectangle-Tree; Folien 3-40ff) kein Clipping, um Mehrfachspeicherung zu vermeiden höhenbalancierter Baum, der zur Speicherung von Rechteckdaten entworfen wurde Idee: - versuche mehr-dim. Strukturen so zu transformieren, dass sie ein-dim., also z.B. mit Bäumen abgebildet werden können basiert auf der Technik überlappender Seitenregionen Approximation der Objekte durch achsenparallele, minimalumgebende Rechtecke (MUR) verallgemeinert die Idee des B+-Baumes auf den 2-dim. Raum Problem: Überlappung der Directoryregionen à Fällt eine Anfrage in einen Überlappungsraum, müssen mehrere Pfade untersucht werden (im Zugriff geht log verloren) à Die Überlappungen müssen möglichst klein gehalten werden Grundsätzliches: - R-Baum erlaubt die Indexierung von k-dim. achsenparallelen Rechtecke - sowohl Datenrechtecke, als auch Datenseiten können sich überlappen - innere Knoten: Directory Seiten; bestehen aus MUR und Verweisen auf andere Seiten 26 Laufzeit: Blätter: Datenseiten; bestehen aus MUR und Verweisen auf exakte ObjektRepräsentanten R-Baum besitzt pro Knoten m Indexeinträge O(n) [Lesen aller Blätter O(n) + innerhalb des Baumes ca. genauso viele Elemente wie Blätter O(n) = 2*n = O(n)] Komplexität des Suchens: logarithmisch (WC: O(n)) Parameter: - M: maximale Anzahl von Einträgen pro Knoten (abhängig von Blockgröße) - m ≤ M / 2 :Mindestbelegung pro Knoten Eigenschaften: - Anzahl der Index-Einträge pro Blatt-Knoten zwischen m und M - Anzahl der Sohn-Knoten von Nichtblatt-Knoten zwischen m und M - in inneren Knoten ist das kleinste Rechteck gespeichert, welches Rechtecke der Sohnknoten umfasst - in Blatt-Knoten ist Verweis auf Objekt und sein kleinstes umschließendes Rechteck gespeichert - höhenbalanciert - Zerlegung des Datenraumes nicht disjunkt - Höhe des Baums h ≤ (log m N ) − 1 (bei N gespeicherten Objekten] Suchen: - ähnlich zum B-Baum, nur das hier pro Knoten mehrere „Schlüssel“ (hier: Suchräume) zutreffen können Einfügen: - ähnlich wie im B*-Baum (in den Blattknoten, bei Überlauf Split des Knotens,…) - im Ggs. zum B*-Baum kommen hier i.a. mehrere Blattknoten (überlappende Suchbereiche) in Frage - Auswahl des geeigneten Blattknotens/ Teilbaumes: Jener, der durch das Einfügen nicht oder am geringsten vergrößert wird Knotensplit: Problem: große Anzahl von Möglichkeiten Wunsch: möglichst wenig Überlappung der Rechtecke beider Knoten Bestimmung der genauen Lösung zu aufwendig [ O(2 M ) ] à Heuristiken (gegeben: M+1 Rechtecke, die auf zwei Knoten verteilt werden müssen) - Quadratic Split [ O( M 2 ) ] Suche zwei Rechtecke, die die größte Fläche „verschwenden“ würden, wenn sie zu einem Knoten hinzugefügt würden à verteile diese Rechtecke auf beide Knoten à weise restliche Rechtecke zu - Linear Split [ O(M ) ] Finde für jede Dimension die Rechtecke, welche die höchste aller Unteren und die niedrigste Koordinate bezüglich dieser Koordinate annehmen 27 à Normalisierung der gefundenen Rechtecke durch Division mit der Strecke zwischen min- und max-Wert in jeder Dimension à Wähle das Paar, mit der größten normalisierten Separierung in einer Dimension Löschen: - Start bei Blattknoten, in dem Eintrag gelöscht wurde - knotenweiser Aufstieg zur Wurzel, dabei - falls Minimalbelegung (<m) nicht mehr gegeben: Knoten und Eintrag in Vaterknoten löschen, Vormerken (in spezielle Menge Q) der übrigen Knoten (zum späteren Wiedereinfügen) à wurde die Wurzel erreicht, dann werden alle ausgelöschten Knoten, d.h. aus Menge Q wieder in den Baum eingefügt - Anpassen der MURs Anfragetypen: (Folien 3-53ff) - Punktanfrage - Rechteckanfrage - Bereichsanfrage - nächster-Nachbar - k-nächste-Nachbarn Nächste Nachbar Verfahren: (Folien 3-59ff) - Naiv - Nachteile: Start mit einem beliebigen Pfad, nicht mit dem Pfad, der möglichst nahe am Anfragepunkt liegt à das Verfahren schränkt seinen Suchraum erst sehr langsam ein - nach Rossopolous (k-NN mit lokaler Sortierung) - bessere Einschränkung des Suchraumes durch - Verwendung von Seitenregionen zur Abschätzung der NN-Distanz - Priorisierung der Tiefensuche nach Abstand der Seitenregionen von q (d.h. vor dem rekursiven Abstieg: Sortieren der Sohnseiten nach Abständen) - nach Samet (k-NN mit globaler Sortierung) - statt eines rekursiven Durchlaufes durch den Index hält der Algorithmus explizit eine Liste der aktiven Seiten - eine Seite p ist aktiv, wenn - sie noch nicht geladen wurde - die Elternseite bereits geladen wurde - die Distanz zwischen der Region p.region und dem Anfragepunkt nicht die Pruningdistanz übersteigt - Verfahren optimal in Bezug auf die Seitenzugriffe - Nachteil? zusätzlicher Speicher Wieviel? WC: Wahrscheinlich ein Verweis für jeden Eintrag (MUR) im Baum! Kann ein R-Baum entarten? Jein, der Baum selbst ist immer balanciert, aber bei starker Überlappung der Rechtecke durchsucht man trotzdem alle Zeiger auf Datenobjekte in den Blättern! Passiert bei hochdimensionalen Daten fast immer! 28 Lassen sich Überschneidungen verhindern? Nein, aber minimieren Was sind die Probleme bei hochdimensionalen Daten? Überlappungen nehmen zu! Variationen: - R*-Baum - Änderung der Splitheuristik - Reorganisation des Baumes durch Löschen und Wiedereinfügen von Rechtecken - Hilbert R-Baum Verbesserung des Splits durch Ordnung der Rechtecke gemäß des Verlaufs der Hilbert-Kurve - SS-Baum (Similarity Search Tree) Anstelle von Rechtecken Verwendung von Kreisen in den Directory-Knoten - SR-Baum (Sphere Rectangle Tree) Kombination von R- und SS-Baum Approximation Idee: möglichst viele Objekte, die keine Antworten sind, ohne Zugriff auf ihre exakte Repräsentation zu schliessen Ziel: möglichst klein mit wenig Verschnitt! Arten von Approximationen: - achsenparalleles, minimal umgebendes Rechteck (BB) àMBR à MUR - gedrehtes, minimal umgebendes Rechteck (RBB) - minimal umgebender Kreis (CIR) - minimal umgebene Ellipse (E) - konvexe Hülle (CH) - minimal umgebene konvexe Vier- oder Fünfecke (4-C bzw. 5-C) Interpretation: - CH hat im Unterschied zu 5-C beliebig viele Parameter, trotzdem approximiert 5C fast gleich gut - RBB: 1 Parameter mehr als BB à 31% Verbesserung - 5-C: 6 Parameter mehr als BB à 60 % Verbesserung Vorteile genauer Approximation: - Zugriff auf die exakte Repräsentation für weniger Objekte (weniger Seitenzugriffe) - Verfeinerungsschritt für weniger Objekte (weniger CPU-Zeit) - Verbesserung der Verarbeitungszeit ist proportional zur Verbesserung der Approximationsgüte Nachteile genauer Approximation: - höherer Speicherplatzbedarf auf Datenseiten - höherer Aufwand für die Berechnung der Approximationen und Tests auf den Approximationen Bewertung: - der Kreis ist für die Approximation nicht geeignet 29 - die Ellipse besitzt den niedrigsten break-even-Punkt Das 5-Eck liefert den besten Trade-Off (Speicher, Leistung, Break-Even) bei komplexeren Objekten (wachsendes c) lohnen sich komplexere Approximationen Dekomposition Idee: Verfeinerungsschritt (Test auf exakte Repräsentation) vereinfachen à Dekomposition der EPL (einfache Polygone mit Löchern) in einfache Teilobjekte und Approximation der Teilobjekte durch minimal umgebende Rechtecke (MUR) Vorteile: - Teilobjekte lassen sich durch MUR besser approximieren als das Gesamtobjekt (Filterschritt arbeitet genauer) - es entstehen einfachere Teilobjekte (Verfeinerungsschritt effizienter) Nachteile: - Rechen-Aufwand für die Dekomposition [O(n*log(n)] - größerer Speicherbedarf - komplexere Handhabung von Objekten Indexierung hochdimensionaler Daten neue Anwendungen behandeln hochdimensionale Daten - Multimedia - Biologie à Transformation der Daten in Feature-Vektoren (meistens Punktdaten) Lösungsansätze - neue Heuristiken für den Split der Daten/ des Datenraums (X-Baum) - Beschleunigung des sequentiellen Scans (VA-File) - Transformation der Daten X-Baum Idee: - Weiterentwicklung des R*-Baums für hochdimensionale Daten - der X-Baum vermeidet Überlappung mit Directory mittels: - einem Split mit minimaler Überlappung (bei Punktdaten existiert sogar ein überlappungsfreier Split) - dem Konzept der Superknoten (keine fixe Seitengröße) à Verbesserung des linearen Scans Ziel: niedrige- und hochdimensionale Daten indexieren Eigenschaften: - Hybrid aus hierarchischer Indexstruktur (Baumartig) und linearem Scan - eine hierarchische Struktur ist günstig für niedrigdimensionale Daten ( dim ≤ 5 ) [wenig Superknoten] - eine lineare Organisation ist günstig für hochdimensionale Daten ( dim ≤ 5 ) [öfters Superknoten] - durch dynamische Anpassung eine bestmögliche Kombination für jede Dimensionalität 30 Split: Im Unterschied zum R*-Baum, bei dem hochdimensionale Räume zu einer hohen Überlappung der Directory-Seitenregionen führt, wird nun bei jedem Split zwei neue Seiten erzeugt und so lässt sich die Historie von Splitoperationen als binären Baum darstellen. Vorteile: - Überlappung wird gering gehalten, diesbezügliche Probleme bei den Operationen dadurch vermieden - sequentieller Scan eines Superknotens ist schneller als mehrere einzelne Zugriffe - Durchschnittliche Speicherplatzausnutzung ist höher (85% (m/(m+0,5) bei m=3) im Vergleich zu 66% bei R-Baum) - durch die Superknoten (und dadurch eingesparte Verzweigungen im Index) ist das Directory kleiner à größere Teile können im Cache gepuffert werden Nachteile: - Gegen Überlappungen, die z.B. beim normalen Einfügen entstehen, wird nichts unternommen - Konzept der Superknoten wird nur sehr begrenzt eingesetzt Indexstrukturen für metrische Daten Daten, deren Koordinaten nicht bekannt sind (nur noch Abstände/ Distanzen) Grundeigenschaften: Symmetrie d ( p, q ) = d ( q, p ) Definitheit d ( p, q ) = 0 ⇔ p = q Nichtnegativität d ( p, q ) ≥ 0 Dreiecksungleichung d ( p, r ) ≤ d ( p, q ) + d ( q, r ) Ziel: Einsatz von Indexstrukturen ohne Dimensionsinformation (um I/O-Kosten zu reduzieren) à Partitionierung der Daten, so dass nur einzelne Partitionen bi Anfragen durchsucht werden müssen Abschätzen von Entfernungen: Dreiecksungleichung (wichtig für „Abschneiden des Suchbaums“): Umweg über einen dritten Punkt kann niemals kürzer sein, als der direkte Weg zwischen zwei Punkten. Pruning (bewusst bestimmte Informationen ignorieren, um eine höhere Effizienz zu erreichen) in metrischen Räumen (Folie 5-4) | d (q, p ) − d ( p, o) |≤ d (q, o) ≤ d ( p, q ) + d ( p, o) für Anfrageobjekt q, Referenz p und Objekt o Varianten - BK-Tree - diskrete Distanzfunktionen - FQT - Unterschied zu BKT: pro Ebene wird ein festes Pivot-Element ( p ∈ U ) gewählt 31 - Fixed Height QT - Unterschied zu FQT: alle Blätter befinden sich auf der selben Ebene - MetricTree / VP-Tree - für kontinuierliche reelwertige Distanzfunktionen - für konstant große Samplemengen O(n*log(n)) - MVPT (Multi-Vantage-Point-Tree) Ziel: geringere Höhe, höherer Verzweigungsgrad - VPF (Eluded middle vantage point forest) - Erweiterung des VPT zu einem Wald - Ziel: Optimierung der NN-Anfragen mit Maximalradius r* - BST (Bisector Tree) - GNAT (Geometric Near-Neighbor Access Tree) M-Baum Idee: Algorithmen des R-Baumes verwenden - seitenorientiert, balanciert, für große dynamische Datenmengen geeignet - Prototypimplementierung auf der Basis des GiST (Generalized Search Tree) Frameworks Informationen können verwendet werden, um Distanzberechnungen zu sparen. Struktur: innere Knoten enthalten - Routingobjekte - Verweise auf die Wurzel des zugehörigen Teilbaumes - Radius des abgedeckten Bereiches - Distanz zum Vorgänger Blätter beinhalten Objekte Bereichsanfrage - rekursiver Abstieg in die möglichen Teilbäume (ähnlich zum R-Baum) - aber Vermeidung von Abstandsberechnungen durch Dreiecksungleichung Einfügen analog zum R-Baum Splitting: a) Minimierung des Volumens (abgedeckter Bereich) b) Minimierung des überlappenden Bereiches à reduziere damit die # zu verfolgenden Pfade bei Anfrage Algorithmen für die Wahl der Routingobjekte (Promote) zu a) „minimum Radii“ zu b) „minimum lower bound on DISTance“ Algorithmen für die Partitionierung der Menge (Partitionierung) Generalized Hyperplane Balanciert Möglichkeiten nur wenige Dimensionen zu betrachten: Dimensionsreduktion 32 Indexstrukturen für Intervalldaten Intervalle sind ausgedehnte Objekte in 1D Alternativen: - Interval Tree gegeben: Menge von Rechtecken gesucht: alle Paare sich schneidender Rechtecke Idee: Transformation des 2D-Problems in eine Folge von 1D-Problemen - Tile Tree - Repräsentation der Intervalle im 2-dim durch Punkttransformation - Quadrate erhalten Schlüssel: x- oder y-)Wert des rechten unteren Eckpunktes - Segment Tree - 1D-Quadtree - Skelett ist ein balancierter Binärbaum - Speicherbedarf: O(N log(N)) - Aufbau des Baumes: O(N log(N)) - Anfrageoptimierung: O((log( N )) 2 + t , mit t= Anzahl der Lösungen - Priority Search Tree - Time Index - Sekundärspeicherbasiertes Verfahren Interval B-Tree - Sekundärspeicherbasiertes Verfahren Implementierung des Interval Trees mithilfe eines (erweiterten) B+-Baums Speicher: O(n) für n gespeicherte Intervalle (jeweils nur einmal gespeichert) Overlaps-Anfrage: O(log(n) + Ausgabe) (Baumdurchlauf) Einfügen und Löschen: O(log(n)) (Baumdurchlauf) Relationalen Intervallbaum (Folien 6-28ff) - - kein „stand-alone“-Konzept Primärstruktur: Binärbaum mit nummerierten Knoten Virtualisierung: Primärstruktur wird nicht materialisiert (virtuell verwaltet, kein Baumaufbau) keine Reorganisation irgendeiner Struktur beim Einfügen/ Löschen notwendig Sekundärstruktur: Sortierte Listen ( besser noch Bäume) von Intervallgrenzen an den Knoten à Speicher: O(n) Platzbedarf für n Intervalle: O(n/b) Plattenblöcke der Größe b Einfügen/ Entfernen: O( log b (n) ) Plattenzugriffe in den Indexen Wurzel merken, die ein Wert 2 n −1 ist und einen Bereiche von 2 n − 1 abdeckt. An den Knoten werden die Intervalle als 2 B*-Bäume der Anfangs- und Endpunkte gespeichert (à Speicherbedarf bei 2 Listen O(n)) 33