Um banco de dados de grafos open source, distribuído e escalável horizontalmente, com consultas compatíveis com OpenCypher e consistência baseada em Raft.
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
Instale um compilador Rust (consulte a página de instalação do Rust).
- 2
Inicie um cluster local de cinco nós.
./cluster/run.sh - 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
Armazenamento distribuído e confiável de chave-valor para os dados mais críticos de sistemas distribuídos, baseado no consenso Raft e com API gRPC.
Banco de dados SQL distribuído e cloud-native, baseado em um armazenamento key-value fortemente consistente e compatível com o protocolo wire do PostgreSQL.
Banco de dados relacional distribuído, leve e tolerante a falhas, baseado em SQLite e replicado entre nós por consenso Raft.
Banco de dados de grafos distribuído e escalável horizontalmente, com interface de consulta GraphQL nativa e transações ACID.
Banco de dados de séries temporais open source e de alto desempenho para IoT, carros conectados e aplicações industriais, com consultas SQL.