Repolode
erikgrinaker

erikgrinaker/toydb

Um banco de dados SQL distribuído escrito em Rust como projeto educacional, com consenso Raft, transações MVCC e uma interface SQL.

Estrelas
7,304
Forks
624
Issues abertas
0
Último commit
mês passado

O que é?

toyDB é um banco de dados SQL distribuído, construído do zero em Rust para ilustrar como sistemas SQL distribuídos funcionam. Ele replica o estado entre os nós do cluster usando consenso Raft para replicação linearizável de máquina de estados e oferece transações ACID com isolamento por snapshot baseado em MVCC.

A camada de armazenamento é pluggable, com um backend BitCask e outro em memória. Sobre o armazenamento de chave/valor fica um mecanismo de consulta baseado em iteradores, que aplica otimizações heurísticas e oferece consultas com leitura temporal, além de uma interface SQL que abrange joins, agregações e transações. Um cliente de linha de comando, o toysql, conecta-se aos nós, e EXPLAIN exibe os planos de consulta.

O projeto prioriza simplicidade e correção em vez de desempenho, escalabilidade e disponibilidade, então seu código foi feito para ser lido. Seus testes são, em grande parte, testes de cenário baseados em Goldenscript, e o repositório inclui um guia de arquitetura e uma ferramenta de benchmark de carga de trabalho.

Recursos principais

  • 01Consenso Raft para replicação linearizável entre os nós de um cluster
  • 02Transações ACID com isolamento por snapshot usando MVCC
  • 03Armazenamento pluggable com mecanismos BitCask e em memória
  • 04Suporte SQL a joins, agregações e transações
  • 05Saída do EXPLAIN com planos de consulta após otimizações heurísticas

Casos de uso

  • Aprender como bancos de dados SQL distribuídos são estruturados internamente
  • Estudar consenso Raft e transações MVCC por meio de uma base de código em Rust fácil de ler
  • Experimentar um pequeno cluster SQL com vários nós em uma máquina local

Início rápido

  1. 1

    Instale um compilador Rust (consulte a página de instalação do Rust).

  2. 2

    Inicie um cluster local de cinco nós.

    ./cluster/run.sh
  3. 3

    Compile e execute o cliente de linha de comando para se conectar ao nó 1.

    cargo run --release --bin toysql

Antes de usar

  • Não foi otimizado especificamente para desempenho, escalabilidade ou disponibilidade.
  • O desempenho de gravação é muito ruim devido ao fsync e à falta de gravação em lotes.
  • Foi desenvolvido como um projeto educacional, não para uso em produção.

Em coleções

Tópicos

Perguntas frequentes

O que é toydb?
Um banco de dados SQL distribuído escrito em Rust como projeto educacional, com consenso Raft, transações MVCC e uma interface SQL. toyDB é um banco de dados SQL distribuído, construído do zero em Rust para ilustrar como sistemas SQL distribuídos funcionam. Ele replica o estado entre os nós do cluster usando consenso Raft para replicação linearizável de máquina de estados e oferece transações ACID com isolamento por snapshot baseado em MVCC.
toydb é gratuito? Qual é a licença?
toydb é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
toydb ainda é mantido?
Atualizado nos últimos 6 meses. O último commit de toydb foi em 2 de out. de 2026.
Para que posso usar toydb?
Aprender como bancos de dados SQL distribuídos são estruturados internamente Estudar consenso Raft e transações MVCC por meio de uma base de código em Rust fácil de ler Experimentar um pequeno cluster SQL com vários nós em uma máquina local
Como instalar toydb?
Instale um compilador Rust (consulte a página de instalação do Rust). Inicie um cluster local de cinco nós.: ./cluster/run.sh Compile e execute o cliente de linha de comando para se conectar ao nó 1.: cargo run --release --bin toysql
Onde consigo toydb?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/erikgrinaker/toydb

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados