kestrel

Eine relationale Datenbank-Engine von Grund auf in Kotlin: ein SQL-Parser, ein B-Baum-Speicher, ein Executor, WAL-Transaktionen und eine CLI. Sie führt echte SQL-Abfragen aus und ist mit einer kompletten Testsuite abgedeckt.

kestrel
TL;DR

Eine relationale Datenbank-Engine, von Grund auf in Kotlin geschrieben: eigener SQL-Parser, ein Query-Executor, B-Baum-Speicher und WAL-gestützte Transaktionen. Dazu eine CLI und eine vollständige Testsuite.

Überblick

kestrel ist eine relationale Datenbank-Engine, von Grund auf in Kotlin geschrieben. Sie hat alles, was aus einer Datenbank eine Datenbank macht, und nicht nur einen Ort zum Ablegen von Daten: einen eigenen SQL-Parser, einen Query-Executor, B-Baum-Speicher, WAL-gestützte Transaktionen, dazu eine CLI und eine vollständige Testsuite. Sie führt echte SQL-Abfragen aus, statt deren Verarbeitung nur vorzugeben.

Im Alltag ist eine Datenbank eine Zeile: führe eine Abfrage aus, bekomme Zeilen. Sie von Grund auf zu schreiben reißt diese Bequemlichkeit weg und zeigt, wie viel darunter geschieht - und genau dieser Weg nach unten ist der Sinn dieses Projekts.

Hinter einem einzigen harmlosen SELECT verbirgt sich eine Kette schwerer Fragen. Wie hält man Daten auf der Festplatte, um sie schnell zu finden? Wie übersetzt man SQL-Text in einen Ausführungsplan, der weiß, was zu lesen ist und in welcher Reihenfolge? Und das Schwerste: Wie verliert man keinen Schreibvorgang, wenn der Strom mitten in der Operation verschwindet?

Jede dieser Fragen ist im Alltag hinter der Bequemlichkeit einer fertigen Datenbank verborgen. Eine Engine von Grund auf zu schreiben holt sie eine nach der anderen ans Licht und zwingt Sie, sie wirklich zu lösen, statt sie abzuwinken. Deshalb ist eine Datenbank eines der besten Projekte, die man sich setzen kann, um den Computer tiefer zu verstehen.

Der vollständige Weg einer Abfrage

kestrel nimmt eine gewöhnliche Abfrage und schickt sie durch den vollen Pfad - vom Text bis zu den Bytes auf der Festplatte. Jede Stufe hat eine Aufgabe und reicht ihr Ergebnis an die nächste weiter, und das Ganze lässt sich mit dem Finger nachverfolgen, von einer Zeile SQL bis zu dem Ort, an dem die Daten landen.

demo.sql · sql
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO users VALUES (1, 'ada');
SELECT name FROM users WHERE id = 1;
1
Parser

der SQL-Text wird zu einem Abfragebaum.

2
Executor

der Baum wird zu einem Plan: was zu lesen ist und in welcher Reihenfolge.

3
Speicher

die Daten liegen in einem B-Baum, damit die Suche nach Schlüssel schnell ist.

4
WAL

jede Änderung geht zuerst in das Log, erst dann an ihren Platz.

Die Schichten der Engine

SchichtAufgabe
ParserSQL in einen Abfragebaum
ExecutorBaum in einen Ausführungsplan
SpeicherDaten in einem B-Baum für schnelle Suchen
WALein Log der Absicht vor dem eigentlichen Schreiben

WAL, oder warum Sie keine Daten verlieren

Der schwerste Teil einer Datenbank ist unsichtbar, bis etwas schiefgeht. Das WAL ist der Mechanismus, der entscheidet, ob die Datenbank nach einem plötzlichen Stromausfall in einen konsistenten Zustand zurückkehrt oder Sie mit einer halb geschriebenen Transaktion zurücklässt. Die Regel ist einfach und unverletzlich: zuerst die Absicht ins Log schreiben, dann die eigentliche Änderung - niemals umgekehrt.

!
Achtung

Das WAL ist keine Verzierung. Es entscheidet, ob die Datenbank nach einem plötzlichen Stromausfall in einen konsistenten Zustand zurückkehrt oder Sie mit einer halb geschriebenen Transaktion zurücklässt. Zuerst die Absicht ins Log schreiben, dann die eigentliche Änderung - jede Umkehrung dieser Reihenfolge ist ein potenzieller Datenverlust.

Das Ergebnis: Wissen, das bleibt

Es ist ein Projekt, das nach dem Abschluss verändert, wie Sie auf jede andere Datenbank blicken - denn plötzlich wissen Sie, was unter diesem einen SELECT steckt. kestrel führt echte Abfragen aus, besteht eine vollständige Testsuite und hat eine CLI, es ist also keine Skizze, sondern eine funktionierende Engine. Und das Wissen, das dabei zurückbleibt, ist mehr wert als der Code selbst.

Weitere Projekte

Weitere Projekte aus derselben Kategorie - sehen Sie, wie wir ähnliche Herausforderungen angehen.

Haben Sie ein ähnliches Projekt?

Melden Sie sich - ein Angebot ist kostenlos und kommt innerhalb einer Stunde.