1.1 Como funciona um banco de dados NoSQL

Os bancos de dados NoSQL usam uma variedade de modelos de dados para acessar e manipular dados. Esses tipos de bancos de dados são otimizados para aplicativos com uso intensivo de dados que exigem baixa latência e modelos de dados flexíveis. Tudo isso é alcançado suavizando os rígidos requisitos de consistência de dados que são típicos de outros tipos de bancos de dados.

Considere um exemplo de modelagem de esquema para um banco de dados simples de livros.

  • Em um banco de dados relacional, uma entrada de livro geralmente é dividida em várias partes (ou "normalizada") e armazenada em tabelas separadas cujas relações são definidas por restrições de chave primária e estrangeira. Neste exemplo, a tabela Books tem as colunas ISBN , Book Title e "ISBN"e"Author"a tabela Author-ISBN, eAuthor NameeAuthor IDas colunasAuthorstabelaNumberEdition. O modelo relacional é projetado para manter a integridade referencial entre tabelas em um banco de dados. Os dados são normalizados para reduzir a redundância e geralmente são otimizados para armazenamento.

  • Em um banco de dados NoSQL, um registro de livro normalmente é armazenado como um documento JSON. Para cada livro, ou elemento, os valores de ISBN , Título do livro , Número da edição , Nome do autor e ID do autor são armazenados como atributos em um único documento. Nesse modelo, os dados são otimizados para desenvolvimento intuitivo e escalabilidade horizontal.

1.2 Para que podem ser usados ​​os bancos de dados NoSQL?

Os bancos de dados NoSQL são adequados para muitos aplicativos modernos, como dispositivos móveis, jogos e aplicativos da Web, que exigem bancos de dados flexíveis e escaláveis ​​com alto desempenho e funcionalidade avançada que podem fornecer máxima usabilidade.

  • Flexibilidade . Normalmente, os bancos de dados NoSQL oferecem esquemas flexíveis, permitindo um desenvolvimento mais rápido e permitindo a implementação incremental. Devido ao uso de modelos de dados flexíveis, os bancos de dados NoSQL são adequados para dados semiestruturados e não estruturados.

  • Escalabilidade . Os bancos de dados NoSQL são projetados para escalar usando clusters de hardware distribuídos, não adicionando servidores caros e confiáveis. Alguns provedores de serviços em nuvem executam essas operações em segundo plano, fornecendo um serviço totalmente gerenciado.

  • Alto desempenho . Os bancos de dados NoSQL são otimizados para modelos de dados específicos e padrões de acesso para alcançar um desempenho mais alto do que os bancos de dados relacionais.

  • Ampla funcionalidade . Os bancos de dados NoSQL fornecem APIs e tipos de dados avançados que são projetados especificamente para seus respectivos modelos de dados.

1.3 Tipos de bancos de dados NoSQL

Bancos de dados NoSQL são usados ​​onde não é muito conveniente armazenar dados na forma de tabelas. Portanto, eles são armazenados em formatos muito diferentes. Normalmente, existem 6 tipos principais de dados de bancos de dados NoSQL.

DB baseado em pares chave-valor

Bancos de dados que usam pares chave-valor suportam alta separabilidade e fornecem dimensionamento horizontal sem precedentes, não alcançável com outros tipos de bancos de dados. Bons casos de uso para bancos de dados de valor-chave são aplicativos de jogos, publicidade e IoT.

Por exemplo, o Amazon DynamoDB garante uma operação estável do banco de dados com um atraso de não mais do que alguns milissegundos em qualquer escala. Esse desempenho robusto foi o principal motivo da migração do Snapchat Stories para o DynamoDB, já que esse recurso do Snapchat está associado à maior carga de gravação de armazenamento.

Documento

No código do aplicativo, os dados geralmente são representados como um objeto ou documento em um formato semelhante ao JSON porque é um modelo de dados eficiente e intuitivo para desenvolvedores. Os bancos de dados de documentos permitem que os desenvolvedores armazenem e consultem dados em um banco de dados usando o mesmo modelo de documento que usam no código do aplicativo. A natureza flexível, semiestruturada e hierárquica dos documentos e bancos de dados de documentos permite que eles evoluam com as necessidades do aplicativo.

O modelo de documento funciona bem em catálogos, perfis de usuário e sistemas de gerenciamento de conteúdo, onde cada documento é único e muda com o tempo. Amazon DocumentDB (compatível com MongoDB) e MongoDB são bancos de dados de documentos comuns que fornecem APIs funcionais e intuitivas para desenvolvimento ágil.

Bancos de dados gráficos

Os bancos de dados gráficos facilitam o desenvolvimento e a execução de aplicativos que trabalham com conjuntos de dados complexos. Exemplos típicos de uso de bancos de dados gráficos são redes sociais, serviços de recomendação, sistemas de detecção de fraudes e gráficos de conhecimento. O Amazon Neptune é um serviço de banco de dados gráfico totalmente gerenciado. O Neptune suporta o Property Graph e o Resource Description Framework (RDF), fornecendo duas APIs de gráfico para escolher: TinkerPop e RDF/SPARQL. Bancos de dados de gráficos comuns incluem Neo4j e Giraph.

banco de dados na memória

