Práticas recomendadas para armazenar itens e atributos grandes
O Amazon DynamoDB limita o tamanho de cada item que pode ser armazenado em uma tabela a 400 KB (consulte Service quotas, conta e cotas de tabela no Amazon DynamoDB). Se a aplicação precisa armazenar mais dados em um item do que o limite de tamanho permitido pelo DynamoDB, você poderá tentar compactar um ou mais atributos grandes ou dividir o item em vários itens (indexados devidamente por chaves de classificação). Você pode armazenar o item como um objeto no Amazon Simple Storage Service (Amazon S3) e armazenar o identificador do objeto do Amazon S3 no item do DynamoDB.
Como prática recomendada, é necessário utilizar o parâmetro ReturnConsumedCapacity
ao gravar itens para monitorar e alertar sobre tamanhos de itens que se aproximam do limite máximo de 400 KB. Se o tamanho máximo de itens for excedido, as tentativas de gravação serão malsucedidas. É possível reduzir os problemas de tamanho de item monitorando e emitindo alertas sobre os tamanhos antes que eles afetem a aplicação.
Compactar valores de atributos grandes
A compactação de valores de atributos grandes pode permitir que eles se ajustem aos limites do item no DynamoDB e reduzam os custos de armazenamento. Os algoritmos de compactação, como GZIP ou LZO, geram resultado binário que, depois, você pode armazenar em um tipo de atributo Binary
dentro do item.
Por exemplo, pense em uma tabela que armazene mensagens gravadas por usuários do fórum. Essas mensagens geralmente contêm longas strings de texto, que são candidatas à compactação. Embora a compactação possa reduzir o tamanho dos itens, a desvantagem é que os valores dos atributos compactados não são úteis para filtragem.
Para obter um código de exemplo que demonstra como compactar essas mensagens no DynamoDB, consulte:
Particionamento vertical
Uma solução alternativa para lidar com itens grandes é dividi-los em blocos menores de dados e associar todos os itens relevantes pelo valor da chave de partição. Depois, é possível usar uma string de chave de classificação para identificar as informações associadas armazenadas ao lado dela. Ao fazer isso e ter vários itens agrupados pelo mesmo valor de chave de partição, você está criando um conjunto de itens.
Para ter mais informações sobre essa abordagem, consulte:
Armazenar valores de atributos grandes no Amazon S3
Conforme já mencionado, você também pode usar o Amazon S3 para armazenar valores de atributos grandes que não podem caber em um item do DynamoDB. Você pode armazená-los como um objeto no Amazon S3 e armazenar o identificador de objeto no item do DynamoDB.
Você também pode usar o suporte de metadados do objeto no Amazon S3 para fornecer um link para o item pai no DynamoDB. Armazene o valor da chave primária do item como metadados de objeto do Amazon S3 no Amazon S3. Fazer isso normalmente ajuda com a manutenção de objetos do Amazon S3.
Por exemplo, considere a tabela ProductCatalog
na seção Criar tabelas e carregar dados para exemplos de código no DynamoDB. Os itens nessa tabela armazenam informações sobre preço do item, descrição, autores de livros e dimensões para outros produtos. Se você quisesse armazenar uma imagem de cada produto muito grande para se ajustar em um item, poderia armazenar as imagens no Amazon S3, em vez de no DynamoDB.
Ao implementar essa estratégia, lembre-se sempre do seguinte:
-
O DynamoDB não oferece suporte a transações que cruzam o Amazon S3 e o DynamoDB. Portanto, sua aplicação deve lidar com quaisquer falhas, o que poderia incluir a limpeza de objetos órfãos do Amazon S3.
-
O Amazon S3 limita o tamanho dos identificadores de objetos. Então, você deve organizar seus dados de um modo que não permita a geração excessiva de identificadores de objeto nem viole outras restrições do Amazon S3.
Para obter mais informações sobre como usar o Amazon S3, consulte o Guia do usuário do Amazon Simple Storage Service.