4

Como quase todo mundo aqui, você está emocionado. Claro que não são a mesma coisa, senão eles não exisitiriam. Alguns pontos são válidos, eu sou muito contra usar NoSQL, eles nunca se provaram, mas você exagerou quando cruzou a linha dos bancos de dados, vamos por partes.

Cache: qual é o sentido de usar o seu próprio banco de dados pra cache se uma das funções do cache é diminuir a carga no banco? Um banco relacional é um recurso relativamente difícil de se escalar, o ideal é não precisar escalar horizontalmente e em muitos casos, você precisa do mesmo dado em 80% das consultas, então um Redis encaixa muito bem, já com estratégia de TTL embutido pro seu cache ser volátil

ElasticSearch: ser o mesmo algoritmo de busca, não significa ser o mesmo sistema de armazenamento, fora que muitas vezes ele é usado pra logs e você NÃO DEVE manter logs no banco em produção.

DynamoDB: ele não é chave-valor, ele é um monstro, mas que ninguém sabe usar, então, não use se quer um banco chave-valor.

Kafka: você não deve usar o seu banco em mais de um microsserviço, isso vai contra a própria arquitetura, fora que o Postgres não tem o melhor recurso do Kafka, porque ele não é um sistema de mensageria. O zero copy do Kafka é absurdo, ele quase não usa CPU e memória, trabalho em uma multinacional e o Kafka serve a toda a companhia, OLTP e OLAP, sem cair, sem precisar escalar, porque ele simplesmente joga o dado direto na interface de rede, sem copiar pra memória várias vezes

No seu site, você mencionou até o Airflow, não misture OLTP e OLAP, isso é feito também pra deixar o banco pra aplicação, não use seu banco relacional pra gerar relatórios, a menos que a empresa seja de fato pequena e se for pequena, ninguém vai inventar um Airflow.

No geral todas as ferramentas existem, porque se usar um banco relacional pra cada, será um desperdício de recurso, você não pode usar o seu banco pra tudo isso, ele não aguenta

Carregando publicação patrocinada...
3

...a menos que a empresa seja de fato pequena e se for pequena, ninguém vai inventar um Airflow.

Mas o pilar do proposto por nosso colega é justamente esse, empresas e softwares que são pequenos demais pra essa salada de ferramentas aí.

-2

Por que ser contra NoSQL? O NoSQL faz coisas que no relacional custa muito caro ou fica complexo demais de se implementar.

Quer um exemplo simples? Um usuário assina o serviço em Janeiro/2025, o plano que ele assinou mudou o preço em Junho/2025 e em Dezembro/2025, mas ele tem que continuar com o mesmo preço que os outros não tem mais acesso.

No relacional você teria que ficar criando novos registros (novos planos) pra conseguir manter a integridade de dados com "dados passados". No NoSQL, basta embutir o plano diretamente na assinatura do usuário, o que permite um grau de personalização maior ainda (tipo, um usuário específico tem desconto de 10% todos os meses enquanto mantiver o plano ativo).

No relacional resolver ess tipo de situação é um inferno.

1

Nesse caso você se engana muito. Num exemplo real, apagar os planos passados seria um erro, você tem que pensar várias vezes antes de apagar de vez um registro. O ideal seria mesmo criar novos planos com status de disponibilidade diferente. Nesse exemplo, como você teria controle de exatamente quais planos existem e ainda estão ativos pra alguns usuários? A integridade do SQL vale a pena cada dor de cabeça, pelo menos na minha experiência

1

Eu não falei excluir planos passados. Releia meu comentário.

Supondo que um usuário tenha assinado o plano A, com valor de 9,99. A empresa faz uma promoção e 100 usuários ganham o plano A com mensalidade de 5,99 por 6 meses, depois volta a 9,99.

Na sua solução, voce está falando pra ficar criando plano e depois movendo os usuários da promoção pro plano normal, certo? Isso é pensamento de quem não sabe trabalhar em escala.

Imagine um produto com 50 milhões de usuários, com 2.500 tipos de promoção ao longo de 3 anos. Imagina a zona que ficaria com a sua solução.

Com NoSQL, não precisa criar nada, nenhum plano a mais. Só anexar o documento plano no registro do usuário e pronto! Zero dor de cabeça, pode ter 5 bilhões de usuários com 765.000 promoções diferentes, não importa.

Aliás, sabe quem faz exatamente isso que eu comentei? O Google One.

O problema que a maioria dos devs não tem noção de escala. Ai sugerem esse tipo de solução sua, porque não sabem trabalhar com múltiplas ferramentas. Querem usar martelo pra tudo quando se tem chave de fenda, serra etc

1

Querido, você não pensou nem um pouco antes de escrever isso né. Se você quer reajustar o plano promocional, não precisa alterar os clientes em si, é só alterar o plano. Agora nessa sua solução simples, quando tiver um aumento de preço, vai lá e reajusta o valor normal do plano de cada pessoa em 20%, 5bi de atualização contra meia dúzia do SQL. Eu trabalho com bases gigantescas, não vem achar que só você tem experiência não, Oracle bem indexado é um absurdo de performance, se você tiver bons DBAs e ADs na empresa, tudo corre bem.

-1
1

Entendo que nesse caso o conceito de Snapshot seria útil, não? Você "trava" os registros com a informação deles, Plano A com valor X para o usuário 1 (valor travado), reajustes e descontos aplicados a ele, Plano A com valor Y para usuário 2...
Sempre que você atualiza um plano, quem tem esse plano não atualiza, eles ficam com o valor atual, contendo os reajustes e descontos aplicados.

Isso é ruim pra caso a empresa queira fazer um "ajuste geral" mas é bom para fidelizar o cliente.

Ou a ideia de novos planos sempre é a opção, "exemplo com internet" ao invés de no banco chamar o plano de 600mb ele seria 600mb20260302 para que tenha um registro de quando esse plano foi criado, as atualizações nele vão impactar todos os clientes cadastrados nele e os novos planos de "600mb" vão ter nomes com registros diferentes, pode haver uma "coluna" com o valor de mb do plano para "ajuste em massa", extinção e migração do plano caso necessário.

Me corrija se eu estiver errado em meu ponto de visita por favor.

1

O que você sugeri não passa de bacalhau. Pessima ideia quando se trabalha com escala.

Leia meu outro comentário que você vai entender que com NoSQL isso se resolveria muito mais fácil do que com esse bacalhau horrível 😂