O que é um banco de dados de chave-valor?
Um banco de dados de chave-valor é um tipo de banco de dados não relacional, também conhecido como banco de dados NoSQL, que usa um método simples de chave-valor para armazenar dados. Ele armazena dados como um conjunto de pares de chave-valor em que uma chave atua como um identificador exclusivo. Tanto as chaves quanto os valores podem ser qualquer coisa, desde objetos simples até objetos compostos complexos. Os bancos de dados de chave-valor (ou armazenamentos de chave-valor) são altamente particionáveis e permitem escalabilidade horizontal em um nível que outros tipos de bancos de dados não conseguem alcançar.
Quais são as vantagens dos bancos de dados de chave-valor
Bancos de dados relacionais tradicionais (bancos de dados SQL) armazenam dados na forma de tabelas contendo linhas e colunas. Eles impõem uma estrutura rígida aos dados e não são ideais para todos os casos de uso. Por outro lado, bancos de dados de chave-valor são bancos de dados NoSQL. Eles permitem esquemas flexíveis de banco de dados e melhor desempenho em escala para determinados casos de uso. As vantagens dos armazenamentos de chave-valor incluem:
Escalabilidade
Como toda consulta do usuário exige interação de dados, os bancos de dados geralmente podem se tornar um gargalo no desempenho da aplicação. Várias estratégias para resolver o problema, como replicação e fragmentação, aumentam a complexidade do código da aplicação. Muitos bancos de dados de chave-valor fornecem suporte integrado para recursos avançados de escalabilidade. Eles escalam horizontalmente e distribuem automaticamente os dados entre os servidores para reduzir os gargalos em um único servidor.
Facilidade de uso
Os bancos de dados de chave-valor seguem o paradigma orientado a objetos que permite aos desenvolvedores mapear objetos do mundo real diretamente para objetos de software. Várias linguagens de programação, como Java, também seguem o mesmo paradigma. Em vez de mapear seus objetos de código para várias tabelas subjacentes, os engenheiros podem criar pares de chave-valor que correspondam a seus objetos de código. Isso torna os armazenamentos de chave-valor mais intuitivos para os desenvolvedores usarem.
Performance
Os bancos de dados de chave-valor processam operações constantes de leitura e gravação com chamadas de servidor de baixa sobrecarga. A latência aprimorada e o tempo de resposta reduzido proporcionam melhor desempenho em grande escala. Eles são baseados em estruturas simples de tabela única, em vez de várias tabelas inter-relacionadas. Diferentemente dos bancos de dados relacionais, os bancos de dados de chave-valor não precisam realizar junções de tabelas que consomem muitos recursos, o que os torna muito mais rápidos.
Quais são os casos de uso de bancos de dados de chave-valor
Você pode usar sistemas de banco de dados de chave-valor como banco de dados principal para sua aplicação ou para lidar com requisitos de nicho. Abaixo, apresentamos alguns exemplos de casos de uso de banco de dados de chave-valor.
Gerenciamento de sessões
Uma aplicação orientada por sessão, como uma aplicação da Web, começa uma sessão quando o usuário faz login em uma aplicação e fica ativo até que o usuário se desconecte ou a sessão expire. Durante este período, a aplicação armazena todos os atributos da sessão do usuário na memória principal ou em um banco de dados. Os dados da sessão do usuário podem incluir informações de perfil, mensagens, dados e temas personalizados, recomendações, promoções direcionadas e descontos.
Cada sessão de usuário tem um identificador exclusivo. Os dados de sessão nunca são consultados por nada além de uma chave primária, então um armazenamento de chave-valor rápido é mais adequado para dados de sessão. Em termos gerais, os bancos de dados de chave-valor podem proporcionar menor sobrecarga por página do que bancos de dados relacionais.
Carrinho de compras
Um site de comércio eletrônico pode receber bilhões de pedidos por segundo durante a temporada de compras natalinas. Um banco de dados de chave-valor pode lidar com a escalabilidade de grandes quantidades de dados e volumes extremamente altos de mudanças de estado enquanto também atende a milhões de usuários simultâneos por meio do processamento e armazenamento distribuído. Armazenamentos de chave-valor também têm redundância incorporada, que podem lidar com a perda de nós de armazenamento.
Mecanismo de armazenamento de metadados
Seu armazenamento de chave-valor pode atuar como uma camada de armazenamento subjacente para níveis mais altos de acesso aos dados. Por exemplo, você pode escalar o throughput e a simultaneidade para workloads de mídia e entretenimento, como streaming de vídeo em tempo real e conteúdo interativo. Você também pode ampliar sua plataforma de jogos com dados de jogadores, histórico de sessões e tabelas de classificação para milhões de usuários simultâneos.
Armazenamento em cache
Você pode usar um banco de dados de chave-valor para armazenar dados temporariamente para uma recuperação mais rápida. Por exemplo, aplicações de mídia social podem armazenar dados acessados com frequência, como conteúdo do feed de notícias. Os sistemas de cache de dados na memória também usam armazenamentos de chave-valor para acelerar as respostas das aplicações.
Como funcionam os bancos de dados de chave-valor
Os bancos de dados de chave-valor funcionam organizando todos os dados como um conjunto de pares de chave-valor. Você pode pensar na chave como uma pergunta e no valor como a resposta à pergunta. No exemplo abaixo, a chave primária é composta por duas chaves, ID do Produto e Tipo. O ID do Produto é a chave de partição que descreve a partição na qual o item será armazenado. O Tipo é a chave de classificação, que determina a ordem na qual os itens serão armazenados no disco. A combinação da chave de partição e da chave de classificação forma uma chave primária exclusiva, que é mapeada para um único valor no banco de dados.
Neste exemplo, o livro de objetos de dados tem atributos como título, autor e data de publicação. Cada objeto de dados do livro tem uma chave chamada BookID. Você pode vincular diretamente o BookID e o objeto de livro associado no armazenamento de chave-valor. Além disso, você pode recuperar dados pesquisando o BookID na tabela. Além disso, cada item tem seu próprio esquema, tornando os armazenamentos de chave-valor altamente flexíveis para armazenar dados de estruturas variadas.
Quais são os recursos dos bancos de dados de chave-valor
Dependendo da solução escolhida, seu armazenamento de chave-valor pode fornecer vários recursos adicionais, conforme listado abaixo.
Suporte para tipos de dados complexos
Os armazenamentos de chave-valor oferecem suporte para tipos de dados definidos, como números inteiros e texto. No entanto, muitos deles também podem suportar objetos mais complexos, como matrizes, dicionários aninhados, imagens, vídeos e dados semiestruturados. Ao fornecer ao banco de dados mais informações sobre seus dados, há espaço para mais otimização do desempenho de consultas e armazenamento.
Não há necessidade de junções de tabelas
Os bancos de dados de chave-valor não precisam realizar nenhuma junção de tabelas que consuma muitos recursos. Sua flexibilidade acomoda todas as informações necessárias em uma única tabela. Esse é um dos motivos pelos quais os armazenamentos de chave-valor funcionam tão bem.
Chaves classificadas
Um armazenamento de chave-valor pode classificar as chaves para que os dados sejam armazenados sistematicamente e para implementar o particionamento. Por exemplo, as chaves podem ser classificadas:
- Alfabeticamente ou numericamente
- Cronologicamente
- Por tamanho dos dados
Considere um repositório de chave-valor que usa o endereço de e-mail do cliente como chave exclusiva. Os endereços de e-mail podem ser classificados em ordem alfabética, para que todos os dados das listas de e-mail A-J sejam armazenados no servidor 1, K-S no servidor 2 e assim por diante.
Suporte de chave secundária
Alguns armazenamentos de chave-valor permitem que você defina duas ou mais chaves ou índices secundários diferentes para acessar os mesmos dados. Por exemplo, você pode armazenar dados do cliente por endereço de e-mail e número de telefone chave.
Replicação
Muitos armazenamentos de chave-valor oferecem suporte integrado à replicação copiando dados automaticamente em vários nós de armazenamento. Isso ajuda na recuperação automática de desastres; você ainda tem seus dados em caso de falha no servidor.
Particionamento
O particionamento é como você distribui dados entre os nós. Muitos bancos de dados de chave-valor oferecem opções de particionamento padrão. Alguns também oferecem a opção de definir parâmetros de entrada para suas partições. Por exemplo, você pode particionar chaves numéricas em grupos de 1000. Bancos de dados avançados de chave-valor também fornecem suporte automático para distribuir seu banco de dados de chave-valor em várias localizações geográficas. Isso melhora a disponibilidade e a confiabilidade da aplicação porque você pode responder a consultas próximas à localização do usuário.
Suporte ACID
Atomicidade, consistência, isolamento e durabilidade (ACID) são propriedades do banco de dados que garantem a precisão e a confiabilidade dos dados em todas as circunstâncias. Por exemplo, se você estiver fazendo várias alterações em seus dados em uma sequência, a atomicidade exige que todas as alterações ocorram em ordem. Se uma mudança falhar, tudo falhará.
Bancos de dados de chave-valor avançados fornecem suporte nativo do lado do servidor para ACID. Isso simplifica a experiência do desenvolvedor ao fazer alterações de tudo ou nada em vários itens dentro e entre tabelas. Com o suporte a transações, os desenvolvedores podem estender a escala, o desempenho e os benefícios empresariais para um conjunto mais amplo de workloads de missão crítica.
Quais são as limitações dos bancos de dados de chave-valor
Os bancos de dados de chave-valor exigem algumas compensações, como acontece com qualquer tipo de opção de tecnologia.
Ausência de consultas complexas
Como os bancos de dados de chave-valor não oferecem suporte a consultas complexas, os desenvolvedores devem contornar isso no código. As operações de dados são feitas principalmente por meio de termos de linguagem de consulta simples, como get, put e delete. Há limitações na quantidade de dados que você pode filtrar e classificar antes de acessá-los.
Má gestão do esquema
O design do armazenamento de chave-valor não impõe um esquema aos desenvolvedores. Qualquer pessoa pode modificar o esquema no programa de banco de dados. As equipes de desenvolvimento precisam planejar o modelo de dados sistematicamente para evitar problemas de longo prazo. A falta de um esquema rígido também significa que a aplicação é responsável pela interpretação adequada dos dados que consome, geralmente chamado de “esquema em leitura”.
Como a AWS pode oferecer suporte aos seus requisitos de banco de dados de chave-valor
O Amazon DynamoDB é um dos bancos de dados de chave-valor mais populares, projetado para executar aplicações de alto desempenho em qualquer escala. É um banco de dados totalmente gerenciado, multirregional e multiativo que oferece recursos como:
- Escalabilidade ilimitada, incluindo escala até zero, com latência consistente de um dígito em milissegundos.
- Sem servidor, sem atualizações de versão, sem janelas de manutenção e sem servidores ou software para gerenciar.
- Projetado para oferecer disponibilidade de 99,999%, com o DynamoDB Global Tables fornecendo replicação ativa para que você possa criar aplicações distribuídas globalmente com desempenho de leitura local.
- Altamente seguro e confiável com criptografia padrão em repouso, recuperação pontual, backup e restauração sob demanda e muito mais.
- Fácil de usar com integrações com vários serviços da AWS, incluindo compatibilidade com Amazon DynamoDB Accelerator (DAX), importação/exportação em massa do Amazon S3, Amazon Kinesis Data Streams, Amazon Cloudwatch e muito mais.
Com este tutorial detalhado sobre como criar e consultar uma tabela NoSQL, você pode começar a usar o DynamoDB em 10 minutos. Comece a usar bancos de dados de chave-valor na AWS criando uma conta gratuita hoje mesmo!