Article image
Andressa Abrantes
Andressa Abrantes26/09/2023 15:01
Share

Banco de Dados NoSQL: Um guia para iniciantes em Banco de Dados Não Relacional

  • #NoSQL
  • #Banco de dados relacional

Banco de dados NoSQL, ou "Not Only SQL", é uma categoria de sistemas de gerenciamento de banco de dados que difere dos tradicionais bancos de dados relacionais. Enquanto os bancos de dados relacionais seguem um modelo de dados tabular com esquemas fixos, os bancos de dados NoSQL oferecem uma abordagem mais flexível e escalável para armazenar e recuperar dados.

image

O que é um banco de dados não relacional?

Um banco de dados não relacional, ou NoSQL, difere dos tradicionais bancos de dados relacionais, pois não utiliza um esquema de tabela fixo. Em vez disso, adota uma estrutura mais flexível, como documentos JSON, pares chave-valor ou grafos, permitindo armazenar informações específicas de forma eficiente.

A principal vantagem do NoSQL é a liberdade que oferece para construir sistemas modernos, pois permite armazenar dados de forma mais adequada às necessidades específicas de cada aplicação. Isso é especialmente útil em cenários como redes sociais, onde é possível vincular documentos, como fotos, diretamente aos perfis dos usuários, em vez de exigir conexões complexas com toda a rede de contatos.

Outra característica importante é que, ao contrário dos bancos de dados relacionais que utilizam a linguagem SQL para manipulação de dados, os bancos de dados NoSQL são acessados e gerenciados através de linguagens de programação, como JavaScript, o que pode aumentar a produtividade dos desenvolvedores.

Em resumo, os bancos de dados NoSQL fornecem uma abordagem flexível, escalável e eficiente para armazenar dados, permitindo que os desenvolvedores criem aplicativos modernos e adaptados às necessidades específicas de cada projeto.

Nesse sentido, os bancos de dados não relacionais têm ganhado muita relevância nos últimos anos, e surgido como opções viáveis. Soluções como o MongoDB, Redis e Cassandra, entre outros, são alternativas interessantes para o dia a dia.

Quais os principais tipos de banco de dados NoSQL?

Os bancos de dados NoSQL têm características próprias no que diz respeito ao gerenciamento das informações.

Atualmente, existem 4 tipos de banco de dados que operam no modelo NoSQL:

  1. Bancos de Dados de Documentos (Document Store): Neste tipo de banco de dados, os dados são armazenados em documentos semelhantes a JSON ou BSON (Binary JSON). Cada documento pode conter informações heterogêneas e não precisa seguir um esquema rígido. Exemplos populares são o MongoDB e o Couchbase.
  2. Bancos de Dados de Chave-Valor (Key-Value Store): Nesse tipo de banco de dados, os dados são armazenados como pares de chave e valor, onde a chave é um identificador único para o valor associado. São altamente eficientes em termos de acesso rápido aos dados. Exemplos incluem o Redis e o Amazon DynamoDB.
  3. Bancos de Dados de Família de Colunas (Column-Family Store): Esses bancos de dados organizam os dados em famílias de colunas, permitindo que cada linha contenha diferentes colunas. São adequados para cenários em que os dados têm estruturas complexas. O Apache Cassandra é um exemplo popular dessa categoria.
  4. Bancos de Dados de Grafos (Graph Database): Bancos de dados de grafos são otimizados para armazenar e recuperar dados interconectados. Eles utilizam a teoria dos grafos para representar e processar relações entre os dados. O Neo4j é um exemplo conhecido de banco de dados de grafos.

image

É importante mencionar que a escolha entre um banco de dados relacional ou NoSQL depende das necessidades específicas do projeto, do volume de dados, dos requisitos de escalabilidade, do modelo de dados e das habilidades da equipe de desenvolvimento.

Além disso, muitas vezes, os sistemas modernos adotam abordagens híbridas, combinando diferentes tipos de bancos de dados para atender às demandas específicas do aplicativo.

Bancos de Dados Orientados à Documentos

Os bancos de dados NoSQL orientados a documentos podem ser considerados como os mais populares atualmente entre as quatro categorias existentes. Para Hurwitz (2016, p. 91) podem ser encontrados dois tipos de bancos de dados orientados a documentos, os já conhecidos repositórios para conteúdo em estilo de documento completo, como arquivos editores de texto, planilhas eletrônicas, páginas web, entre outros e, as bases de dados para armazenar componentes de documentos ou para um conjunto dinâmico de suas partes, as quais abordaremos nesta aula.

