Como criei o meu próprio banco de dados, o Rustbase.
Rust, a linguagem dos sonhos
Em março de 2022, o Filipe Deschamps soltou um vídeo no YouTube chamado: "Essa Linguagem Está ROUBANDO O CORAÇÃO Dos Programadores Mundialmente", nesse vídeo o Filipe falava sobre o Rust e como o Rust estava "roubando corações" e comigo não foi diferente. Assim que terminei de assistir o vídeo, baixei o Rust e comecei a testar a linguagem, foi difícil no começo se acostumar com a línguagem, mas logo aprendi o jeito.
A Ideia
Assim que terminei de aprender as features basicas do Rust, eu tive uma ideia: "Porque não fazer um banco de dados noSQL em Rust?", e assim fiz. Em 23 de março de 2022 (9 dias depois do vídeo do Filipe), criei a organização do Github e comecei a codar, e em 16 de Abril de 2022 fiz os primeiros commits.
O atraso
A principio queria fazer um banco de dados orientados a documentos, estilo MongoDB, porém, eu não tinha conhecimentos nenhum de banco de dados e como o sistema eram feitos, por isso, eu tive meses de atraso do projeto, eu estava pesquisando muito sobre como um DB funciona e etc (foi de Maio até Agosto só pesquisando sobre).
DustData
Com a minha pesquisa descubri algo chamado LSM-Tree (ou Log Strutured Merge Tree), que era uma estrutura de dados muito usado em bancos de dados key-value, e assim que descobri isso criei o DustData, o Storage Engine do Rustbase.
Pós-DustData
Assim que terminei as funcionalidades basicas do DustData, implementei o DustData no Rustbase e atualmente o Rustbase fica responsável por ser o principal servidor do banco de dados.
Como funciona o Rustbase?
Bem, como havia dito, o core do Rustbase é o DustData, que usa o LSM-Tree como estrutura de dados. o LSM-Tree é separado por 4 partes: Memtable, SStable, Index e Filter:
Memtable
É um armazenamento temporário na memória RAM. Quando algum dado for inserido, aqui é o primeiro lugar que ele irá ficar. Assim que o memtable chegar a um certo espaço na memória RAM, ele irá ser "flushiado" para o SSTable
SSTable
Sorted String Table (ou SSTable) é uma tabela que fica no disco e é imutável, o SSTable é separado por segmentos e cada segmento tem uma chave e valor.
Index
Talvez uma das partes mais importantes de um DB, o Index é um dicionário que indica qual é o endereço de um valor no disco usando uma chave. O index é uma ótima forma de deixar o DB mais rápido.
Filter
Filter é um filtro que indica se tal chave realmente existe no SSTable/Index. No caso do DustData usei o Bloom Filter.
Resultados do Rustbase
Os resultados do Rustbase realmente me impressionou, não achei que o Rustbase fosse tão rapido assim.
Benchmark
Vamos testar o Rustbase junto com o Redis (um banco de dados chave-valor que armazena os dados na memória)
Usando o Rustbase v0.4.0 e o Redis v7, chegamos a esse resultados:
Usando Ryzen 5 5500, sem utilizar pipelines em ambos.
Rustbase
Inserido 10k de dados em: 489.5ms Pegando 10k de dados em: 492ms Deletando 10k de dados em: 500.9ms
Redis
Inserido 10k de dados em: 586.2ms Pegando 10k de dados em: 551.4ms Deletando 10k de dados em: 545.1ms
É MAIS RÁPIDO QUE O REDIS!!!!!
Mesmo que seja poucos ms de diferença, isso ainda é realmente de se impressionar.
Github do Rustbase: https://github.com/rustbase/rustbase Github do DustData: https://github.com/rustbase/dustdata Site do projeto: https://rustbase.app/
Finalmente um projeto que pode ser grande feito por cabeça brasileira.
Sempre me perguntei. Nós temos ótimos programadores. Entre os melhores do mundo. Mas ferramentas nunca vejo.
Tem coisas de italianos, alemães, tem da croacia, da polonia, e claro russia. Não sei se é barreira da lingua, ou sei lá!
Espero que sua ferramenta cresça e fique bem famosa!
Ideia: Benchmarks com os concorrentes diretos.
abraços
Se quiserem posso criar o Tab aqui no TabNews contando como eu funciona o meu DB.
Ia ser bom, assim parabéns pelo projeto
Muito massa esse projeto, já fiz meu fork pra começar a ajudar!! Tenho vontade de estudar mais sobre esse assunto e criar também um projeto, mas só como aprendizado.
@peeeuzin, sugestão: inclua eles no repo: https://github.com/rust-unofficial/awesome-rust Abraço!
Parabéns! Se puder descrever mais seria muito útil e encorajador!
Que show! Muito interessante o conteúdo. Estou com Rust na minha lista de coisas para aprender em 2023, mas ainda não comecei. Qual foi tua maior dificuldade no início? Sintaxe?
cara muito interessante, vou usar em algum projeto para testar
Caramba, parabéns, acabei de ver um projeto aqui: https://github.com/skytable/skytable Gostaria de saber a comparação hein!