Sistema P2P: DynamoDB
DynamoDB é um marco nos bancos de dados NoSQL. No vídeo a seguir, um de seus evangelizadores descreve rapidamente o banco, os cenários em que deveria ser usado e diversos padrões de projeto para modelagem de dados.
Ao assistir ao vídeo, alguns pontos devem ser ressaltados sobre o DynamoDB especificamente e os bancos NoSQL de forma geral:
- surgiram da necessidade de escalabilidade dos bancos de dados, isto é, da necessidade de lidar com milhões e milhões de entradas de dados, gerados e processados com baixa latência e alta vazão, a despeito de falhas;
- maior escalabilidade implica maior exposição a particionamentos da rede em que o sistema roda, que associado à necessidade de manutenção de alta disponibilidade, implica perda de garantias de consistência (veremos o Teorema CAP adiante);
- Partition keys são as chaves usadas para roteamento dos dados, ou seja, as chaves discutidas anteriormente neste capítulo sobre sistema P2P;
- Sort keys são chaves usadas dentro de cada nó para ordenar os dados na hora de gerar as SSTables (String Sorted Tables), e se usadas em agregados de valores, são equivalentes ao GROUP BY do SQL;
- Lambda functions são funções para processamento de dados executadas em entradas definidas por um pipeline de processamento sem a definição explícita de sockets e portas, em um modelo conhecido como Serverless.
Este modelo é adequado a algumas aplicações, como o carrinho de compras da Amazon.com, aplicação para a qual o DynamoDB foi inicialmente desenvolvido. Nesta aplicação, cada usuário tem um identificador único, recuperado no momento em que faz login no sistema da Amazon. Este identificador único é a chave de particionamento e os dados são o conteúdo do carrinho de compras.
Para lidar com falhas, o conteúdo do carrinho é replicado nos nós sucessivos ao responsável pela dupla chave valor. O carrinho é modificado atomicamente, isto é, sobrescrito por inteiro. A replicação, associada às modificações atômicas, potencializa conflitos, que são identificados comparando-se os vetores de versão (relógios vetoriais) associados a cada valor escrito. No caso de conflitos, as múltiplas cópias concorrentes são apresentadas ao usuário na forma de um carrinho de compras com a união dos itens nos respectivos carrinhos, de forma que o usuário possa corrigi-lo. Na pior das hipóteses, uma compra com erros será feita e exigirá uma atividade compensatória para o usuário, como um brinde.