Conforme Marquesone (2017, p. 47), esse modelo de banco de dados orientado a documentos é considerado uma extensão do banco de dados NoSQL orientado a chave-valor, oferecendo simplicidade e flexibilidade no gerenciamento dos dados e enriquecendo as possibilidades de consultas.

Segundo Marquesone(2017):

Bancos de dados orientados a documentos são ótimas soluções para armazenamento de registros conter todas as informações relevantes para uma consulta, sem necessitar da criação de joins com atributos variados. Além disso, esses bancos de dados oferecem grande escalabilidade e velocidade de leitura, pois os dados são armazenados em forma desnormalizada. Por esse motivo, um documento armazenado deve conter todas as informações relevantes para uma consulta, sem necessitar da criação de joins.

Seguindo essa abordagem, Medeiros (2014) menciona que os bancos de dados orientados a documentos têm como características conter todas as informações importantes em um único documento, ser livre de esquemas, possuir identificadores únicos universais, possibilitar a consulta de documentos através de métodos avançados de agrupamento e filtragem (MapReduce) e também permitir redundância e inconsistência.

Ainda conforme o autor, ao contrário dos bancos de dados relacionais, os bancos de dados orientados a documentos não fornecem relacionamentos entre os documentos, o que mantém seu design sem esquemas.

{ 
"_id": "5cf0029caff5056591b0ce7d", 
"firstname": "Jane", 
"lastname": "Wu", 
"address": { 
   "street": "1 Circle Rd", 
   "city": "CA", 
   "zip": "90404" 
} 
 "hobbies": ["surfing", "coding"]
}                      

Dessa forma, ao invés de armazenar os dados relacionados em uma área de armazenamento separado, os bancos de dados de documentos integram esses dados ao próprio documento.

image

Exemplo de registro orientado à documento

Bancos de Dados NoSQL orientado à Chave-Valor

Nesse tipo de banco de dados, os dados são armazenados como pares de chave e valor, onde a chave é um identificador único para o valor associado. São altamente eficientes em termos de acesso rápido aos dados.

O valor associado a essa chave pode ser qualquer tipo de dado, como texto, números, objetos ou até mesmo dados binários.

Características do banco de dados orientado à chave e valor:

  • Simplicidade: A estrutura chave-valor é fácil de entender e implementar, tornando o banco de dados orientado à chave e valor uma escolha popular para cenários que exigem simplicidade e alta performance.
  • Escalabilidade: Esses bancos de dados são altamente escaláveis, pois a distribuição de dados pode ser facilmente feita entre vários servidores, permitindo lidar com grandes volumes de dados e cargas de trabalho pesadas.
  • Acesso rápido: Como os dados são acessados diretamente pela chave, a recuperação dos valores é extremamente rápida, tornando esse tipo de banco de dados ideal para aplicações que requerem baixa latência.
  • Flexibilidade de dados: Embora cada chave deva ser única, os valores associados podem ser qualquer tipo de dado, desde strings até estruturas mais complexas como JSON ou até mesmo outros pares chave-valor aninhados.
  • Armazenamento temporário: Esse tipo de banco de dados é muitas vezes utilizado como cache ou para armazenar dados temporários, devido à sua alta velocidade de acesso.
  • Exemplos de uso: São comumente utilizados em cenários como armazenamento de sessões em aplicações web, sistemas de cache, indexação de conteúdo para mecanismos de busca e gerenciamento de informações de configuração.

Embora os bancos de dados orientados à chave e valor tenham muitas vantagens, eles também têm algumas limitações. Devido à natureza simples da estrutura de dados, podem ser menos adequados para consultas complexas ou operações que requerem relacionamento entre diferentes conjuntos de dados. Isso faz com que o uso desses bancos de dados seja mais adequado para aplicações específicas e cargas de trabalho bem definidas.

image

Exemplo de registro orientado à chave-valor

Banco de Dados NoSQL orientado à Grafos

O banco de dados NoSQL orientado a grafos é um tipo de sistema de gerenciamento de banco de dados NoSQL que se baseia na teoria dos grafos para armazenar e processar dados. Nesse modelo, as informações são representadas como um conjunto de nós (vértices) conectados por relacionamentos (arestas).

