kestrel

Un moteur de base de données relationnelle de zéro en Kotlin : parseur SQL, stockage sur arbre B, exécuteur, transactions WAL et CLI. Il exécute de vraies requêtes SQL et est couvert par une suite de tests complète.

kestrel
TL;DR

Un moteur de base de données relationnelle écrit de zéro en Kotlin : son propre analyseur SQL, un exécuteur de requêtes, un stockage sur B-arbre et des transactions avec journal WAL. Avec en plus une CLI et une suite de tests complète.

Aperçu

kestrel est un moteur de base de données relationnelle écrit de zéro en Kotlin. Il a tout ce qui fait d'une base une base, et pas seulement un entrepôt de données : son propre analyseur SQL, un exécuteur de requêtes, un stockage sur B-arbre, des transactions avec journal WAL, et en plus une CLI et une suite de tests complète. Il exécute de vraies requêtes SQL au lieu de faire semblant de les traiter.

Au quotidien, une base de données tient en une ligne : exécute une requête, reçois des lignes. L'écrire de zéro arrache ce confort et montre combien de choses se passent en dessous - et c'est justement ce chemin vers le bas qui est le sens de ce projet.

Derrière un seul SELECT innocent se cache une suite de questions difficiles. Comment garder les données sur le disque pour les retrouver vite ? Comment traduire du texte SQL en un plan d'exécution qui sait quoi lire et dans quel ordre ? Et le plus dur : comment ne pas perdre une écriture quand le courant disparaît au milieu de l'opération ?

Chacune de ces questions est au quotidien cachée derrière le confort d'une base toute faite. Écrire un moteur de zéro les fait remonter une à une et oblige à les résoudre pour de vrai, au lieu de les balayer d'un revers de main. C'est pourquoi une base de données est l'un des meilleurs projets que l'on puisse se donner pour comprendre l'ordinateur plus en profondeur.

Le chemin complet d'une requête

kestrel prend une requête ordinaire et la fait passer par le chemin complet - du texte jusqu'aux octets sur le disque. Chaque étape a une tâche et transmet son résultat à la suivante, et l'ensemble se suit du doigt, d'une ligne de SQL jusqu'à l'endroit où atterrissent les données.

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
Analyseur

le texte SQL se transforme en arbre de requête.

2
Exécuteur

l'arbre devient un plan : quoi lire et dans quel ordre.

3
Stockage

les données vivent dans un B-arbre pour que les recherches par clé soient rapides.

4
WAL

chaque changement va d'abord dans le journal, seulement ensuite à sa place.

Les couches du moteur

CoucheTâche
AnalyseurSQL vers un arbre de requête
Exécuteurarbre vers un plan d'exécution
Stockagedonnées dans un B-arbre pour des recherches rapides
WALun journal d'intention avant l'écriture réelle

WAL, ou pourquoi vous ne perdez pas de données

La partie la plus difficile d'une base de données est invisible jusqu'à ce que quelque chose tourne mal. Le WAL est le mécanisme qui décide si, après une coupure de courant soudaine, la base revient à un état cohérent ou vous laisse avec une transaction écrite à moitié. La règle est simple et inviolable : d'abord écrire l'intention dans le journal, ensuite le changement réel - jamais l'inverse.

!
Attention

Le WAL n'est pas une décoration. C'est lui qui décide si, après une coupure de courant soudaine, la base revient à un état cohérent ou vous laisse avec une transaction écrite à moitié. D'abord écrire l'intention dans le journal, ensuite le changement réel - chaque inversion de cet ordre est une perte de données potentielle.

Le résultat : un savoir qui reste

C'est un projet qui, une fois terminé, change la façon dont vous regardez toute autre base de données - car soudain vous savez ce qui se trouve sous ce seul SELECT. kestrel exécute de vraies requêtes, passe une suite de tests complète et dispose d'une CLI, ce n'est donc pas une esquisse mais un moteur qui fonctionne. Et le savoir qui reste vaut plus que le code lui-même.

Plus de projets

D'autres réalisations de la même catégorie - découvrez comment nous abordons des défis similaires.

Vous avez un projet similaire ?

Contactez-nous - le devis est gratuit et arrive sous une heure.