Muitas vezes, os aplicativos de jogos e publicidade usam tabelas de classificação, armazenamento de sessão e análise em tempo real. Esses recursos exigem uma resposta em alguns microssegundos, enquanto um aumento acentuado no tráfego é possível a qualquer momento.

O Amazon MemoryDB for Redis é um serviço de banco de dados na memória confiável e compatível com Redis que reduz a latência de leitura para milissegundos e fornece durabilidade em várias zonas de disponibilidade. O MemoryDB foi desenvolvido especificamente para desempenho e confiabilidade ultra-altos, portanto, pode ser usado como o banco de dados principal para aplicativos modernos baseados em microsserviços.

O Amazon ElastiCache é um serviço de cache na memória compatível com Redis e Memcached totalmente gerenciado para atender cargas de trabalho de baixa latência e alto throughput. Clientes como o Tinder, que precisam que seus aplicativos respondam em tempo real, estão usando sistemas de armazenamento na memória em vez de em disco. Outro exemplo de data warehouse específico é o Amazon DynamoDB Accelerator (DAX). O DAX permite que o DynamoDB leia dados várias vezes mais rápido.

Bancos de dados de pesquisa

Muitos aplicativos geram logs para tornar mais fácil para os desenvolvedores solucionar e corrigir problemas. O Amazon OpenSearch é um serviço específico para visualização e análise quase em tempo real de fluxos de dados gerados automaticamente por meio da indexação, agregação e pesquisa de logs e métricas semiestruturados.

Além disso, o Amazon OpenSearch é um serviço de pesquisa de texto completo poderoso e de alto desempenho. A Expedia utiliza mais de 150 domínios de serviço Amazon OpenSearch, 30 TB de dados e 30 bilhões de documentos para uma variedade de casos de uso de missão crítica, desde monitoramento operacional e solução de problemas até rastreamento de pilha de aplicativos distribuídos e otimização de custos.

1.4 Comparação de bancos de dados SQL (relacionais) e NoSQL (não relacionais)

O NoSQL tem muitas vantagens, portanto, pelo menos em teoria, você deve saber que a ferramenta de que precisa já existe antes de escrevê-la você mesmo. Abaixo, darei uma comparação dos bancos de dados NoSQL e SQL:

Cargas de trabalho adequadas

Os bancos de dados relacionais são projetados para aplicativos de processamento de transações em tempo real (OLTP) transacionais e altamente consistentes e são adequados para processamento analítico em tempo real (OLAP).

Os bancos de dados NoSQL são projetados para funcionar com uma variedade de padrões de acesso a dados, incluindo aplicativos de baixa latência. Os bancos de dados de pesquisa NoSQL são projetados para análise de dados semiestruturados.

Modelo de dados

O modelo relacional normaliza os dados e os transforma em tabelas compostas por linhas e colunas. Um esquema define rigidamente tabelas, linhas, colunas, índices, relacionamentos entre tabelas e outros elementos do banco de dados. Esse banco de dados garante a integridade dos dados de referência nas relações entre as tabelas.

Os bancos de dados NoSQL fornecem uma variedade de modelos de dados, como pares chave-valor, documentos e gráficos otimizados para alto desempenho e escalabilidade.

Propriedades ACID

Os bancos de dados relacionais fornecem um conjunto de propriedades ACID: atomicidade, consistência, isolamento, confiabilidade.

  • A atomicidade exige que uma transação seja executada em sua totalidade ou não.
  • Consistência significa que assim que uma transação for concluída, os dados devem estar de acordo com o esquema do banco de dados.
  • O isolamento requer que as transações paralelas sejam executadas separadamente umas das outras.
  • Confiabilidade refere-se à capacidade de recuperar o último estado salvo após uma falha inesperada do sistema ou queda de energia.

Os bancos de dados NoSQL geralmente oferecem um compromisso, relaxando os requisitos rígidos das propriedades ACID em favor de um modelo de dados mais flexível que permite o dimensionamento horizontal. Isso torna o NoSQL uma ótima opção para casos de uso de alta largura de banda e baixa latência que exigem dimensionamento horizontal além de uma única instância.

Desempenho

O desempenho depende principalmente do subsistema de disco. A otimização de consultas, índices e estrutura de tabela geralmente é necessária para desempenho máximo.

O desempenho geralmente depende do tamanho do cluster de hardware subjacente, da latência da rede e do aplicativo de chamada.

Dimensionamento

Os bancos de dados relacionais geralmente são dimensionados aumentando o poder de computação do hardware ou adicionando cópias separadas para cargas de trabalho de leitura.

Os bancos de dados NoSQL geralmente suportam alta separabilidade por meio de padrões de acesso escaláveis ​​baseados em uma arquitetura distribuída. Isso melhora o rendimento e oferece desempenho consistente em escala quase ilimitada.

API

As solicitações de gravação e recuperação de dados são gravadas em SQL. Essas consultas são analisadas e executadas por um banco de dados relacional.

As APIs orientadas a objetos permitem que os desenvolvedores de aplicativos gravem e recuperem facilmente estruturas de dados. Usando chaves de partição, os aplicativos podem pesquisar pares chave-valor, conjuntos de colunas ou documentos semiestruturados contendo objetos seriais e atributos do aplicativo.