Datenbanken IIB: DBMS-Implementierung

Ablauf (Planung der zeitlichen Aufteilung)

Hier wird eine ungefähre Übersicht gegeben, wann welcher Stoff behandelt werden soll. Im Laufe des Semesters ist beabsichtigt, die Liste zu aktualisieren, und den tatsächlich behandelten Stoff einzutragen. Selbstverständlich sind alle Angaben unverbindlich.

Tatsächlicher Ablauf:

1. Mittwoch, 16.10.2019:
Kapitel 0: Informationen zur Vorlesung / Organisatorisches (Folie 0-1 bis 0-41)
Inhalte, Motivation, Voraussetzungen, Zeitliche Belastung, Projekt, Literatur, Informationen zur Oracle- und zur IBM-DB2-Zertifizierung.
Kapitel 1: Einführung (Folie 1-1 bis 1-12)
Dienste von Datenbank-Managementsystemen. Physische Datenunabhängigkeit. Transaktionen.
1b. Mittwoch, 16.10.2019 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 1 bis 28)
"Hello, World"-Programm, main, Ausgaben (cout, <<), #include, using namespace std, Benutzung des gcc Compilers, Kontrollstrukturen, Wahrheitswerte (automatische Umwandlung von int nach bool), Eingaben, Initialisierung von Variablen, char Typ, typedef, Aufzähungstypen, Arrays, Pointer, Dereferenzierungs-Operator *, Addressoperator &, Pointer-Arithmetik, Null-Zeiger.
2. Mittwoch, 23.10.2019:
Kapitel 1: Einführung (Folie 1-8 bis 1-35)
Datenunabhängigkeit, Transaktionen, Log-Datei, Wichtigkeit von Backups, Systemausfälle, Notfall-Systeme, Architektur (Schichteneinteilung) eines DBMS, Aufgaben eines Datenbank-Administrators, Data Dictionaries, Oracle Data Dictionary (Einstieg).
2b. Mittwoch, 23.10.2019 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 25 bis 44)
Wiederholung zu Zeigern und Arrays, Typ-Umwandlungen, void *, new, delete, malloc, const, Referenzen, Klassische C-Strings, string-Klasse. Deklaration eigener Klassen, header-Datei (.h) und Quelldatei mit Implementierung (.cpp), Objekte als lokale Variablen und auf dem Heap (new), Zugriff auf Komponenten ("." vs. "->"), Konstruktoren, Komponenten-Objekte (objekt-wertige Attribute), Initialisierungs-Syntax für Komponenten-Objekte im Konstruktor, Destruktoren.
3. Mittwoch, 30.10.2019:
Kapitel 1: Einführung (Folie 1-35 bis 1-64)
Aufbau des Oracle Data Dictionaries. Schema-Information im Oracle Data Dictionary.
3b. Mittwoch, 30.10.2019 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 46 bis 60)
Definition eigener Klassen, Header-Datei (.h) mit Schnittstelle vs. .cpp-Datei mit Implementierung, Objektdateien (.o), getrennte Übersetzung, Konstruktor, Zugriff auf Komponenten mit "." und "->", Speicherverwaltung: Objekte in lokalen Variablen (auf dem Stack) vs. mit new angelegte Objekte (im Heap), Komponenten-Objekte, Destruktoren.
4. Mittwoch, 06.11.2019:
Kapitel 2: Basic Oracle Architecture and Administration (Folie 2-1 bis 2-32)
Zugriffsrechte (Objekt- und Systemrechte bei Oracle), Benutzer anlegen, Benutzer-Identifikation, Tablespaces, Quotas, Auditing.
4b. Mittwoch, 06.11.2019 (Übung):
Ausführliche Besprechung von Lösungen zu Hausaufgabe 2
Erläuterung zu Include Guards und #pragma once. Möglichkeiten zur Speicherreservierung (Array im Objekt vs. dynamische Anforderung mit new). Freigabe dynamisch angeforderten Speichers im Destruktor (Diskussion über Copy-Konstruktor und Zuweisungs-Operator mit der Gefahr unbeabsichtigter/doppelter Speicherfreigaben, Lösungs-Alternativen). const-Zeiger und const-Methoden. Eigener Typ-Name (z.B. str_t) für "const char *" mit typedef. Unterschied zwischen Speichern des Zeigers und Kopieren aller Zeichen im Array.
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 61 bis 68)
const-Methoden, statische Komponenten (static), automatisch vom Compiler erzeugte Methoden (Default Konstruktor, Destruktor, Copy Construktor, Zuweisung), Vorgehen, falls man diese Komponenten nicht wüscht, geschachteltes Include, #ifdef/#ifndef/#endif, #define (so dass der Compiler include-Dateien nur einmal sieht), Include-Optimierung, Deklaration einer Klasse ohne Angabe von Komponenten.
5. Mittwoch, 13.11.2019:
Kapitel 2: Basic Oracle Architecture and Administration (Folie 2-33 bis 2-54, 2-60)
Oracle Architektur: Daten-Dateien, Tablespaces, Temporäre Dateien, Control Files, Puffer, Logdateien, Zweck der Logdateien und Sinn des verzögerten Schreibens veränderter Blöcke im Puffer, Parameter von Oracle, Alert-Datei. Übersicht zur Oracle Architektur: Prozesse und Dateien.
5b. Mittwoch, 13.11.2019 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 69 bis 90)
getrennte Übersetzung, make.
6. Mittwoch, 20.11.2019:
Kapitel 2: Basic Oracle Architecture and Administration (Folie 2-52 bis 2-88)
Oracle Architektur: Prozesse, Haupspeicherbereiche, Puffer, Oracle hoch- und runterfahren.
Kapitel 4: Disks (Folie 4-1 bis 4-13)
Aufbau und Funktionsweise von Magnetplatten.
6b. Mittwoch, 20.11.2019 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 57, 83 bis 86)
Initialisierung von Oberklasse und Komponenten, ausführliches Beispiel zu Unterklassen, virtual. Templates.
7. Mittwoch, 27.11.2019:
Kapitel 4: Disks (Folie 4-10 bis 4-36)
Aufbau und Funktionsweise von Magnetplatten. Diskussion zu Stromausfällen und partiell geschriebenen Blöcken. Drei Komponenten der Zugriffszeit (Seek Time, Latency Time, Transfer Time), Konsequenzen für performante Anwendung, Historische Entwicklung der Leistungsparameter, RAID-Systeme, RAID-Level 0, 1, 10.
8. Mittwoch, 04.12.2019:
Kapitel 4: Disks (Folie 4-30 bis 4-67)
RAID-Systeme, RAID-Level 0, 1, 10, 4, 5. Tablespaces in Oracle.
Kapitel 5: The Buffer Cache (Folie 5-1 bis 5-12)
Charakteristiken verschiedener Speichermedien, Pufferung von Blöcken im Hauptspeicher, Hit Ratio.
9. Mittwoch, 11.12.2019:
Kapitel 5: The Buffer Cache (Folie 5-12 bis 5-50)
Pufferung von Blöcken im Hauptspeicher, Schnittstelle eines typischen Buffer Managers, Ersetzungsstrategien, LRU, Sequential Flooding des Puffers, DBMS vs. Betriebssystem, Abfrage von Leistungsparatern in Oracle, CREATE TABLE Parameter für Pufferung in Oracle. Die Fünf-Minuten Regel.
10. Mittwoch, 18.12.2019:
Kapitel 6: Storage of Relations I: Segments (Files) (Folie 6-1 bis 6-36)
Disk Manager: Segmente, Extents, Extentent Management in Oracle, CREATE TABLE Parameter für klassisches ("DICTIONARY") Extent Management, Algorithmus zur Extent-Anforderung/Belegung, Local Extent Management in Oracle, klassisches UNIX File System als Vergleich.
10b. Mittwoch, 18.12.2019 (Übung):
Kapitel 7: Storage of Relations II: Sets of Bytestrings (Folie 7-1 bis 7-17)
Row Manager, Speicherung von Relationen als Heap-Datei, Einfachster Fall: Implementierung von Zeilen fester Länge.
...

