kestrel
Un motore di database relazionale da zero in Kotlin: parser SQL, storage su B-tree, executor, transazioni WAL e CLI. Esegue query SQL reali ed è coperto da una suite di test completa.
Un motore di database relazionale scritto da zero in Kotlin: parser SQL proprio, un executor di query, storage su B-albero e transazioni con giornale WAL. In più una CLI e una suite di test completa.
Panoramica
kestrel è un motore di database relazionale scritto da zero in Kotlin. Ha tutto ciò che rende un database un database, e non solo un deposito di dati: un parser SQL proprio, un executor di query, storage basato su B-albero, transazioni con giornale WAL, e in più una CLI e una suite di test completa. Esegue vere query SQL invece di fingere di gestirle.
Nel quotidiano un database è una riga: esegui una query, ottieni righe. Scriverlo da zero strappa via questo comfort e mostra quante cose accadono sotto - ed è proprio questo percorso verso il basso il senso di questo progetto.
Dietro un solo innocente SELECT si cela una catena di domande difficili. Come tenere i dati sul disco per trovarli in fretta? Come tradurre il testo SQL in un piano di esecuzione che sappia cosa leggere e in quale ordine? E la più dura: come non perdere una scrittura quando la corrente sparisce a metà operazione?
Ognuna di queste domande è nel quotidiano nascosta dietro il comfort di un database già pronto. Scrivere un motore da zero le tira fuori una a una e costringe a risolverle davvero, invece di liquidarle con un gesto. Per questo un database è uno dei migliori progetti che ci si possa porre per capire il computer più a fondo.
Il percorso completo di una query
kestrel prende una query ordinaria e la fa passare per il percorso completo - dal testo fino ai byte sul disco. Ogni fase ha un compito e passa il suo risultato alla successiva, e il tutto si segue col dito, da una riga di SQL fino al punto in cui i dati atterrano.
il testo SQL si trasforma in un albero di query.
l'albero diventa un piano: cosa leggere e in quale ordine.
i dati vivono in un B-albero perché le ricerche per chiave siano rapide.
ogni modifica va prima nel giornale, solo dopo al suo posto.
Gli strati del motore
| Strato | Compito |
|---|---|
| Parser | SQL in un albero di query |
| Executor | albero in un piano di esecuzione |
| Storage | dati in un B-albero per ricerche rapide |
| WAL | un giornale d'intento prima della scrittura reale |
WAL, ovvero perché non perdi i dati
La parte più difficile di un database è invisibile finché qualcosa non va storto. Il WAL è il meccanismo che decide se, dopo uno spegnimento improvviso, il database torna a uno stato coerente o ti lascia con una transazione scritta a metà. La regola è semplice e inviolabile: prima scrivere l'intento nel giornale, poi la modifica reale - mai il contrario.
Il WAL non è un ornamento. È lui a decidere se, dopo uno spegnimento improvviso, il database torna a uno stato coerente o ti lascia con una transazione scritta a metà. Prima scrivere l'intento nel giornale, poi la modifica reale - ogni inversione di quest'ordine è una potenziale perdita di dati.
Il risultato: conoscenza che resta
È un progetto che, una volta finito, cambia il modo in cui guardi ogni altro database - perché all'improvviso sai cosa c'è sotto quel singolo SELECT. kestrel esegue vere query, supera una suite di test completa e ha una CLI, quindi non è uno schizzo ma un motore funzionante. E la conoscenza che resta vale più del codice stesso.
Altri progetti
Altri lavori della stessa categoria - scopri come affrontiamo sfide simili.
Hai un progetto simile?
Contattaci - il preventivo è gratuito e arriva entro un'ora.



