chave valor
chave valor
chave valor
Flexibilidade Os valores associados podem ser qualquer tipo de dado, desde strings
até estruturas mais complexas
Aplicações Ideal para aplicações que precisam lidar com grandes quantidades de
dados simples, como cachês, sessões, contadores
Bancos de dados chave e valor são uma categoria que abrange uma série de bancos de dados
NoSQL com características similares. Apesar disto, nem todos são iguais, aqui vou explicar um
pouco algumas destas características sem entrar a fundo nas especificidades de cada um.
Para saber mais sobre a definição de um banco de dados NoSQL, as diferenças que eles tem de
um banco de dados relacional sobre o teorema de CAP entre outras coisas, um ótimo livro
chamado NoSQL Distilled. Este livro abrange conceitos iniciais e gerais de bancos de dados
NoSQL e serve como uma ótima base para quem quer aprender um pouco mais.
Utilizando uma analogia simples, pode se dizer que uma estrutura deste tipo é como a recepção
de uma pousada. Ao chegar na pousada e informar a hospedagem a recepção nos entrega uma
chave e esta chave contém o número do nosso quarto e nos permite acessá-lo. De posse dessa
chave sempre conseguimos ter um acesso direto ao nosso quarto.
Trazendo isto um pouco mais perto da linguagem técnica podemos pensar também em
um JSON:
json
{
“quartos”: [
{“306”: {“camas”: 2, “tv”: “LCD”}},
{“206”: {“camas”: 1, “tv”: “LCD”}}
]
}
Nesta categoria se encaixam softwares cujo objetivo é manter dados de forma organizada:
Redis
DynamoDB
Voldemort
Aqui trago somente 3 exemplos de bancos chave e valor, mas esta lista não tem o objetivo de de
ser exaustiva. Este artigo possui uma lista mais completa caso seja do seu interesse.
Estes bancos, embora não trabalhem exclusivamente como chave e valor, desempenham bem
este papel.
Bancos de dados Chave e Valor podem operar de duas formas: Em memória ou de forma
híbrida.
Em se tratando de bancos chave e valor, a leitura de informações se torna muito rápida também
pela forma como é armazenada. Similar a um mapa, a partir da chave, temos acesso direto ao
valor. Então, na maior parte dos casos, podemos dizer que teremos uma complexidade O(1) para
a leitura de informações destes bancos de dados.
Mas, como não existe almoço grátis, existem também alguns lados negativos desta abordagem.
Como as informações estão em memória, e a memória RAM é volátil, caso ocorra alguma falha,
queda de energia, etc. esta informação pode ser inteiramente perdida. Outro ponto importante é
que, usualmente, temos uma quantidade muito menor de memória RAM do que disco nos
servidores, e esta não é facilmente expansível a ponto de podermos ter memória de forma
elástica – inclusive pelo seu custo. Sendo assim, ficamos limitados à quantidade disponível de
memória RAM, tomando cuidado tanto para garantir que estamos usando esta abordagem com
dados que realmente valham a pena (pois não teremos muito espaço) quanto para que esta
informação não represente problema caso perdida – ou que possa ser realimentada de outra
fonte.
Armazenamento Híbrido
Esses bancos geralmente não trabalham somente com armazenamento em disco, especialmente
porque o objetivo deles, em geral, é ter ótima performance. Sendo assim, eles trabalham com
uma abordagem mais híbrida. Esta abordagem funciona de forma que toda informação, quando
é gravada, é persistida no disco; porém, uma parte dela é mantida em memória, para que o
acesso seja rápido.
O que é ou não mantido em memória vai depender da política de cada banco de dados.
Geralmente, pode ser configurada de acordo com o seu caso de uso para definir a forma que
melhor se adequa, podendo ser, por exemplo, os registros mais recentes, os registros mais
acessados, etc.
Ao utilizar esta abordagem, não temos mais a limitação da quantidade de informação com base
na memória RAM, e sim no disco, que geralmente é bem maior. Caso ocorra alguma falha de
hardware ou algo que ocasione a perda dos dados em memória, as informações não serão
perdidas. O ponto negativo disto é que, em situações que fujam ao que foi configurado, teremos
o tempo de acesso ao disco adicionado às nossas buscas.
Modelagem
Quando já temos uma bagagem de um banco relacional, como geralmente é comum, temos a
tendência de pensar a modelagem de dados de uma forma e as queries que iremos fazer
decidimos depois. Isto ocorre pois os bancos relacionais, trabalhando com sql, nos oferecem
uma infinidade de formas de localizar um registro ou uma série de registros.
Em geral isto não ocorre com bancos do tipo chave e valor, o modelo ideal de acesso é quando
temos acesso direto a chave sem precisar realizar nenhum tipo de consulta. Na maior parte dos
bancos, não é possível realizar uma busca dentro do valor. Para exemplificar, imagine uma
biblioteca que organiza os livros de forma que sempre é possível localizá-los se souber a estante
e a prateleira.
json
{
“biblioteca”: {
“A10:3”: [
{
“titulo”: “Harry Potter e a Ordem da Fênix”,
“autor”: “J.K. Rowling”
},
{
“titulo”: “Harry Potter e a Pedra Filosofal”,
“autor”: “J.K. Rowling”
}
],
“A10:12”: [
{
“titulo”: “O Hobbit”,
“autor”: “J.R.R. Tolkien”
},
{
“titulo”: “O Senhor dos Anéis: A Sociedade do Anel”,
“autor”: “J.R.R. Tolkien”
}
]
}
}
Caso saibamos qual a estante e a prateleira, poderemos localizar os livros da série Harry Potter,
por exemplo. Porém, não conseguimos realizar uma consulta para saber em quais estantes estão
os livros de J.R.R. Tolkien.
Portanto, com este tipo de banco de dados, é importante que realizemos a modelagem dos dados
já pensando na maneira como será o acesso deles. É muito importante que se pense muito bem
qual será a chave usada para estes dados, pois ela será essencial na forma de acessá-los.
Outro ponto importante sobre modelagem é o uso de aggregates, porém como isto não é um
tema especifico de bancos chave e valor não vai ser alvo deste artigo, quem tiver interesse pode
ler um pouco mais sobre isto aqui.
Quando usar?
Como já vimos, bancos chave e valor, em geral, possuem um modelo de acesso às informações
que estão salvas que é dependente do conhecimento prévio da chave que guarda estas
informações. Este modelo de acesso faz com que existam cenários onde não conseguimos
utilizar este banco de dados da melhor forma possível. Imagine buscar uma lista de produtos
onde, para exibir a informação de cada produto, precisamos consultar novamente o banco de
dados? Então, essa seria a combinação de uma má modelagem com um use case que não
combina com o tipo de banco.
Comumente, bancos de dados chave e valor são usados para armazenar informações que sejam
uma unidade, tais como dados de sessão de um usuário, preferências de um usuário, carrinho de
compras em e-commerce, etc.
Obviamente, o que indica se o seu caso de uso vai se adequar a um banco de dados desse tipo
depende do seu modelo de negócio e da modelagem do banco e do sistema. Pode ser que, no seu
cenário, seja possível ter uma lista de produtos, por exemplo, associada a uma chave específica,
mas é sempre importante estar atento à forma como vai se buscar os dados face às limitações
deste tipo de banco.
Bancos de dados chave e valor são ferramentas poderosas e não serei eu que irei fugir do clichê
de dizer que com grandes poderes vem grandes responsabilidades. Ao trabalhar com este tipo de
banco, precisamos avaliar com muita calma se ele é o ideal para o nosso caso, Qual a forma de
armazenamento que vamos usar, se o banco que estamos pensando oferece mais de uma opção,
se temos uma ideia da modelagem que iremos aplicar com base nos usos que vamos ter, etc.
Mesmo com tudo isso eles tem muitas vantagens em performance, volume de acessos e dados,
então se ainda não conhecem vale a pena experimentar!
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.
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 importação/exportação em
massa do Amazon S3, Amazon Kinesis Data Streams, Amazon Cloudwatch e muito mais.
www.google.com.br
https://ilegra.com/blog/bancos-de-dados-chave-e-valor/
https://aws.amazon.com/pt/nosql/key-value/
https://redis.io/nosql/what-is-nosql/