Planung (unverbindlich, wird noch aktualisiert):

11. Mittwoch, 08.01.2020:
Kapitel 3: Physische Speicherung von Relationen (Folie 3-1 bis 3-47)
Speicherung von Relationen als Heap-Datei, Zeiger auf Tupel: ROWID/TID.
Kapitel 3: Physische Speicherung von Relationen (Folie 3-36 bis 3-69, 3-95 bis 3-108)
Wiederholung zu Aufgaben des Row Managers, Heap Files, ROWIDs/TIDs, Diskussion über Vor- und Nachteile stabiler ROWIDs, Alternativen, Implementierung von Zeilen fester Länge, Implementierung von Zeilen variabler Länge, Migrierte Zeilen, ROWID-Konzept: Verhinderung längerer Verweisketten. Vermeidung migrierter Zeilen mit PCTFREE, Implementierung des Full Table Scan (Hight Water Mark), Reorganisation von Tabellen, Zeilenformat von Oracle, Datenformate von Oracle, Berechnung von Zeilenlänge und Speicherplatzbedarf von Relationen.
Kapitel 3: Physische Speicherung von Relationen (Folie 3-70 bis 3-89)
Veraltung von Listen von Bl"ocken mit freien Speicherplatz, PCTUSED, Automatic Segment Space Management, Wiederholung/Zusammenfassung zur CREATE TABLE Syntax mit Speicherparametern, ANALYZE TABLE, Bedeutung für Optimierer.
Kapitel 4: B-Baum Indexe (Folie 4-1 bis 4-26)
Motivation für Index-Strukturen (Berechnung der Dauer eines Full Table Scan für eine große Tabelle), Wiederholung zur physischen Datenunabhängigkeit, Wiederholung zu binären Suchbämen, B+-Bäume (typische Datenstruktur für Indexe), Gründe für die Wiederholung von Schlüsselwerten in Blattknoten (B-Baum vs. B+-Baum), Einfügung in B-Bäume. Asymptotische Komplexität von Suche/Einfügung/Löschung (logarithmisch).
Kapitel 4: B-Baum Indexe (Folie 4-27 bis 4-53)
Berechnung von Höhe am Beispiel, Diskussion der Nutzung von Präfixen der Suchschlüssel ("rear compression"), Indexe mit mehreren ROWIDs zu einem Datenwert. Verkettung der Blattknoten. CREATE INDEX Befehl, Nutzung von Indexen zur Anfrageauswertung: Selektion mit Gleichheitsbedingung, Schneiden von TID-Mengen bei Nutzung mehrerer Indexe, Indexe über Attributkombinationen, Selektion mit Range Query, LIKE mit bekanntem Präfix, Index Join, Nutzen für Sortierung, Duplikateliminierung, Gruppierung, "Index only" Zugriffspläne, Verwendung von Indexen für Schlüssel, Fremdschlüssel, Indexe und Nullwerte. Index-Zugriff vs. Full Table Scan.
12. Mittwoch, 15.01.2020:
Kapitel 4: B-Baum Indexe (Folie 4-54 bis 4-100)
Beispiel, bei dem Selektion mittels Index sehr viel langsamer als mittels Full Table Scan. Nachteile von Indexen. Index-Auswahl. CREATE INDEX Befehl. Laden großer Datenmengen. Indexe im Oracle Data Dictionary. Schätzung der Speichergröße von Indexen in Oracle. Zusammenfassung zum physischen Datenbank-Entwurf.
Kapitel 5: Weitere Speicher- und Indexstrukturen (Folie 5-1 bis 5-49, Nur kurzer Überblick)
Cluster (Index-Cluster in Oracle), Hashverfahren (Hash-Cluster in Oracle), Partitionierte Tabellen, Bitmap Indexe, Index-Organized Tables.
Kapitel 6: Anfrage-Auswertung (Folie 6-1 bis 6-34)
Anfrage-Auswertungspläne (QEPs: Query Evaluation/Execution Plans), Vergleich mit relationaler Algebra, Erste Beispiel-QEPs in Oracle. Pipelined/Lazy Evaluation (Vermeidung der Speicherung von Zwischenergebnissen), Beispiel-Schnittstelle mit Scan/Cursor/Iterator, Temporärer Speicher für Sortierung, Initialisierungs-Parameter für Sortierung in Oracle, Performance-Daten für Sortierung in Oracle,
13. Mittwoch, 22.01.2020:
Kapitel 6: Anfrage-Auswertung (Folie 6-35 bis 6-86)
Mergesort, Verbesserungsmöglichkeiten für Mergesort. Join-Methoden: Nested-Loop Join, Merge-Join, Index-Join, Hash-Join. Optimizer Modes in Oracle, Wahl von Join-Methoden für Optimierungsziel schnelle Antwortzeit (erste Zeile möglichst schnell) oder hoher Durchsatz (letzte Zeile möglichst schnell), Beispiele von Oracle QEPs für Projekt-Selektion-Join Anfragen, Benutzung mehrerer Indexe für Konjunktionen und Disjunktionen, Auswertungspläne für Anfragen mit NOT EXISTS, Auswertungspläne für Aggregations-Anfragen, Auswertungspläne mit Sortierung, Zusammenfassung/Übersicht von Operatoren in Oracle QEPs.
Kapitel 7: Anfrage-Optimierung (Folie 7-1 bis 7-16)
Aufgabe des Optimierers, Direkte/Naive Übersetzung von SQL in relationale Algebra, algebraische Optimierung, Äquivalenzen der Relationenalgebra, Heuristik: Selektionen nach unten schieben (vor Joins), Beispiel, in dem das gerade falsch ist, lineare Join-Reihenfolgen vs. "bushy joins".
13b. Mittwoch, 22.01.2020:
Besprechung einer Beispielklausur
[Klausur aus WS 2015/16]
14. Mittwoch, 29.01.2020:
Kapitel 7: Anfrage-Optimierung (Folie 7-17 bis 7-71)
Anfrage-Normalisierung in Oracle (Ersetzen von SQL-Konstrukten durch andere, um syntaktische Varianten zu entfernen und nur eine SQL-Teilmenge im Optimierer behandeln zu müssen). Funktionsweise des früheren, Regel-basierten Optimierers von Oracle: Prioritätenliste von Zugriffspfaden, Auswahl eines Kandidaten-QEPs. Kostenbasierte Optimierung: Eingabedaten, Schätzung der Selektivität verschiedener Bedingungen, Histogramme in Oracle, Kostenschätzung für Full Table Scans, Index Scans, Zeilenzugriff über ROWID (Dereferenzierung), Nested Loop Join, Optimizer Hints in Oracle, Zusammenfassung.
15. Mittwoch, 05.02.2020:
...
Prof. Dr. Stefan Brass
Impressum