O que é NoSQL?

Alto desempenho, banco de dados não relacionais com modelos de dados flexíveis

O que são bancos de dados NoSQL?

Bancos de dados NoSQL são criados para modelos de dados específicos e têm esquemas flexíveis para a criação de aplicativos modernos. Os bancos de dados NoSQL são amplamente reconhecidos por sua facilidade de desenvolvimento, funcionalidade e desempenho em escala. Usam vários modelos de dados, incluindo documento, gráfico, chave-valor, memória e pesquisa. Esta página inclui recursos para ajudá-lo a compreender melhor os bancos de dados NoSQL e a começar a usá-lo.

Durante décadas, o modelo de dados predominante usado para desenvolvimento de aplicativos foi o modelo usado por bancos de dados relacionais, como Oracle, DB2, SQL Server, MySQL e PostgreSQL. Somente em meados dos anos 2000 que outros modelos de dados começaram a ser adotados e ter um uso mais significativo. Para diferenciar e categorizar essas novas classes de bancos e modelos de dados, o termo “NoSQL” foi criado. Muitas vezes, o termo “NoSQL” é usado de forma intercambiável com “não relacional”.


Novidades dos bancos de dados não relacionais de uso específico da AWS

Como funciona um banco de dados NoSQL (não relacional)?

Os bancos de dados NoSQL usam diversos modelos para acessar e gerenciar dados, como documento, gráfico, chave-valor, em memória e pesquisa. Esses tipos de banco de dados são otimizados especificamente para aplicativos que exigem modelos de grande volume de dados, baixa latência e flexibilidade. Esses requisitos são atendidos mediante o relaxamento de algumas restrições de consistência de dados dos outros bancos.

Considere o exemplo de modelagem do esquema para um banco de dados simples de livros:

  • Em um banco de dados relacional, um registro de livro é normalmente disfarçado (ou “normalizado”) e armazenado em tabelas separadas, e os relacionamentos são definidos por restrições de chave primária e externa. Neste exemplo, a tabela Livros têm colunas para ISBN, Título do livro e Número da edição, a tabela Autores têm colunas para IDdoAutor e Nome do autor e finalmente a tabela Autor-ISBN tem colunas para IDdoAutor e ISBN. O modelo relacional é projetado para permitir que o banco de dados imponha a integridade referencial entre as tabelas no banco de dados, normalizadas para reduzir a redundância e geralmente otimizadas para armazenamento.
  • Em um banco de dados NoSQL, um registro de livro é normalmente armazenado como um documento JSON. Para cada livro, o item, ISBN, Título do livro, Número de edição, Nome do autor e IDdoAutor são armazenados como atributos em um único documento. Neste modelo, os dados são otimizados para desenvolvimento intuitivo e escalabilidade horizontal.

Por que você deve usar um bancos de dados NoSQL?

Os bancos de dados NoSQL são ideais para muitos aplicativos modernos, como dispositivos móveis, Web e jogos, que exigem bancos de dados flexíveis, escalonáveis, de alto desempenho e altamente funcionais para proporcionar ótimas experiências aos usuários.

  • Flexibilidade: os bancos de dados NoSQL geralmente fornecem esquemas flexíveis que permitem um desenvolvimento mais rápido e iterativo. O modelo de dados flexível torna os bancos de dados NoSQL ideais para dados semiestruturados e não estruturados.
  • Escalabilidade: os bancos de dados NoSQL geralmente são projetados para serem escalonados horizontalmente usando clusters distribuídos de hardware, em vez de escaloná-los verticalmente adicionando servidores caros e robustos. Alguns provedores de nuvem lidam com essas operações nos bastidores como um serviço totalmente gerenciado.
  • Alto desempenho: o banco de dados NoSQL é otimizado para modelos de dados específicos (como documento, chave-valor e gráfico) e padrões de acesso que proporcionam maior desempenho do que quando se tenta realizar uma funcionalidade semelhante com bancos de dados relacionais.
  • Altamente funcional: os bancos de dados NoSQL fornecem APIs e tipos de dados altamente funcionais criados especificamente para cada um de seus respectivos modelos de dados.

