0% acharam este documento útil (0 voto)
3 visualizações15 páginas

chave valor

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1/ 15

Um banco de dados orientado a chave-valor é um tipo de banco de dados

não relacional, também conhecido como banco de dados NoSQL, que


armazena dados em pares de chave-valor.
Características

Estrutura Armazena dados como pares de chave-valor, onde a chave é um


identificador único

Acesso Projetado para acesso rápido aos dados, permitindo recuperar os


valores diretamente pela chave

Escalabilidade Altamente escalável, pois a distribuição de dados pode ser facilmente


feita entre vários servidores

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

A estrutura chave-valor é fácil de entender e implementar, tornando o banco


de dados orientado à chave e valor uma escolha popular.

Bancos de dados Chave e Valor


Uma estrutura para armazenamento de dados que funciona
de forma muito similar a uma estrutura de dados do tipo
mapa ou um dicionário, onde temos uma chave.

Compartilhe este post:

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.

Como assim chave e valor?


Um banco de dados chave valor é uma estrutura para armazenamento de dados que funciona de
forma muito similar a uma estrutura de dados do tipo mapa ou um dicionário, onde nós temos
uma chave. Esta chave é um identificador para um registro, é como se ela guardasse o endereço
para o valor que procuramos.

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”}}
]
}

Tá, mas onde entra o banco de dados?


Certo, se chegamos até aqui, provavelmente você já entendeu um pouco de como tudo isto
funciona, e talvez até já tenha lidado com mapas e dicionários com algumas linguagens de
programação, mas fica a pergunta, o que diabos isso tudo tem a ver com bancos de dados e o
que são bancos de dados chave e valor, certo?

Bom, tem tudo a ver e você já vai ver por que.

De acordo com a definição da Oracle:

Um banco de dados é uma coleção organizada de informações – ou dados – estruturadas,


normalmente armazenadas eletronicamente em um sistema de computador

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.

Bancos de dados em memória


Quando um banco de dados está configurado para trabalhar em memória, o que ocorre é que
toda a informação é armazenada na memória RAM do servidor. Como tudo, quando falamos de
software (e até em outras situações) existem pontos positivos e negativos.
Como principal ponto positivo, temos a velocidade. Bancos de dados operando exclusivamente
em memória não precisam escrever a informação em disco e o acesso à memória é muito mais
rápido que o acesso a disco, portanto são bancos onde a escrita e a leitura de informações é
muito rápida.

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.

À exceção de cenários específicos, onde realmente podemos estar dispostos a perder as


informações, esta abordagem geralmente é preferível, visto que os tempos de acesso a disco
vem se tornando cada vez mais rápidos à medida que tecnologias como SSD vão surgindo e
sendo aprimoradas. Assim, os contras desta abordagem são cada vez menos relevantes face às
vantagens presentes.

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.

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 importação/exportação em
massa do Amazon S3, Amazon Kinesis Data Streams, Amazon Cloudwatch e muito mais.

Os sistemas de armazenamento de chave-valor constituem a forma


mais simples de banco de dados NoSQL, em que os dados são
organizados na forma de pares de chave e valor. Esses bancos de
dados possuem excelente desempenho e escalabilidade, sendo
frequentemente utilizados para cache, gerenciamento de sessões e
análises em tempo real. Alguns exemplos de armazenamentos de
chave-valor incluem Redis, Amazon DynamoDB e Riak.

O que é Redis NoSQL?

O Redis é um repositório de estrutura de dados de chave-valor na


memória de código aberto, que pode ser usado como um banco de
dados, cache ou corretor de mensagens. O Redis Enterprise é
baseado no Redis de código aberto e é um banco de dados NoSQL,
mas também inclui funcionalidades vitais para torná-lo reforçado
para empresas, com a inclusão do suporte ao Redis. O Redis
Enterprise é infinitamente e linearmente escalável, tem alta
disponibilidade de 5-9s e pode ser facilmente distribuído
geograficamente. O Redis de código aberto é totalmente compatível
com o Redis Enterprise.
Referências

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/

Você também pode gostar