Durant un stage, j’ai rencontré un développeur senior qui a construit de A à Z le moteur de base de données interne de son entreprise sur plusieurs décennies. Il était heureux de partager comment ça fonctionnait : chaque décision d’architecture, chaque compromis entre performance et complexité. Voir quelqu’un maîtriser à ce niveau quelque chose qu’il avait construit entièrement a soulevé une question simple : comment fonctionne vraiment un moteur de base de données ? La seule façon de le savoir était d’en construire un.
Flint est un moteur de base de données expérimental que je construis en Rust. L’objectif : une architecture ultra-modulaire où chaque couche (format de stockage sur disque, organisation en mémoire, parsing de requêtes) est une interface indépendante, implémentable et remplaçable sans toucher au reste.
Pourquoi réécrire depuis le C++
Le projet a d’abord existé en C++, avec une implémentation orientée lignes classique. Après avoir lu un papier scientifique sur les architectures de bases de données modulaires et découvert Rust, j’ai tout reécrit. Rust s’impose ici pour deux raisons concrètes : la sécurité mémoire sans garbage collector (critique pour un moteur qui gère lui-même ses allocations), et un système de traits qui rend l’architecture par interface naturelle plutôt que contrainte.
Décision d’architecture : pourquoi ultra-modulaire
L’hypothèse à tester : le format d’accès aux données (row-based, column-based, hybride) devrait pouvoir être choisi dynamiquement en fonction du type de requête reçue pour minimiser le temps de traitement. Une requête analytique sur une colonne entière ne devrait pas payer le coût d’un accès orienté lignes.
Rendre chaque couche interchangeable a un second bénéfice : ça en fait un bon projet open source. N’importe qui peut implémenter son propre format de stockage ou sa propre stratégie d’accès mémoire sans modifier le cœur du moteur.
État actuel
- Architecture modulaire de base implémentée
- Opérations
CREATE,SELECT,INSERTfonctionnelles en mémoire - Stockage sur disque et parser en cours de développement
- Publication open source prévue une fois le seuil de maturité atteint