Uma agulha num palheiro

Encontrar um dado específico num mundo de Big Data pode ser mais difícil do que encontrar uma agulha em um palheiro.

Amazon DynamoDB

O DynamoDB é um banco de dados NoSQL totalmente gerenciado que fornece rapidez e performance. Ele automaticamente distribui os dados e o tráfego das tabelas a um número de servidores que seja capaz de lidar com as requisições dos clientes. Os dados são armazenados em discos Solid State Disks (SSD) e são automaticamente replicados através de múltiplas regiões para prover alta disponibilidade e durabilidade.

O DynamoDB possui as seguintes características:

  •  Provisionamento de transferência: Durante a criação ou edição da tabela, a capacidade de requisição desejada  pode ser especificada. O SGBD se encarrega de alocar os recursos necessários para garantir a capacidade especificada. O provisionamento é feito através da quantidade de unidades de 1KB, que se deseja gravar ou ler.
  • Escalabilidade de armazenamento: Não existe um limite de quantidade de dados armazenados. O serviço automaticamente aloca mais espaço quando necessário.
  • Distribuição Total: O escalonamento horizontal e automatizado replica a mesma tabela sobre uma centena de servidores.
  • Construído à prova de falhas: O processo automático e assíncrono de replicação de dados através de múltiplos servidores espalhados em diferentes regiões garante além de alta disponibilidade também protege os dados contra falhas individuais ou coletivas de hardware.
  • Consistência forte e contadores atômicos: Diferente de outros BD não relacionais, o DynamoDB facilita o desenvolvimento para garantir a consistência forte durante a leitura, retornando sempre o último valor do registro. Além disso, a API fornece chamadas para incremento e decremento de contadores de forma atômica.
  • Flexibilidade: O BD não possui um esquema fixo de dados, o que significa que cada registro de uma tabela pode ter um número diferente  de atributos e de tipos de dados.

Operações no Banco de Dados

A API fornece as operações de criação, atualização e exclusão de tabelas. A atualização da tabela permite o aumento ou diminuição do provisionamento de transferência. Cada tabela é formada por uma chave primária (campo Hash) e pode ou não ter uma variação (campo Range). O conteúdo de um atributo pode ser: número, literal, conjunto de números ou conjunto de literais.  O tamanho em bytes de cada registro é definido pelo somatório do tamanho dos nomes dos campos mais 0 tamanho binário dos dados.

Também são fornecidos métodos para adicionar, atualizar e excluir registros das tabelas. Durante a atualização de itens é possível modificar valores e adicionar ou remover colunas. Para otimizar as buscas, pode ser utilizada uma operação de retorno de um ou múltiplos items através de sua chave primária, inclusive em múltiplas tabelas.

Leitura e consistência

O SGBD mantém múltiplas cópias de cada item para garantir durabilidade, para que isso aconteça após uma operação de alteração de dados é necessário que o dado seja gravado em múltiplos servidores, o que demora algum tempo. Essa demora faz com que o dado fique temporariamente inconsistente, ou seja, caso uma leitura seja feita imediatamente o valor antigo pode ser retornado. Essa é a forma padrão de leitura. Mas em alguns casos, é necessário utilizar uma leitura consistente, para isso o DynamoDB retorna o mais recente que reflita todas as operações de escrita. Essa forma de leitura é mais suscetível a lentidão da rede.

Controle de Concorrência

Em um ambiente multiusuário, em alguns casos, é necessário garantir que a atualização de um usuário não afete a gravação de outro. Para isso, o DynamoDB suporta a escrita condicional, que nada mais é do que a verificação de valor gravado antes de realizar a gravação de um novo valor.  Para contadores de valor, é possível utilizar operações atômicas que incrementam ou decrementam valores sem serem interferidas por outras operações de gravação.

A figura abaixo apresenta uma simulação de como os dados são solicitados e gravados.

Consultas

Para consultas, existem dois mecanismos: Query e Scan. A Query permite a consulta na tabela utilizando o campo Hash e, opcionalmente, um filtro de Range. Esse mecanismo é o mais eficiente de buscar items na tabela.
A operação de Scan é a forma menos eficiente, pois realiza uma varredura em todos os dados da tabela. Nessa operação é possível realizar pesquisa por valores que não são chave, porém isso implica em uma busca comparativa registro-a-registro.
Para uma melhor performance o Scan somente deve ser utilizado quando a Query não for possível. Para diminuir o tempo de responta do Scan e Query, o retorno das requisições são páginas com tamanho máximo de 1MB e a quantidade de registros é delimitada através de parâmetros.

Referência:  http://aws.amazon.com/pt/documentation/dynamodb/

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s