Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp15/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp15/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2015 - D - Databse Engine

Database Engine

FlatFile

Aufgabe der database engine ist die Umsetzung der CRUD Datenbankoperationen um Datensätze auf einen Hintergundspeicher zu schreiben bzw. um sie vom Hintergrundspeicher zu lesen. Für eine Beschreibung der CRUD Datenbankoperationen siehe Abschnitt: CRUD-Operationen

Die Implementierung der Datenbankoperationen hat einen wesentlichen Einfluss auf die Zeit, die benötigt wird einen gewünschten Datensatz zu finden bzw. zu schreiben. Ja nach Anwendungsfall ist daher eine eigene database engine sinnvoll.

Die Möglichkeit, zu einem späteren Zeitpunkt weitere database engines hinzuzufügen, wurde beim Design des DBMS berücksichtigt. Es können beliebig viele database engines implementiert und verwendet werden, solange sie das trait Engine implementieren (siehe Abbildung 1).

Abbildung 1: Klassendiagramm des traits Engine

"FlatFile" ist die in diesem Projekt entwickelte Beispielimplementation einer database engine. Als untergeordnete Datenstruktur verwendet sie den Heap-File.

Der Heap-File zeichnet sich dadurch aus, dass die einzelnen Datensätze hintereinander auf der Festplatte gespeichert werden. Dies macht die Implementation eines Heap-Files wenig kompliziert. Weiterhin sind beim Abspeichern der Datensätze nur wenige zusätzliche Informationen notwendig. FlatFile führt pro Datensatz nur ein Byte als Zeilenkopf mit. In dem Zeilenkopf wird durch das Delete-Bit kodiert, ob eine Zeile gelöscht ist. Datensätze, deren Delete-Bit gesetzt ist, werden für alle Datenbankoperationen ignoriert.

Der Nachteil des Heap-Files sind die Laufzeiten der CRUD Datenbankoperationen von O(n), wobei n proportional mit der Anzahl der Datensätze wächst.

Wie die CRUD Datenbankoperationen für die FlatFile engine implementiert wurden, ist im Abschnitt CRUD Datenbankoperationen nachzulesen.

Rows<T>

Um komplexe SQL Befehle ausführen zu können, müssen die CRUD Operationen auch auf der Ergebnismenge zur Verfügung stehen, die ein Aufruf von lookup erzeugt. Aus diesem Grund gibt die Funktion lookup ein Objekt vom Typ Rows<T> zurück. Ein vereinfachtes Klassendiagramm von Rows<T> ist in Abbildung 2 dargestellt.

Abbildung 2: Klassendiagramm Rows

Rows<T> stellt alle CRUD Operationen auf beliebigen Datenquellen (data_src) vom Typ T zur Verfügung, solange sie die traits Read, Write und Seek implementiert haben. Durch diese traits ist gewährleistet, dass jedes Byte in der Datenquelle adressiert werden kann.

Die eigentliche Implementation der CRUD Operationen erfolgte im Rows<T>. Die FlatFile engine selbst erzeugt nur eine Instanz von Rows<File> mit der Datendatei der Tabelle und leitet alle Befehle an Rows<File> weiter. Das Konzept, dass die FlatFile engine ein Rows-Objekt erstellt, welches eine Datei kapselt und die Befehle lediglich an das Rows-Objekt weiterleitet, ist ein Designfehler. Um die database engine zu ersetzen, müsste auch Rows<T> ersetzt werden. Besser wäre es gewesen Rows<T> mit der der database engine zu verschmelzen.

lookup selbst gibt ein Rows-Objekt mit T = Cursor<Vec<u8>> zurück. Cursor<Vec<u8>> ist eine Struktur im Arbeitsspeicher, die die zufällige Adressierung von Bytes im Arbeitsspeicher erlaubt. Somit erfolgt der Festplattenzugriff einer komplexen SQL Abfrage nur bei dem ersten Aufruf von lookup. Alle Operationen auf dieser Teilmenge erfolgen im Arbeitsspeicher.


Autor: Mathias Flüggen, Heiner Rieping
Gruppe: Mathias Flüggen, Dennis Lindner, Heiner Rieping


Page last modified on September 24, 2015, at 02:24 PM