Cada nó pode conter propriedades ou atributos, enquanto as arestas representam as relações entre os nós.

Características do banco de dados orientado a grafos:

  • Modelo de dados baseado em grafos: Em vez de utilizar tabelas ou documentos, esse tipo de banco de dados utiliza estruturas de grafos, tornando-o especialmente adequado para representar e consultar dados interconectados, como redes sociais, relações de amigos, redes de transporte, entre outros.
  • Eficiência nas consultas: Graças à estrutura de grafos, as consultas de navegação e análise de relacionamentos são altamente eficientes e rápidas, o que torna esse modelo especialmente útil para encontrar padrões, identificar caminhos e realizar análises complexas.
  • Flexibilidade: O modelo de grafos permite adicionar, remover e modificar relações de forma mais natural e flexível do que em bancos de dados relacionais ou orientados a documentos.
  • Desempenho em grafos densos: Quando os dados têm muitas conexões entre nós (grafos densos), os bancos de dados orientados a grafos costumam oferecer desempenho superior em relação a outros modelos.
  • Redução da complexidade: Em alguns cenários, a modelagem de dados como um grafo pode simplificar o design do banco de dados, tornando-o mais intuitivo e de fácil entendimento.

Exemplo de uso do banco de dados orientado a grafos:

Suponha que estamos desenvolvendo um aplicativo para recomendação de filmes com base nas preferências do usuário. Nesse caso, poderíamos utilizar um banco de dados orientado a grafos para representar os usuários como nós e suas preferências e relações de amizade como arestas.

Dessa forma, poderíamos facilmente identificar amigos em comum e sugeri-los como filmes recomendados.

Exemplo de uso de banco de dados orientado a grafos com o Neo4j (uma das opções populares de banco de dados orientado a grafos):

// Criando um nó para representar um usuário 
CREATE (user:Usuario {nome: 'João'}) 

// Criando um nó para representar um filme 
CREATE (filme:Filme {titulo: 'Matrix'}) 

// Criando uma relação de preferência entre o usuário e o filme 
CREATE (user)-[:PREFERE]->(filme)

No exemplo acima, criamos nós para representar um usuário e um filme e uma relação "PREFERE" para indicar que o usuário gosta do filme. Essa representação de dados em um grafo torna fácil encontrar filmes preferidos pelo usuário e fazer recomendações com base em suas conexões.

Os bancos de dados orientados a grafos, como o Neo4j, são amplamente usados em casos de uso que exigem modelagem e análise de dados complexos, especialmente quando há muitas relações entre os dados e consultas de navegação eficientes são necessárias.

Banco de Dados NoSQL orientado à colunas

Os Bancos de Dados de Família de Colunas (Column-Family Store) são um tipo de sistema de gerenciamento de banco de dados NoSQL, que armazena dados em uma estrutura de famílias de colunas em vez de tabelas tradicionais como em bancos de dados relacionais.

Em um banco de dados de família de colunas, os dados são organizados em famílias de colunas, também conhecidas como "coluna de famílias" ou "colunas lógicas". Cada família de colunas agrupa um conjunto de colunas relacionadas.

Essas famílias de colunas podem conter diferentes colunas, permitindo flexibilidade na modelagem de dados. Cada linha (ou registro) armazenada no banco de dados pode ter diferentes colunas, não sendo obrigatório que todas as linhas tenham a mesma estrutura de colunas.

Diferentemente dos bancos de dados relacionais, onde as tabelas têm esquemas rígidos com colunas fixas, os bancos de dados de família de colunas permitem a adição dinâmica de novas colunas sem a necessidade de alterar a estrutura da tabela. Isso faz com que sejam especialmente úteis para cenários em que os dados têm muitas colunas variantes ou quando a estrutura dos dados pode mudar com o tempo.

Exemplo:

O Apache Cassandra é um exemplo popular de banco de dados de família de colunas. Vamos considerar um cenário em que queremos armazenar informações de produtos em um sistema de e-commerce.

Suponha que temos os seguintes produtos com diferentes atributos:

  1. Produto A: Nome: Smartphone, Cor: Preto, Preço: $500, Marca: XYZ
  2. Produto B: Nome: TV, Tamanho: 55 polegadas, Preço: $800, Marca: ABC
  3. Produto C: Nome: Fone de ouvido, Cor: Branco, Preço: $50

Em um banco de dados de família de colunas, poderíamos organizar os dados da seguinte maneira:

