Tecnologias/02 - Bancos de Dados/02 - Não Relacionais/02 - DynamoDB2 min
Chaves, Query e Índices no DynamoDB
Query e Scan
Query exige igualdade da partition key da tabela ou do índice consultado e permite
condições compatíveis sobre a sort key. Scan examina itens ao longo da tabela ou índice.
Um filtro não transforma uma varredura em busca por chave.
Exemplo de parâmetros de uma consulta, usando o modelo da nota 1. DynamoDB:
{
"TableName": "Aplicacao",
"KeyConditionExpression": "PK = :cliente AND begins_with(SK, :prefixo)",
"ExpressionAttributeValues": {
":cliente": {"S": "CLIENTE#42"},
":prefixo": {"S": "PEDIDO#"}
}
}
Essa consulta seleciona pedidos do cliente 42 pelo prefixo da sort key. Paginação deve ser tratada quando a resposta indicar continuação. Referência: condições de chave.
Filtros
FilterExpression é aplicada depois de ler os itens selecionados. Pode reduzir o
resultado enviado ao cliente sem reduzir a capacidade consumida por aquela leitura.
Filtrar depois de ler milhares de itens é diferente de localizar poucos pela chave.
Referência: filtros.
Índices secundários
| Índice | Organização |
|---|---|
| GSI — Global Secondary Index | Pode ter partition key e sort key diferentes das da tabela |
| LSI — Local Secondary Index | Mantém a partition key da tabela e permite outra sort key |
A projeção define quais atributos ficam disponíveis no índice. Índices criam caminhos de acesso adicionais e têm custos de armazenamento e manutenção. O desenho também muda quais padrões de consulta podem ser atendidos diretamente. Referência: índices secundários.
Aprofundamento aplicado
Página vazia não significa fim da consulta
O serviço pode examinar uma página, aplicar o filtro e devolver zero itens junto com
LastEvaluatedKey. A continuação depende da chave de paginação, não apenas de Items.
As páginas de Query têm limite de até 1 MB de dados lidos antes do filtro.
início: sem ExclusiveStartKey
chamar Query
processar Items, mesmo que a lista esteja vazia
usar LastEvaluatedKey como ExclusiveStartKey da próxima chamada
terminar quando não houver chave de continuação
Paginar não transforma várias chamadas em um snapshot único. Se os dados mudam durante a navegação, a aplicação precisa definir a experiência esperada. Referência: paginação.
Projetar um índice para a pergunta correta
Para listar pedidos abertos por loja, uma chave de índice que inclui loja e estado
pode evitar ler todos os pedidos para filtrar depois. Mas concentrar todas as lojas
sob ABERTO criaria uma distribuição diferente, potencialmente muito concentrada.
Exercício: simule três páginas: vazia com continuação, duas linhas com continuação e uma linha sem continuação. Resultado esperado: recuperar três linhas e executar as três chamadas; a primeira página vazia não encerra o algoritmo.
Relacionado: 3. Consistência e Transações no DynamoDB.
Parte de DynamoDB