Executando verificação de segurança...
30

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/

5

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

2

Concordo, sempre quis um projeto Brasileiro em Rust pra ajudar a desenvolver, se tiver futuros planos pra esse projeto Rustbase, estou disposto a ajudar :D

1
1
2

Quais são os principais bancos de dados concorrentes do seu?
Só Redis?
O que o seu tem que os outros não tem?

Coloca isso no site do projeto tbm!

1
1
2
2

Seria muito interessante um post explicando sobre os fundamentos de DB que você teve de aprender para desenvolver seu banco.

1
2
1
2

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.

2
1
2
1
2

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?

1

O Rust é um linguagem bem diferente de todas as outras em questão de gerenciamento de memória, pois o Rust não tem Garbage Collector, porém, ele usa uma feature chamada ownership, na qual cada variavel que você declara tem seu "dono", que no caso o "dono" da variavel pode ser uma função ou uma implementação de um struct, essa feature deixa o Rust mais diferente e precisa-se de mais estudos na documentação do Rust.

1
1