Repolode
erikgrinaker

erikgrinaker/toydb

Base de datos SQL distribuida escrita en Rust como proyecto educativo, con consenso Raft, transacciones MVCC e interfaz SQL.

Estrellas
7,304
Forks
625
Issues abiertos
0
Último commit
el mes pasado

¿Qué es?

toyDB es una base de datos SQL distribuida creada desde cero en Rust para ilustrar cómo funcionan los sistemas SQL distribuidos. Replica el estado entre los nodos de un clúster mediante consenso Raft para lograr la replicación linealizable de una máquina de estados, y ofrece transacciones ACID con aislamiento de instantáneas basado en MVCC.

La capa de almacenamiento es intercambiable e incluye un backend BitCask y otro en memoria. Sobre el almacén de clave-valor se ejecuta un motor de consultas basado en iteradores que aplica optimización heurística y admite lecturas históricas, además de una interfaz SQL que permite realizar joins, agregaciones y transacciones. El cliente de línea de comandos toysql se conecta a los nodos, y EXPLAIN muestra los planes de consulta.

El proyecto prioriza la simplicidad y la corrección por encima del rendimiento, la escalabilidad y la disponibilidad, por lo que su código está pensado para leerse. La mayoría de sus pruebas son pruebas de escenarios basadas en Goldenscript, y el repositorio incluye una guía de arquitectura y una herramienta para evaluar cargas de trabajo.

Funciones clave

  • 01Consenso Raft para la replicación linealizable entre los nodos de un clúster
  • 02Transacciones ACID con aislamiento de instantáneas mediante MVCC
  • 03Almacenamiento intercambiable con motores BitCask y en memoria
  • 04Compatibilidad con SQL para joins, agregaciones y transacciones
  • 05Salida de EXPLAIN con los planes de consulta después de la optimización heurística

Casos de uso

  • Aprender cómo se estructuran internamente las bases de datos SQL distribuidas
  • Estudiar el consenso Raft y las transacciones MVCC mediante una base de código legible en Rust
  • Experimentar con un pequeño clúster SQL de varios nodos en una máquina local

Inicio rápido

  1. 1

    Instala un compilador de Rust (consulta la página de instalación de Rust).

  2. 2

    Inicia un clúster local de cinco nodos.

    ./cluster/run.sh
  3. 3

    Compila y ejecuta el cliente de línea de comandos para conectarte al nodo 1.

    cargo run --release --bin toysql

Antes de usarlo

  • No está optimizado específicamente para el rendimiento, la escalabilidad ni la disponibilidad.
  • El rendimiento de escritura es muy bajo debido a fsync y a la falta de escritura por lotes.
  • Se ha creado como proyecto educativo, no para su uso en producción.

En colecciones

Temas

Preguntas frecuentes

¿Qué es toydb?
Base de datos SQL distribuida escrita en Rust como proyecto educativo, con consenso Raft, transacciones MVCC e interfaz SQL. toyDB es una base de datos SQL distribuida creada desde cero en Rust para ilustrar cómo funcionan los sistemas SQL distribuidos. Replica el estado entre los nodos de un clúster mediante consenso Raft para lograr la replicación linealizable de una máquina de estados, y ofrece transacciones ACID con aislamiento de instantáneas basado en MVCC.
¿toydb es gratuito? ¿Qué licencia tiene?
toydb es open source bajo la licencia Apache-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
¿toydb sigue mantenido?
Actualizado en los últimos 6 meses. El último commit de toydb fue el 2 oct 2026.
¿Para qué puedo usar toydb?
Aprender cómo se estructuran internamente las bases de datos SQL distribuidas Estudiar el consenso Raft y las transacciones MVCC mediante una base de código legible en Rust Experimentar con un pequeño clúster SQL de varios nodos en una máquina local
¿Cómo se instala toydb?
Instala un compilador de Rust (consulta la página de instalación de Rust). Inicia un clúster local de cinco nodos.: ./cluster/run.sh Compila y ejecuta el cliente de línea de comandos para conectarte al nodo 1.: cargo run --release --bin toysql
¿Dónde consigo toydb?
El código fuente y las instrucciones de instalación están en GitHub: https://github.com/erikgrinaker/toydb

Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.

Proyectos relacionados