Como escolher o modelo de Banco de Dados
- #Banco de dados relacional
- #NoSQL
Importância da escolha "certa"
Um Banco de Dados é uma das peças chaves de um projeto de software e a escolha do seu modelo tem um impacto gigantesco no desenvolvimento e manutenção do sistema. Uma escolha bem feita pode facilita a vida dos desenvolvedores e dos usuários, mas saibam que não existe uma escolha perfeita, cada modelo tem as suas vantagens e desvantagens.
Já de início saibam que sistemas grandes ou as vezes pequenos costuma utilizar mais de um modelo para extrair as vantagens de cada um deles, mesmo que seja para o mesmo sistema. Dito isso leiam os pontos abaixo para avaliar quando utilizar cada um deles.
Tipos
Existem várias formas de diferenciar um banco de dados do outro, nesse ponto vou fazer a diferenciação entre duas possibilidades
- Relacional
- O modelo relacional costuma ser o mais conhecido e usado no mundo. Ele baseia-se na organização de dados baseado em tabelas e relacionamentos entre elas, geralmente escolhido quando a consistência dos dados é essencial e é um dado estruturado.
- Vantagens: consistência, confiabilidade, segurança, padronização, normalização, velocidade das querys é alta.
- Desvantagens: maior complexidade na seu desenvolvimento inicial, custo alto de armazenamento, escalabilidade baixa e pouca flexibilidade na alteração do seu Schema.
- NoSQL
- NoSQl (Not only SQL - não somente SQL) é um modelo não relacional feito para atender aquela demanda de dados que possuem ineficiência ao serem armazenados no modelo relacional, como imagens.
- Vantanges: alta flexibilidade, baixo custo de armazanemento, alta escalabilidade, eficientes para dados não estruturados.
- Desvantagens: sem normalização de dados, sem garantia de integridade dos dados, menos estável, a velocidade da query costuma ser menor do quê no modelo relacional.
Extra
- Object Storage
- Outra possível classificação de modelo que resolvi colocar como um separado devido a seu crescente uso. Esse modelo vem crescendo o seu uso devido a capacidade de armazenamento de dados de multimídia a baixo custo que exigem alta escalabilidade. Ele pode ser implementado
- Vantagens: custo de armazenamento muito baixo, alta escalabilidade, schema-less, dimensionamento elástico, costumam implementar criptografia do lado do servidor.
- Desvantagens: para alterar uma parte do objeto é preciso salvar um novo objeto inteiro sobre o anterior, baixa velocidade da query, alta latência. A consistência é garantida eventualmente, ou seja, não é possível garantir a consistência em um dado momento, só se sabe que em algum momento os dados vão se tornar consistentes.
Resolvi trazer o último como um extra em relação a uma possível forma de classificação, isso porque existem várias formas de classificar um banco de dados, sendo a diferenciação SQL e NoSQL a mais comum. Contudo vocês podem pensar em diferencia-lo pelo forma que salvam e organizam os dados (tabelas, arquivos, grafos, objetos, ...), responsabilidade administrativa (local, on premise, cloud), distribuição (centralizado ou distribuído) e assim por diante.
Dica:
No último artigo tem uma dica para não ter problema com o armazenamento de datas e horas. Link: https://web.digitalinnovation.one/articles/problemas-ao-armazenar-datas-no-banco-de-dados?back=%2Farticles&page=1&order=oldest
Fontes:
- https://www.ibm.com/blogs/cloud-computing/2017/02/01/object-storage-benefits-myths-and-options/
- https://blogs.oracle.com/lad-cloud-experts/pt/o-que-e-object-storage-como-eu-utilizo
- https://www.digitalocean.com/community/tutorials/servicos-de-armazenamento-de-objetos-versus-armazenamento-em-blocos-pt
- https://cio.com.br/tendencias/vantagens-e-desvantagens-do-armazenamento-de-objetos/https://pt.stackoverflow.com/questions/191919/banco-de-dados-n%C3%A3o-relacionais-vs-banco-de-dados-relacionais
- https://www.guru99.com/introduction-to-database-sql.html