trilha

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

Buscar

Busca por título, seção e texto das notas