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

[ Dúvida ] Além do Drizzle ORM, existe algum outro ORM totalmente compatível com TypeScript e Bun?

Dúvida:

Escolher um bom ORM é uma decisão de peso, pois uma vez que implemenar é muito díficl migra-lo para outro ORM, devido a problemas que vocês já devem saber.

O único ORM que eu tive contato foi o Sequelize que é bem fácil de mexer e implementar até certo ponto... Sequelize não tem um suporte legal para TypeScript, apenas uma "ponte" para facilitar, mas nem se compara a algo totalmente escrito em TypeScript. Além disso, não tem suporte a novidade: Bun.

Eu estou iniciando o Back-end de um projeto full-stack para colocar no portfolio, e pensei no Sequelize pois tinha um conhecimento nele, mas eu decidi criar algo mais seguro, limpo e robusto, e obviamente eu pensei logo em procurar algo que tenha suporte a TypeScript e seja mantido.

O projeto utilizá SQLite para armazenamento local. Para armazenamento na Nuvem, eu estou considerando MongoDB no futuro, por causa de costos.

Eu irei escrever tudo em TypeScript, tanto o Front-end, quanto o Back-end. Eu sei que Golang ou Java é um back-end mais robosto, mas foge do meu escopo atual.

Nessas pesquisas eu encontrei o Drizzle, que parece ser tudo o que eu procurei, porém eu estou ainda a procura de alternativas, pois gosto de considerar mais de uma tecnologia antes de tomar a decisão de implementar de fato.

Vocês conhecem alguma alternativa ao Drizzle ou só ele tem suporte a TypeScript e Bun ao mesmo tempo? Eu sei que Bun tem um suporte nativo ao SQLite, porém o meu objetivo nesse projeto é aprender ao menos um ORM completamente, para expandir meu repertório.

Carregando publicação patrocinada...
3

Não é a resposta que vc pediu, mas é A resposta se vc quer expandir seu repertório de verdade

Use a api em C nativa do sqlite. Nada de bun::sqlite muito menos ORMs... Use bun::ffi, que inclusive, carregar o sqlite é exemplo da documentação oficial, por que será?!?

Escreva seus próprios "data access objects" DAOs em TS como wrappers ao redor da API do sqlite!!!

2

Eu estou seguindo mais ou menos a sua dica. Optei por fazer sem ORM no fim devido a problemas e devido a seu comentário que abriu minha mente. Eu optei por fazer usando a API do Bun para este projeto, e tenho um outro projeto para Prisma e mais um que é usando a API Nativa em C do SQLite. Organizei por níveis para ir treinando do mais tranquilo até o nível mais baixo.

Obrigado pelo o comentário!

2

Atualmente estou usando o prisma. achei muito facil. ele está sendo usado em projeto grande onde recebo cerca de 50000 mensagens de WhatsApp por mês.

2

A maior questao ao decidir em relação ao drizzle vs a outros orms, como o lider de mercado hoje que é o prisma, seria a latencia para o cold start do sistema, ou seja, em serviços de banco de dados que usam estratégias de CDN e serverless.
Existem outros pros e contras, mas essa seria a maior decisão.
Sua arquitetura vai usar algum sistema serverless ou CDN em qualquer ponta?
Vai dar deploy em vercel, amplify, etc? Vai usar qual serviço para banco de dados? Isso que tem que ser pesado.
Se sim, drizzle é a melhor opcao de longe, ganhando em performance até mesmo uma conexão direta com sqlite que um amigo indicou acima.
Se nao, em termos de organização e facilidade de informação e clareza de código, o prisma costuma ser melhor, por isso domina o mercado.

1

Drizzle tem sido a minha opção número um devido a todas as vantagens. Porém este projeto em especial é feito usando Bun completamente. Infelizmente Drizzle, apesar de afirmar ter suporte ao Bun, não funciona nada bem... O drizzle-kit não reconhece a API bun, pedindo para instalar o bettersqlite3, uma dependência desnecessária apenas para satisfazer o drizzle. A pior parte é que eles nunca aprovaram o pull-request que resolve isto.

No fim optei por usar a API do Bun, e ir criando projetos para expandir mais meus conhecimentos com Prisma e até API nativa do SQLite.

1

O que sempre me pergunto é, porque ainda seguir a estratégia de usar ORM. SQL é uma linguagem tão poderosa e o ORM simplifica o que já é simples, como CRUD, por exemplo, mas torna complexo, feio e muitas vezes lento e pesado as consultas que envolvem joins e subqueries complexos.

1

Foi exatamente isso que me fez escolher a API nativa do Bun. Ele simplifica mais do que a API Nativa em C, porém ainda usa SQL. Eu tentei o Drizzle, mas foi tanta dor de cabeça que eu pensei "para que ORM? Uma camada a mais sendo que eu posso tudo nativo e ainda me desafiar". Apesar disso, o pessoal recomendou Prisma e deu vontade de implementar em outro projeto.

1

Usa o prisma que não tem erro, integração completa com typescript, sem preocupação de abrir ou fechar conexão com db, suporte a Postgres, SQLite, mongo, mysql.

Ainda consegue buscar toda tipagem do PrismaClient.

Se quiser tirar alguma dúvida manda um email [email protected]

1

Prisma tem sido o mais recomendado pela a galera, e sem dúvidas deu vontade de tocar, mas em outro projeto. Neste aqui, no fim, optei pela a API do Bun sem ORM. Foi uma ideia interessante de um carinha mais acima que indicou criar sem um ORM.

1
1

Entre os dois, desconsiderando Bun, qual você considera mais eficiente? Eu cheguei a conhecer o TypeOrm, mas nunca usei. O Prisma me parece ser o pioneiro, porém vejo muito indicativos de ser inferiror quando se trata de performance.

Acredito que projetos de larga escala utilize Prisma independentemente por ser algo sólido e robosto, apesar dos tradeoff, mas vale a pena discutir mais sobre.

1

Gostamos de usar o Prisma aqui na empresa, é bastante simples e bem robusto realmente. Mas tem essa questão da performance, todo ORM é pesado em relação à comunicação direta com o banco via SQL, alguns mais pesados que outros e o Prisma é um dos mais pesados.

Para amenizar esse peso a gente compensa na arquitetura, implementando caches, índices, aumentando um pouco de RAM e processador...

1
1

O prisma tem sido muito recomendado, eu dei uma olhada, parece sólido e bem estruturado, entretanto reclamam muito da latência e outras questões. Porém com este link ai que você mandou, cujo eu não encontrei por mim mesmo na doc do bun, me deu uma ideia de um outro projeto usando Prisma, valeu!

2