Fiz um DB?

Faz um tempo que fiz uma pergunta aqui, meu primeiro post na Tabnews, perguntei sobre um banco de dados que usa JSON e a estrutura do firebease pra guardar as informações.

Sei que ainda tem muito a melhora e que JSON local não é a melhor forma de fazer isso, mas é um começo e está sendo divertido fazer o pacote.

Fiz porque sentia a necessidade de persistir as informações em algum lugar, mas nao queria me restringir ao localStorage no navegador ou ter que usar um DB pra algo do node ou bun, como uma CLI por exemplo.

Toda vez tinha que ir no Firebase, fazer um novo app pra poder usar o Firestore ou ir na AWS pra usar o DynamoDB. Com o Jason eu só adicono o pacote, crio as coleções e pronto.

Então acho que isso vai me ajudar bastante e resolvi compartilhar no npm para poderem usar também. Ainda tenho algumas coisas para ajeitar no Github e melhorias, mas para o basico está funcionando até que muito bem 🙂.

npm

VAle sim a pena o teste desse "banco local" via node e ver se não tem gargalos nas consultas, bem útil sim.

Entendo a ideia e os desafios de criar um novo BD.

Mas com isso me surgem alguns questionamentos:

1 - De forma prática e objetiva, não seria mais simples usar alternativas como o SQLite, por exemplo? Amplamente testado, performático e mantido há anos. Essa sugestão se dá por parecer estar criando algo muito similar.

2 - Um container docker com MongoDB não seria uma outra boa opção para esses casos de usos citados?

No mais, parabéns pelo trampo. Não é nada fácil fazer algo desse tipo do zero.

Respondendo 1 e 2: Inicialmente queria só testar como seria fazer um DB assim, depois eu pensei que seria "mais, melhor de bom" fazer ele mais robusto com uma estrutura mais familiar, escolhi fazer ele ter essa estrutura de documentos e coleções por conta disso, mesmo que por enquanto para produção ainda não está bom o suficiente, creio que localmente ele é melhor e mais simples. * é só instalar. * fazer as interfaces. * instanciar a classe JasonDB. * iniciar as coleções. E pronto, Database pronto em 4 passos. E mais uma coisa, obrigado pela atenção :)

Gostei demais! Usava um parecido em .NET, mas não lembro o nome...

Quando penso em "banco local", me vem SQLite logo de primeira. Mas criar tabela e ter que escrever sql é chatão, e as vezes nem compensa um ORM pro tamanho da aplicação.

Teria como usar em projetos node sem bun? Afinal, é JS.

PS.: Faz um benchmark dele com SQLite, se der :D

Da pra usar no node sem o bun sim, ele usa as apis do Node, mas o bun tem suporte pro napi então funciona direitinho :) Vou fazer benchmark dele com SQLite sim, mas quero melhorar algumas coisas nele antes e ajeitar o repositório. Deixar com uma cara mais profisional, parecida com a de projetos maiores como o Vite ou Svelte.

Esse seria um DB simples para ser usado em ambiente local para pequenos testes, certo? Não cheguei a ver o código fonte, mas você já chegou a fazer testes de estresse/benchmark para ter métricas de desempenho? E quanto a execução de queries complexas, seria possível fazer um de/para de consultas usando join, union.. ?

Pergunta 1: Sim, exatamente isso. Pergunta 2: Fiz localmente, está bem rápido, mas como me sugeriram, vou fazer comparando com o SQLite. Pergunta 3: Pensei em usar um callback dentro da query. Por exemplo: `colecao.query(doc => doc.age > 18)`, dessa forma ele retorna uma lista de usuários acima dos 18 anos, acho que assim mantém a api mais simples, mas vou atualizar e por mais métodos para isso. Porém, se não me engano esses tipos de queries já são possíveis fazer com os métodos do Array.prototype, talvez com a ajuda de um Promise.all