Família de colunas "Informações":

| Produto |    Nome        |     Cor       | Preço |  Marca  |
--------------------------------------------------------------
|   A     |   Smartphone   |     Preto     | $500  |   XYZ   |
|   B     |      TV        |  55 polegadas | $800  |   ABC   |
|   C     | Fone de ouvido |    Branco     | $50   |  (null) |

Observe que nem todos os produtos têm todas as colunas preenchidas, e a família de colunas "Informações" agrupa todas as colunas relevantes para descrever os produtos. Podemos adicionar ou remover colunas livremente para cada linha, tornando o banco de dados mais flexível em comparação com os bancos de dados relacionais tradicionais.

Esse tipo de estrutura é particularmente útil em casos de uso como análise de séries temporais, gerenciamento de dados de séries temporais e indexação de grandes volumes de dados.

Quais são os principais SGBs para o NoSQL?

Existem vários sistemas de gerenciamento de bancos de dados NoSQL disponíveis no mercado, cada um com suas características e casos de uso específicos.

Abaixo estão alguns dos principais SGBD NoSQL:

  • MongoDB: É um dos bancos de dados NoSQL mais populares e amplamente utilizado, baseado no modelo de documentos. Armazena dados em documentos BSON (Binary JSON) e permite esquemas flexíveis.
  • Cassandra: Desenvolvido originalmente pelo Facebook e posteriormente doado para a Apache Foundation, o Cassandra é um banco de dados de família de colunas projetado para oferecer alta escalabilidade e disponibilidade.
  • Redis: É um banco de dados de chave-valor de código aberto extremamente rápido e de baixa latência. Ele suporta várias estruturas de dados, como strings, listas, conjuntos, hashes e conjuntos ordenados.
  • Amazon DynamoDB: É um serviço de banco de dados gerenciado pela Amazon Web Services (AWS), baseado no modelo de chave-valor e projetado para escalabilidade e desempenho em nuvem.

Quais são as vantagens em utilizar o NoSQL?

  • Escalabilidade horizontal: Os bancos de dados NoSQL são projetados para lidar com grandes volumes de dados, permitindo a distribuição em vários servidores para aumentar a capacidade de armazenamento e processamento.
  • Esquemas flexíveis: Com a ausência de esquemas rígidos, é possível adicionar ou modificar campos sem interromper o funcionamento do banco de dados.
  • Desempenho e baixa latência: O acesso direto aos dados, principalmente em bancos de dados de chave-valor e documentos, permite respostas rápidas e baixa latência.
  • Modelagem de dados específicos: Cada tipo de banco de dados NoSQL é adequado para diferentes casos de uso, permitindo a modelagem de dados de forma mais adequada às necessidades específicas de cada aplicativo.

Quando utilizar NoSQL?

O uso de um banco de dados NoSQL é recomendado em cenários em que:

  • Os dados não têm uma estrutura fixa ou mudam frequentemente.
  • O sistema precisa de alta escalabilidade e desempenho para lidar com grandes volumes de dados e cargas de trabalho intensas.
  • É necessário armazenar e processar dados interconectados com análises complexas de relacionamentos.

Conclusão

Os bancos de dados NoSQL representam uma evolução significativa na forma como lidamos com o armazenamento e a recuperação de dados. Sua flexibilidade, escalabilidade e desempenho os tornam soluções valiosas para muitos aplicativos modernos. No entanto, é essencial escolher o tipo de banco de dados NoSQL que melhor se adapte aos requisitos específicos de cada projeto, garantindo que a escolha seja alinhada com a estrutura dos dados e as necessidades de escalabilidade. Com a crescente evolução da tecnologia, a utilização do NoSQL continuará a crescer, impulsionando a inovação e a resolução de problemas complexos em diversos campos da computação e da ciência de dados.

Referências

MARQUESONE, R. Big data: técnicas e tecnologias para extração de valor dos dados. São Paulo: Casa do Código, 2017.

Microsoft Learn - Bancos de Dados Não Relacional

Sql e NoSQL: Trabalhando com bancos de dados relacionais e não relacionais

Bancos de Dados NoSQL: um novo paradigma

Share
Comments (2)
Andressa Abrantes
Andressa Abrantes - 26/09/2023 20:51

Muito Obrigada, Wagner!

Wagner Yukimide
Wagner Yukimide - 26/09/2023 16:03

Excelente conteudo.