Tipos de bancos de dados NoSQL

nosql_keyvalue_g

Chave-valor: os bancos de dados de chave-valor são altamente particionáveis e permitem escalonamento horizontal em escalas que outros tipos de bancos de dados não conseguem alcançar. Exemplos de uso como jogos, tecnologia de publicidade e IoT se encaixam particularmente bem ao modelo de dados de chave-valor. O Amazon DynamoDB foi projetado para proporcionar uma latência consistente de um dígito de milissegundo para qualquer escala de cargas de trabalho. Esse desempenho consistente teve grande peso no motivo pelo qual o recurso Snapchat Stories, que inclui a maior carga de trabalho de gravação de armazenamento do Snapchat, mudou para o DynamoDB.

nosql_document_g

Documento: alguns desenvolvedores não pensam em seu modelo de dados em termos de linhas e colunas desnormalizadas. Normalmente, na camada do aplicativo, os dados são representados como um documento JSON, pois é mais intuitivo para os desenvolvedores pensarem em seu modelo de dados como um documento. A popularidade dos bancos de dados de documentos cresceu porque os desenvolvedores podem manter a persistência dos dados em um banco de dados usando o mesmo formato de modelo de documento que eles usam no código do aplicativo. O DynamoDB e o MongoDB são bancos de dados de documentos populares que fornecem APIs poderosas e intuitivas para desenvolvimento flexível e ágil.

nosql_graph_g

Gráfico: a finalidade de um banco de dados gráfico é facilitar a criação e a execução de aplicativos que funcionam com conjuntos de dados altamente conectados. Os casos típicos de uso de um banco de dados gráfico incluem redes sociais, mecanismos de recomendação, detecção de fraudes e gráficos de conhecimento. O Amazon Neptune é um serviço totalmente gerenciado de banco de dados gráfico. O Neptune suporta o modelo Property Graph e o Resource Description Framework (RDF), proporcionando a escolha de duas APIs gráficas: TinkerPop e RDF/SPARQL. Os bancos de dados gráficos populares incluem o Neo4j e Giraph.

nosql_inmemory_g

Em memória: aplicativos de jogos e tecnologia de publicidade têm como exemplos de uso placares de líderes, armazenamentos de sessões e análises em tempo real que exigem tempos de resposta em microssegundos e podem ter grandes picos de tráfego a qualquer momento. O Amazon ElastiCache oferece o Memcached e o Redis para atender às cargas de trabalho de baixa latência e alta taxa de transferência, como o McDonald’s, que não podem ser servidas com armazenamentos de dados baseados em disco. O Amazon DynamoDB Accelerator (DAX) é outro exemplo de armazenamento de dados construído para uma finalidade. O DAX faz o DynamoDB ler em uma ordem de grandeza mais rápida.

nosql_search_g

Pesquisar: muitos registros de saída de aplicativos ajudam os desenvolvedores a solucionar problemas. O Amazon Elasticsearch Service (Amazon ES) é construído especificamente para fornecer visualizações e análises quase em tempo real de dados gerados por máquina ao indexar, agregar e pesquisar registros e métricas semiestruturadas. O Amazon ES também é um poderoso mecanismo de pesquisa de alto desempenho para casos de uso de pesquisa de texto completo. A Expedia está usando mais de 150 domínios do Amazon ES, 30 TB de dados e 30 bilhões de documentos para diversos casos de uso de missão crítica, desde o monitoramento operacional e solução de problemas até o rastreamento de pilha de aplicativo distribuído e otimização de preços.

Bancos de dados SQL (relacional) vs. NoSQL (não relacional)

Embora existam muitos tipos de bancos de dados NoSQL com recursos variados, a tabela a seguir mostra algumas das diferenças entre os bancos de dados SQL e NoSQL.

  Bancos de dados relacionais Bancos de dados NoSQL

Cargas de trabalho ideais

Bancos de dados relacionais são projetados para aplicativos transacionais e fortemente consistentes de processamento de transações online (OLTP) e são bons para processamento analítico online (OLAP). Os bancos de dados de chave-valor, documento, gráfico e em memória do NoSQL são projetados para OLTP para vários padrões de acesso aos dados que incluem aplicativos de baixa latência. Os bancos de dados de pesquisa do NoSQL são projetados para análise de dados semiestruturados. 
Modelo de dados

