O que você deveria saber sobre banco de dados relacional e não relacional

Banco de dados

Mais de 2,5 quintiliões de bytes de dados são criados todos os dias, e só tem previsão de crescimento a partir daí segundo o ultimo relatório da DOMO. Até o final 2020, estima-se que 1,7MB de dados serão criados a cada segundo para cada pessoa na Terra. Você consegue ver a importância do banco de dados?

Empresas tem investido literalmente bilhões de dólares em infraestrutura para não só armazenar mas também buscar, atualizar e deletar essa quantidade simplesmente absurda de dados.

Vamos então entender o que são, pra que servem e qual são os principais tipos de bancos de dados que temos a nossa disposição atualmente, e descobrir qual é o banco de dados ideal para o seu próximo projeto.

O que é um banco de dados?

Na mais simples das definições, um banco de dados é apenas uma forma de armazenar e organizar informações. Idealmente, essa informação é armazenada de forma ordenada para ajudar na busca.

Você pode imaginar um banco de dados com se fosse uma biblioteca de livros, cada livro é organizado segundo algum tipo de categoria, seja por gênero, autor, lingua em que foi escrito, etc.

E cada biblioteca tem um sistema de organização que depende de fatores como tamanho da biblioteca, que tipo de livros ela armazena, quantos visitantes ela recebe e por ai vai.

Banco de dados são estruturas muito similares. Escolher o melhor tipo para o seu projeto e organizar seus dados da melhor forma possível farão toda a diferença.

Hoje temos dois tipos principais de banco de dados:

  • banco de dados relacionais.
  • banco de dados não relacionais(NoSQL). 

Para falar sobre esses dois, preciso introduzir o que é SQL.

O que é SQL?

Do inglês SQL (Structured Query Language), ou em bom português Linguagem de Consulta Estruturada. 

É uma linguagem de programação usada para criar uma conexão entre dados armazenados em um Sistema de Gerenciamento de Banco de Dados Relacional (SGBDR’s).

Sim, SQL é uma linguagem de programação, mas não de propósito geral como Java, PHP, Python e outras. SQL é uma linguagem especifica para comunicação com banco de dados.

A sintaxe SQL parece com o inglês, o que simplifica a escrita, leitura e interpretação.

Um exemplo de código em SQL seria assim, esse código recupera todos os nomes e emails da tabela Users, por exemplo.

SELECT username, email FROM Users;

Muitos SGBDR’s usam SQL (e variações de SQL) para acessar os dados em tabelas. 

Um SGBDR é um programa que lhe permite criar, atualizar e administrar base de dados relacionais. 

MySQL, por exemplo, é SGBDR.

Banco de dados relacional

Um banco de dados relacional é um tipo de banco de dados. Ele armazena e fornece acesso à dados que tenham relação entre si. Daí o nome ‘relacional’. Essas relações são construidas utilizando tabelas, similares a essa:

Idusernameemailpassword
1user1user1@example.com!*&JGs1ˆ&
2user2user2@example.com($%ˆgˆ8r*7
3user3user3@example.com$%rtg&nd
  • Cada coluna representa a informação reference a um dado, por exemplo na coluna email você vai ter todos os emails referentes a todos os usuários.
  • Em cada linha você tem a informação completa de cada usuário, por exemplo, na linha 2 nós temos todos os dados do user2 (username, email e password).

Em um banco de dados relacional, cada linha na tabela é um registro com uma ID exclusiva chamada chave primária. 

É a partir dessa chave primária que conseguimos criar as relações entre dados e tabelas.

Por exemplo, podemos ter uma segunda tabela com endereços. E conseguimos gerar uma relação entre elas através do ID do usuário.

IdaddresscountryuserID
1Main Av, 500Brazil1
2Second Av, 300Portugal2
3Third Av, 100Mozambique3

Com essa segunda tabela é simples de reconhecer que o endereço com Id 1 é do usuário com Id 1, endereço com Id 2 pertence ao usuário com Id 2 e endereço com Id 3 pertence ao usuário com Id 3.

Se quiséssemos recuperar o endereço do user1 através de uma Querry SQL, poderíamos fazer assim:

SELECT * FROM Address WHERE userId = 1;

Se você gostou dessa estrutura e forma de organização dos dados, tenho uma excelente notícia para você, existem diversas opções gratuitas que você pode escolher para trabalhar. Vou citar os principais aqui em baixo.

Os principais Sistemas de Gerenciamento de Banco de Dados Relacional

MySQL

Segundo eles próprios “O MySQL, é o mais popular sistema de gestão de base de dados Open Source SQL”. Apoiado pela Oracle.

Como principais vantagens do MySQL eu posso citar:

  • Facilidade de uso, SQL sem modificações. 
  • Barato, e oferece versão a community Free.
  • Garante a segurança dos dados com características excepcionais de protecção de dados.
  • Grande comunidade de desenvolvedores.

Utilizei o MySQL nesse projeto onde mostrei como conectar Python ao MySQL.

Dificuldades em escalabilidade e desempenho fraco envolvendo tabelas com muitos dados podem ser citados com alguns dos pontos fracos desse sistema.

PostgreSQL

PostgreSQL é também um SGBDR de código aberto, mas ele não é controlado por nenhuma corporação.

O PostgreSQL fornece muitos dos mesmos benefícios do MySQL. Ele é de fácil utilização, barato, confiável, e tem uma ampla comunidade de desenvolvedores.

PostgreSQL tem uma perfomance típica inferior a outros RDBMSs, como o MySQL, e embora tenha sido mais utilizado nos últimos anos, PostgreSQL fica para trás em termos de popularidade.

OracleDB

Muitos dos principais bancos do mundo operam com o sistema da Oracle, já que a Oracle oferece uma forte mistura de tecnologias e softwares de negócios robustos e pré-integrados, incluindo os recursos projetados especialmente para bancos.

A Oracle oferece uma versão gratuita chamada Oracle Database Express Edition (XE).

A desvantagem talvez seja o alto custo. Mas você está pagando pela alta performance, um excelente atendimento ao cliente, e outros vários benefícios, o alto custo pode ser justificado.

SQL Server

A Microsoft também oferece O SGBDR. Com uma versão de entrada gratuita, que por sinal tem exatamente o mesmo nome da concorrência, Express.

Também se concentra nas grandes aplicações empresariais, com grande infraestrutura.

Assim como o sistema da Oracle, ele também não de código aberto.

O lado ruim, também fica por conta do alto custo e o fato de ser necessário investir em um Bom hardware para rodar as versões mais recentes.

SQLite

SQLite é um popular banco de dados SQL open source. Ele pode armazenar uma base de dados inteira em um único arquivo. 

Uma das vantagens mais significativas que isso proporciona é que todos os dados podem ser armazenados localmente sem a necessidade de conectar seu banco de dados a um servidor. Muito utilizado em aplicações mobile (Android e iOS).

Banco de dados não relacional (NoSQL)

Os banco de dados NoSQL (também conhecidos como “not only SQL”) não são constituídos de tabelas, eles armazenam dados de forma diferente das tabelas relacionais. 

Eles apareceram no final dos anos 2000, quando o custo de armazenamento diminuiu drasticamente. E foram-se os dias em que era necessário criar um modelo de dados complexo e difícil de gerenciar, simplesmente com o propósito de reduzir a duplicação de dados. 

Os banco de dados NoSQL vêm em uma variedade de tipos baseados em seu modelo de dados. Os principais tipos são document, key-value, wide-column, e graph. Eles fornecem esquemas flexíveis e escalam facilmente com grandes quantidades de dados e altas cargas de usuários.

Um mal-entendido comum é achar que banco de dados NoSQL ou banco de dados não relacionais não armazenam bem os dados com relacionamento. Banco de dados NoSQL podem armazenar dados com relacionamento – eles apenas os armazenam de forma diferente do que banco de dados relacionais armazenam. 

Na verdade, quando comparados com uma base de dados SQL, muitos acham que modelar dados de relacionamento em banco de dados NoSQL é mais fácil do que em banco de dados SQL, porque os dados relacionados não precisam ser divididos entre tabelas.

Os modelos de dados NoSQL permitem que os dados relacionados sejam aninhados dentro de uma única estrutura de dados.

Quais são os Tipos de Banco de Dados Não Relacional?

Ao longo do tempo, quatro tipos principais de banco de dados NoSQL surgiram:

  • Banco de dados orientados a documentos
  • Banco de dados do tipo Key value
  • Banco de dados de famílias de colunas.
  • Banco de dados de grafos

Vamos examinar cada tipo.

Banco de dados orientados a documentos

Banco de dados NoSQL do tipo documents armazenam dados em estruturas similares aos objetos JSON (JavaScript Object Notation). Algo parecido com isso:

{
    "_id" : ObjectId("5ea3f99880aeb46f07d550fe"),
    "id" : 1,
    "password" : "pbkdf2_sha256$150000$2WAquqg5uny4$9mVb1OqdkvvRubzHay0I3EzODn7i37icn6GQVHLqtiY=",
   "is_superuser" : true,
    "username" : "debug",
    "first_name" : "Debug",
    "last_name" : "Everything",
    "email" : 'admin@debugeverything.com',
    "date_joined" : ISODate("2020-04-25T08:49:28.513Z")
}

Cada documento contém pares de campos e valores. Os valores podem ser tipicamente uma variedade de tipos, incluindo coisas como strings, números, booleans, arrays ou objetos.

Devido à sua variedade de tipos de valores de campo e linguagens de consulta poderosas, banco de dados de documentos são ótimos para uma grande variedade de casos de uso e podem ser usados como um banco de dados de propósito geral.

Banco de dados do tipo Key value

Um banco de dados NoSQL  do tipo Key-Value armazena dados como um conjunto de Chaves e Valores, também conhecido como um array associativo, organizado em linhas.

Um exemplo de como poderia se parecer um banco de dados de uma loja de eletrônicos.

As bases de dados de valores-chave são ótimas para casos de uso onde você precisa armazenar grandes quantidades de dados mas não precisa realizar consultas complexas para recuperá-los. Um uso bem comum é o armazenamento das preferências do usuário ou do cache.

Banco de dados de famílias de colunas

Nesse tipo de banco de dados NoSQL, as colunas em cada linha estão contidas dentro dessa linha. Uma imagem pra explicar melhor:

Cada família de colunas é um contêiner de linhas em uma tabela. A chave identifica a linha que consiste de múltiplas colunas.

As linhas não precisam ter o mesmo número de colunas e tão pouco conter as mesma informações. As colunas podem ser adicionadas a qualquer linha a qualquer momento sem a necessidade de adicioná-la a outras linhas.

O banco de dados em colunas são ótimos para quando você precisa armazenar grandes quantidades de dados e você pode prever quais serão os seus padrões de consulta

Frequentemente esse tipo de banco de dados é usado para armazenar dados de perfil do usuário.

Banco de dados de grafos

Os nós e relacionamentos são os constituintes essenciais desse tipo de base de dados. Um nó representa uma entidade. Um relacionamento representa como dois nós estão associados.

Os banco de dados de grafos utilizam nós que contêm listas de registros de relacionamento. Estes registros representam relações com outros nós, o que elimina a (demorada) operação de busca e comparação encontrada em banco de dados relacionais.

As relações entre os nós são pré-determinadas, ou seja, não são determinadas no momento da consulta.

Principais banco de dados NoSQL 

MongoDB

O mais famoso dos banco de dados não relacionais. 

MongoDB armazena dados em documentos flexíveis, do tipo JSON, o que significa que os campos podem variar de documento para documento e a estrutura de dados pode ser alterada ao longo do tempo.

Além disso, você receberá benefícios como suporte total a índices, alta disponibilidade através de WANs e LANs, juntamente com fácil replicação, escalabilidade horizontal, consultas ricas baseadas em documentos, flexibilidade no processamento e agregação de dados, juntamente com treinamento, suporte e consulta adequados.

O MongoDB é de uso livre e gratuito.

Redis

Redis, que significa Remote Dictionary Server, é um banco de dados de armazenamento rápido, de código aberto e com valores do tipo key-value em memória.

Um dos principais atrativos do uso do Redis é a sua velocidade. Os dados Redis são mantidos em memória, enquanto outros bancos de dados armazenam dados em disco ou em SSDs, o que permite à Redis acessar informações muito mais rapidamente. A Redis só armazenará dados em disco quando for necessário persistir.

Cassandra

Cassandra Caso você esteja procurando por alta disponibilidade e escalabilidade sem comprometer o desempenho, então a base de dados Cassandra é o ideal para você.

O Apache Cassandra é um software livre e de código aberto, distribuído, que utiliza o padrão wide column.

Cassandra é altamente escalável e de alto desempenho, projetado para lidar com grandes quantidades de dados em muitos servidores.

Neo4j

O Neo4j é um banco de dados NoSQL de grafos nativo, de código aberto, que fornece um backend transacional compatível com ACID para suas aplicações.

Ele é referido como nativo porque implementa eficientemente o modelo de gráfico de propriedade até o nível de armazenamento. Isto significa que os dados são armazenados exatamente como você os armazena, e ele usa ponteiros para navegar e atravessar o grafo.

Conclusão

Acredito que fomos capazer de esclarecer as diferencás entre SQL e NoSQL.
Grande parte dos projetos ainda é baseado nesse primeiro modelo. Mas empresas grandes já estão migrando algumas das suas bases de dados para sistemas NoSQL.

Pode ser que ele se torne um novo padrão no futuro, ou ele pode continuar co-existindo com SQL. Só o tempo dirá.

Não se esqueça de se inscrever para receber todo novo e exclusivo conteúdo!

Até a próxima.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

0 Comments