Thiago Cantero

Tecnologia e Entretenimento

Banco de DadosMatemáticaProgramação

SQL ou NoSQL, eis a questão!

Diante o cenário atual, em que já comentei em outros posts, sobre as modas de frameworks, linguagens com imposição de fabricantes, dentre outros mitos criados análogos à Alegoria da Caverna, de Platão é amplamente difundido no mercado, soluções “milagrosas” de Empresas e/ou Prestadores de Serviço em que baseia-se na narrativa de que o Sistema Transacional, ou melhor, o Modelo Relacional é obsoleto e está em desuso.

Lamento dizer, mas caso você adquiriu este produto (Software), você foi enganado(a). E não estou aqui para dizer que Tecnologia A é melhor em detrimento da Tecnologia B, e sim assegurar que os conceitos fundamentais não se alteram.

Nos dias atuais, o óbvio é desprezado! Bom, chega de introdução e vamos ao assunto!

Todos programadores, estudantes da área correlata conhecem ou já ouviram falar do NoSQL, Sistemas de Gerenciamento de Banco de Dados diverso dos modelos relacionais, criado por Edgar Frank Codd e aperfeiçoado com os Diagramas de Entidade-Relacionamento por Peter Chen. Para tanto vamos fazer uma tabela comparativa e posterior explanar quais são as formas de organização dos dados do Modelo NoSQL.

SQL

NoSQL

ACID (Atomicidade, Consistência, Isolamento e Durabilidade

Não possui ACID

Schema definido

Schemaless

Escalabilidade Vertical (Necessário fazer alteração do Hardware o que implica em mais custos)

Escalabilidade Horizontal (Através de nós, você pode dispor de hardwares mais modestos, e consequentemente menor custo.

Garantia de Consistência dos Dados

Não garante consistência dos Dados

Por trabalhar com Conceitos de Teoria de Conjuntos, Plano e Produto Cartesiano, garante emitir relatórios com mais precisão, pois os dados estão organizados.

Por dar ênfase à disponibilidade, e custo de hardware barato, consegue agregar diferentes fontes de dados integrados, possibilitando a prática de análise em âmbito de uma grande volume de dados (Big Data).

Estas são as características mais evidentes dos dois modelos de organização dos Dados, lembrando que ambos são bons para cada especificidade que lhe convém, vejamos:

Para Sistemas em que necessitam dados consistentes, emissão de relatórios, gestão de negócios, o indicado é o modelo relacional, exemplos: ERP, PDV, Datawarehouse, dentre outros. Já para dados diversos, como IoT (Internet of Things), dados de sensores diversos, soluções para aplicativos móveis, o NoSQL é super indicado.

Agora vamos para as formas que o modelo NoSQL organiza as informações:

Banco de Dados Chave-Valor:

Este modelo baseia-se no modelo de matiz associativa, ou conhecido nos dias atuais como dicionário de dados, nele o modelo atribui um chave, e nesta chave pode ser atribuído vários valores, de maneira que não seja necessário o devido controle da estrutura destes.

Chave

Valor (Outros Atributos)

Estilo_Camisa

Social;Esporte;Casual

Tamanho_Camisa

P;M;G

Cor_Camisa

Amarelo;Ciano;Azul-Oliva

Este tipo de banco é muito utilizado para armazenar Sessões de um Sistema ou Carrinho de Compras, pois o acesso é extremamente rápido, podendo ser implementado sob a forma híbrida (Relacional com Não-relacional).

Produtos que usam essa tecnologia: Oracle NoSQL, Amazon DynamoDB, Redis.

 

Banco de Dados Orientado a Colunas:

Neste modelo, baseado no Big Table da Google, uma grande tabela em que, em sua composição, há várias colunas que organizam as informações de maneira similar ao modelo chave-valor, no entanto possui um indexador por dado pautado na tríplice informação: linha, coluna e timestamp.

Google BigTable Architecture BigTable has three different types of... | Download Scientific Diagram

Foto obtida em: https://www.researchgate.net/figure/Google-BigTable-Architecture-BigTable-has-three-different-types-of-servers-namely-Master_fig2_265062016 acesso em 01 de Setembro de 2021.

Este modelo é muito utilizado em Redes Sociais, pois as consultas destas aplicações demandam certa complexidade, o Facebook faz uso do Apache Cassandra, por exemplo. Na organização de certos nós, como as conversas do menssager, organização dos álbuns de fotos, etc.

 

Banco de Dados Grafos:

Modelo baseado na Teoria dos Grafos de Leonhard Euler em que consiste no conjunto de pontos (grafos), relacionados por vértices (linhas) entre si.

Foto obtida em https://www.facebook.com/metrosp/photos/a.176985385678476/975537292489944/?type=3 acessado em 01 de Setembro de 2021.

Um grande exemplo, para ilustrar de maneira lúdica, é o mapa do Metrô de SP inserido no universo do Super Mario World! 😉

Brincadeiras à parte, este modelo tem função primordial não só em elaboração de mapas, mas sim de sistemas anti-fraude, sistemas de recomendação dentre outras possibilidades. Produtos que utilizam esta tecnologia: Neo4J, Amazon Neptune.

E por fim, temos o Banco de Dados orientado a documentos:

Neste modelo, os dados são armazenados em coleções (se compararmos ao sistema relacional, seria como se fosse um banco) e nestas são armazenados os documentos, em formato JSON, cuja a premissa é dar mais liberdade no forma como os dados serão coletados, não respeitando nenhuma integridade relacional, muito embora na documentação do MongoDB, existe existe a possibilidade de se definir os esquemas para armazenamento de documentos. Confesso que nunca utilizei.

Exemplo de Coleção no MongoDB, acessado no MongoDB Compass.

Um documento, que seria um registro em uma coleção, possui um identificador único, porém sua estrutura pode ser perfeitamente alterada, sem restrições de integridade.

Este banco é muito útil para aplicações web que demandam inserção de dados em grande volume.

 

Bom, este breve post foi suficiente para desmistificar algumas mazelas impostas no mercado da informática na contemporaneidade, com o objetivo de suprir e dar rumos para o entendimento dos conceitos aplicáveis, e sem aquelas máximas de que

“A grama do meu vizinho é mais verde.” – Ditado Popular.

Ambos (SQL e NoSQL) tem muito a nos ofertar, principalmente utilizando-se da maneira correta, e fazer o que é correto é difícil e dispendioso. Espero que tenha sido útil!
Abraços e até a próxima!:D