Dieser Vortrag hilft dabei, die internen Abläufe einer Datenbank zu verstehen, indem wir die Abstraktionen aufschlüsseln, die sie ausmachen. Wir werden Python als unser bevorzugtes Werkzeug verwenden, um schrittweise zu erörtern, wie man die verschiedenen Komponenten einer Datenbank aufbaut.
1) Mit Ihrer Datenbank kommunizieren: Wir beginnen damit, eine Schnittstelle und eine Sprache zu entwickeln, die uns hilft, mit unserer Datenbank zu kommunizieren. Wir werden das Prompt Toolkit verwenden, um ein REPL zu erstellen und eine einfache SQL-basierte Sprache mit grundlegenden regulären Ausdrücken zu nutzen, die sie in ausführbare Anweisungen umwandeln kann.
2) Mit Daten arbeiten: Jetzt, da wir mit unserer Datenbank über Anweisungen kommunizieren können, beginnen wir mit der eigentlichen Arbeit am Datenspeicher. Zunächst speichern wir alle Daten in einem einfachen In-Memory-Dictionary und bewegen uns dann dazu, diese Daten auf der Festplatte zu persistieren. Jedes Mal, wenn wir die Daten abfragen, lesen wir die Daten von der Festplatte in den Speicher und schreiben die Daten zurück auf die Festplatte, was die Dinge jedoch sehr langsam macht :(
Dieses Problem führt uns in die wunderbare Welt der Indizes, indem wir einen sehr einfachen B-Baum-Index erstellen, um Referenzen im Speicher zu speichern, damit wir nur das, was wir von den Daten auf der Festplatte benötigen, schnell abrufen können. Dadurch können wir unsere Zugriffszeiten für grundlegende Zeilenabfragen von O(N) auf O(1) reduzieren, wobei N die Anzahl der Zeilen in einer Tabelle ist.
3) Zukunft: Wir können jetzt stolz unsere neue und optimierte Datenbank präsentieren, die Daten speichern, persistieren und Abfragen ausführen kann, die dank unserer B-Baum-Indizes recht schnell sind. Wir diskutieren auch, wie diese Datenbank in Zukunft verbessert werden kann, indem sie vollständige ACID-Transaktionen unterstützt, Parallelität ermöglicht und Sperren verwaltet.
Der beste Weg, etwas zu verstehen, ist, es selbst zu bauen :)