O modelo relacional normaliza dados em tabelas, compostas por linhas e colunas. Um esquema define estritamente tabelas, colunas, índices, relações entre tabelas e outros elementos do banco de dados. O banco de dados impõe a integridade referencial nos relacionamentos entre as tabelas. 

Os bancos de dados NoSQL fornecem diversos modelos de dados que incluem documento, gráfico, chave-valor, em memória e pesquisa.
Propriedades ACID

Bancos de dados relacionais fornecem propriedades de atomicidade, consistência, isolamento e durabilidade (ACID):

  • A atomicidade exige uma transação para executar completamente ou não é executada de forma alguma.
  • A consistência exige que, quando uma transação é confirmada, os dados devem estar em conformidade com o esquema do banco de dados.
  • O isolamento exige que as transações simultâneas sejam executadas separadamente umas das outras.
  • A resiliência exige a capacidade de se recuperar de uma falha do sistema ou falta de energia inesperada para o último estado conhecido.
Os bancos de dados NoSQL geralmente fazem compensações relaxando algumas das propriedades ACID dos bancos de dados relacionais para um modelo de dados mais flexível que pode ser escalonado horizontalmente. Isso torna os bancos de dados NoSQL uma excelente opção para casos de uso de baixa latência e alta taxa de transferência que precisam ser dimensionados horizontalmente além das limitações de uma única instância.
Desempenho O desempenho normalmente depende do subsistema do disco. A otimização de consultas, índices e estrutura de tabela é necessária para alcançar máximo desempenho. O desempenho geralmente é uma função do tamanho do cluster do hardware subjacente, da latência de rede e da aplicação que faz a chamada.
Escala Os bancos de dados relacionais geralmente escalonam verticalmente de tamanho ao aumentar os recursos de computação do hardware, ou escalonam horizontalmente o tamanho ao adicionar réplicas para cargas de trabalho somente leitura. Os bancos de dados NoSQL normalmente são particionáveis porque os padrões de acesso à chave-valor podem escalonar horizontalmente o tamanho usando arquitetura distribuída para aumentar a taxa de transferência que fornece desempenho consistente em escala quase ilimitada.
APIs As solicitações para armazenar e recuperar dados são comunicadas usando consultas compatíveis com uma Structured Query Language (SQL – Linguagem de consultas estruturadas). Essas consultas são analisadas e executadas pelo banco de dados relacional. As APIs baseadas em objetos permitem que desenvolvedores de aplicativos armazenem e restaurem facilmente estruturas de dados na memória. As chaves de partição permitem que os aplicativos procurem pares de chave-valor, conjuntos de colunas ou documentos semiestruturados que contenham objetos e atributos de aplicativos serializados.

Comparação entre as terminologias do SQL e do NoSQL

A tabela a seguir compara a terminologia usada pelos bancos de dados NoSQL selecionados com a terminologia usada pelos bancos de dados SQL.

SQL MongoDB DynamoDB Cassandra  Couchbase
Tabela Coleta Tabela Tabela Bucket de dados
Linha Documento Item Linha Documento
Coluna Campo Atributo Coluna Campo
Chave primária ObjectId Chave primária
Chave primária ID do documento
Índice Índice Índice secundário Índice Índice
Visualização Visualização Índice secundário global Visualização materializada Visualização
Tabela ou objeto aninhado Documento incorporado Mapa Mapa Mapa
Matriz Matriz Lista Lista Lista
Lista
Lista
Chave primária

Conceitos básicos do DynamoDB

É fácil começar a usar o DynamoDB. Veja a página Conceitos básicos do DynamoDB para criar a sua primeira tabela com apenas alguns cliques. Também é possível baixar um whitepaper da AWS para conhecer as práticas recomendadas para migrar cargas de trabalho de um sistema de gerenciamento de banco de dados relacional (RDBMS) para o DynamoDB.

O que é o Amazon DynamoDB?