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

[Dúvida] Qual database para minha aplicação?

Bom dia galera, sou novo aqui e gostaria de aproveitar a oportunidade para coletar algumas opniões e chegar a uma conclusão...

Estou iniciando um projeto de uma API que irá receber configurações de um sistema específico (no formato JSON) e armazenálos em um banco de dados para posterior consultas e tratamento destes dados. Neste ponto, minha maior dúvida é, faria sentido talvez trabalhar com um banco de dados não relacional? Atualmente tenho experiência e trabalho com os bancos SQL Server, Oracle e Postgres.

Minha área de atuação é um ERP específico com uma linguagem própria, estou me aventurando no mundo WEB e pra mim muita coisa ainda é novidade rs.

Agreço a todos que puderem compartilhar o seu ponto de vista com as vantagens e desvantagens!

Carregando publicação patrocinada...
3

Com tão poucas informações fica difícil ajudar de verdade.

Lembre-se que a maioria dos ERPs o DB é só um mecanismo de storage, você não precisa de um SGDB altamente capacitado para quem trabalha diretamente com o DB. Claro que você pode estar fazendo um ERP que você deixa um usuário ficar mexendo direto no DB e aí certas features são importantes, mas se fizer isso ou usar o DB como API, você é tão louco que qualquer escolha será ruim.

Se fala em ERP, eu diria que não tem muito como errar em usar um banco de dados relacional e nem precisa usar tudo o que ele oferece.

NoSQL é para casos muito específicos, por quem só faz algo para estar na moda e pôr no currículo, ou para algo que é tão simples que qualquer %#@&!$* dá conta do recado muito bem. Então pode ser que muito eventualmente alguma parte do seu ERP possa se beneficiar do NoSQL, mas minha experiência mostra que isso é raro.

Mesmo que precise de algo com mais liberdade, um relacional consegue entregar com alguma pequena desvantagem o que o NoSQL oferece, e pode muito bem ser o suficiente.

Antes de tudo tem que se perguntar se pode pagar pela licença ou não. Se pode, SQL Server ou Oracle são as melhores opções entre todos os DBs. Oracle já foi muito mais avançado, mas hoje nem é tanto assim. O SQL Server sempre deu conta do recado em todos os casos que o Oracle seria usado, mas ele perde em um ou outro detalhe, mas também tem algumas vantagens.

Se deve ser um gratuito então as opções mais populares são 2 ou 3.

Vou começar por esse terceiro que anda ficando um pouco mais popular, algumas empresas mais high profile já estão enxergando que ele pode ser bem útil, e estão fazendo ferramentas para ele ter menos desvantagens, mantendo as vantagens. Ele é o SQLite. Sim, para a maioria dos ERPs ele é suficiente. Vai ter que saber usá-lo muito bem obviamente, mas não tem solução mais simples e mais performática que ele. Ele tem dificuldade, mas existe solução, se você tiver muita escrita verdadeiramente concorrente, o que é altamente incomum em um ERP. Só não garanto que deveria usá-lo porque se está fazendo essa pergunta e sem dar detalhes para podermos auxiliar melhor, é possível que você se enrole com ele. O que eu falava há muitos anos e era chamado de louco agora tem gente grande enxergando o mesmo. Os pequenos, justamemte os que mais poderiam se beneficiar com o SQLite, ainda me acham louco, e esta é a história da minha vida.

A opção mais popular é o MariaDB (ou MySQL), que atende quase todos os casos muito bem, e é quase impossível não ser adequado para um ERP. Eu não gosto muito dele usando o InnoDB, prefiro usar com o Aria, acho que tem mais a cara dele. Se for para usar o InnoDB então acho que quer outro sistema, embora a maioria das pessoas não pensa assim. Pra mim esse banco de dados vence pela simplicidade (não tanto quanto o SQLite), e isso se perde um pouco quando usa o InnoDB (que algumas pessoas usam por um motivo apenas ou porque é o default).

A opção gratuita mais completa em features, que escala muito bem, desde que a pessoa saiba o que faz, que pode substituir qualquer demanda de NoSQL de forma muito próxima, e que tem aumentado a popularidade é o PostgreSQL. Ele é o mais próximo do que teria em um Oracle ou SQL Server, ainda que fique muito atraás em alguns quesitos. Mas será que você precisa de tudo isso?

Todos possuem desvantagens, algum preço você pagará em qualquer um deles. Todos podem te atender bem sabendo o que faz (o SQLite tem algumas sitguações que é mais arriscado). você terá que testar todos nas condições reais do que você usará ou acreditar em uma pessoa aleatórias na internet.

Mas fiquei curioso sobre essa linguagem própria. Uma que eu sou fissurado por linguagens e sempre quis fazer a minha, provavelmente para depois fazer um ERP, então se pudesse falar mais dela, eu adoraria. A outra questão, se você fez a linguagem, porque está com tanta dificuldade em escolher um banco de dados. Foi por isso que eu nem sugeri fazer o seu próprio, que é algo que eu gostaria de fazer.

Com mais dados eu poderia dar mais detalhes, mas sem você testar de forma real pelo menos os dois mais proeminentes que são fáceis de selecionar, não vai ajudar muito, é quase uni duni tê.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

1

Top demais sua análise, mas o que estou iniciando não seria um ERP e sim uma API simples que recebe dados de um ERP, para ser mais específico, algumas métricas que serão utilizadas para composição de relatórios e gráficos no futuro, algo mais para controle. Em minha mente o Postgres sempre foi a melhor opção mas gostaria de entender o que me traria de benefício utilizar um NoSQL, até porque minha cabeça é 100% relacional, não entendo muito bem o comportamente do NoSQL, posso estar sendo muito ignorante aqui, mas para mim é tipo programação estruturada e orientada a objeto, são dois mundos com suas vantagens e desvantagens...

Agora falando do ERP, eu trabalho com o ERP TOTVS Protheus®, em uma software house voltada para este ERP, desenvolvendo customizações para clientes que utilizam este ERP. A linguagem utilizada é o ADVPL e recentemente iniciaram um projeto de uma nova linguagem chamada TL++, com a ideia de tornar o ADVPL (estruturado) em uma linguagem mais atual.

Caso tenha interesse em conhecer mais sobre, segue o link de ambas linguagens:
ADVPL: https://tdn.totvs.com/display/tec/AdvPL
TL++: https://tdn.totvs.com/display/tec/TLPP

1
1

Se você não tem um motivo muito claro baseado em métricas e análises pelo qual deveria usar noSQL, então escolha SEMPRE o SQL seja mysql ou postgress, o noSQL não justifica sua complexidade de gerenciar relacionamentos e tabelas complexas, a não ser que essa seja a diferença entre ter a aplicação no ar ou não.

1

O Postgresql tem o tipo JSON e te dá a maior parte das funcionalidades do MongoDB, com a vantagem de ser uma base que também é relacional e te oferece ACID completo.

E isto não é de hoje: dez anos atrás eu já escrevia sobre isto no meu blog ( https://devkico.itexto.com.br/?p=2098 ).

E se não me engano a mesma funcionalidade você vai encontrar no MySQL também.

Dado que você precisa levar em consideração o fator custo de operação caso vá ser implantado em uma cloud como uma base gerenciada, eu iria para MySQL ou PostgreSQL caso precise tirar proveito de algo relacional.

Caso não seja o caso, você pode usar outras alternativas como o Firebase ou DynamoDB da AWS. Mas nestes casos, já adianto: CUIDADO com o custo.

Dica quente como lava: inclua índices onde for buscar. Caso contrário o custo vai pras alturas (vai ser feito scan completo da base de dados) e isto fica além de caro muito lento.