kestrel

Un motor de base de datos relacional desde cero en Kotlin: parser SQL, almacenamiento en árbol B, ejecutor, transacciones WAL y CLI. Ejecuta consultas SQL reales y está cubierto por una suite de pruebas completa.

kestrel
TL;DR

Un motor de base de datos relacional escrito desde cero en Kotlin: su propio analizador SQL, un ejecutor de consultas, almacenamiento en B-árbol y transacciones con diario WAL. Además una CLI y una suite de pruebas completa.

Descripción general

kestrel es un motor de base de datos relacional escrito desde cero en Kotlin. Tiene todo lo que hace de una base una base, y no solo un almacén de datos: su propio analizador SQL, un ejecutor de consultas, almacenamiento basado en B-árbol, transacciones con diario WAL, y además una CLI y una suite de pruebas completa. Ejecuta consultas SQL reales en lugar de fingir que las maneja.

En el día a día una base de datos es una línea: ejecuta una consulta, recibe filas. Escribirla desde cero arranca esa comodidad y muestra cuántas cosas pasan por debajo - y es justo ese camino hacia abajo el sentido de este proyecto.

Detrás de un solo SELECT inocente se esconde una cadena de preguntas difíciles. ¿Cómo guardar los datos en el disco para encontrarlos rápido? ¿Cómo traducir el texto SQL a un plan de ejecución que sepa qué leer y en qué orden? Y la más difícil: ¿cómo no perder una escritura cuando la corriente desaparece a mitad de la operación?

Cada una de esas preguntas está en el día a día oculta tras la comodidad de una base ya hecha. Escribir un motor desde cero las saca a la luz una a una y obliga a resolverlas de verdad, en lugar de descartarlas con un gesto. Por eso una base de datos es uno de los mejores proyectos que uno puede plantearse para entender el ordenador más a fondo.

El camino completo de una consulta

kestrel toma una consulta ordinaria y la hace pasar por el camino completo - del texto hasta los bytes en el disco. Cada etapa tiene una tarea y pasa su resultado a la siguiente, y el conjunto se sigue con el dedo, de una línea de SQL hasta el lugar donde aterrizan los datos.

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
Analizador

el texto SQL se transforma en un árbol de consulta.

2
Ejecutor

el árbol se vuelve un plan: qué leer y en qué orden.

3
Almacenamiento

los datos viven en un B-árbol para que las búsquedas por clave sean rápidas.

4
WAL

cada cambio va primero al diario, solo después a su sitio.

Las capas del motor

CapaTarea
AnalizadorSQL a un árbol de consulta
Ejecutorárbol a un plan de ejecución
Almacenamientodatos en un B-árbol para búsquedas rápidas
WALun diario de intención antes de la escritura real

WAL, o por qué no pierdes datos

La parte más difícil de una base de datos es invisible hasta que algo sale mal. El WAL es el mecanismo que decide si, tras un apagón repentino, la base vuelve a un estado coherente o te deja con una transacción escrita a medias. La regla es simple e inviolable: primero escribir la intención en el diario, luego el cambio real - nunca al revés.

!
Atención

El WAL no es un adorno. Es el que decide si, tras un apagón repentino, la base vuelve a un estado coherente o te deja con una transacción escrita a medias. Primero escribir la intención en el diario, luego el cambio real - cada inversión de ese orden es una pérdida de datos potencial.

El resultado: conocimiento que queda

Es un proyecto que, una vez terminado, cambia cómo miras cualquier otra base de datos - porque de pronto sabes qué hay bajo ese solo SELECT. kestrel ejecuta consultas reales, pasa una suite de pruebas completa y tiene una CLI, así que no es un boceto sino un motor que funciona. Y el conocimiento que queda vale más que el código mismo.

Más proyectos

Más trabajos de la misma categoría - mira cómo abordamos retos parecidos.

¿Tiene un proyecto similar?

Escríbenos - el presupuesto es gratuito y llega en una hora.