Impaginazione dei risultati delle query sulle tabelle in DynamoDB - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Impaginazione dei risultati delle query sulle tabelle in DynamoDB

DynamoDB esegue la paginazione dei risultati delle operazioni Query. Con la paginazione, i risultati della Query vengono divisi in "pagine" di dati la cui dimensione è al massimo 1 MB. Un'applicazione può elaborare la prima pagina dei risultati, quindi la seconda pagina e così via.

Una singola operazione Query restituisce solo un set di risultati che rientra nel limite di dimensione di 1 MB. Per determinare se ci sono più risultati e recuperarli una pagina alla volta, le applicazioni devono fare quanto segue:

  1. Esamina i risultati della Query di livello inferiore:

    • Se il risultato contiene un elemento LastEvaluatedKey che non è null, passa alla fase 2.

    • Se nel risultato non è presente un LastEvaluatedKey, allora non ci sono altri elementi da recuperare.

  2. Costruzione di una Query con la stessa KeyConditionExpression. Tuttavia, questa volta, accettare il valore LastEvaluatedKey della fase 1 e usarlo come parametro ExclusiveStartKey nella nuova richiesta di Query.

  3. Eseguire la nuova richiesta di Query.

  4. Passa alla fase 1.

In altre parole, l'item LastEvaluatedKey della risposta di uno Query deve essere usato come item ExclusiveStartKey per la successiva richiesta di Query. Se non è presente un elemento LastEvaluatedKey nella risposta di uno Query, vuol dire che hai recuperato la pagina finale dei risultati. Se LastEvaluatedKey non è vuoto, non significa necessariamente che esistano più dati nel set di risultati. L'unico modo per sapere che hai raggiunto la fine del set di risultati è quando LastEvaluatedKey è vuoto.

Puoi usare AWS CLI per osservare questo comportamento. La AWS CLI invia ripetutamente richieste Query di basso livello a DynamoDB, finché LastEvaluatedKey non è più presente nei risultati. Considera il seguente esempio di AWS CLI che recupera i titoli di film di un particolare anno:

aws dynamodb query --table-name Movies \ --projection-expression "title" \ --key-condition-expression "#y = :yyyy" \ --expression-attribute-names '{"#y":"year"}' \ --expression-attribute-values '{":yyyy":{"N":"1993"}}' \ --page-size 5 \ --debug

In genere, AWS CLI gestisce la paginazione automaticamente. Tuttavia, in questo esempio, il parametro --page-size di AWS CLI limita il numero di item per pagina. Il parametro --debug consente di stampare le informazioni di livello inferiore relative alle richieste e alle risposte.

Se si esegue l'esempio, l'aspetto della prima risposta da DynamoDB sarà simile al seguente.

2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}}, {"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}}, {"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}], "LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}}, "ScannedCount":5}'

L'item LastEvaluatedKey nella risposta indica che non tutti gli elementi sono stati recuperati. La AWS CLI invia quindi un'altra richiesta Query a DynamoDB. Questo modello di richiesta e risposta continua fino alla risposta finale.

2017-07-07 11:13:16,291 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":1,"Items":[{"title":{"S":"What\'s Eating Gilbert Grape"}}],"ScannedCount":1}'

L'assenza di LastEvaluatedKey indica che non ci sono più item da recuperare.

Nota

Gli SDK AWS gestiscono le risposte di basso livello di DynamoDB (inclusa la presenza o l'assenza di LastEvaluatedKey) e forniscono varie astrazioni per la paginazione dei risultati di Query Ad esempio, l'interfaccia del documento SDK per Java fornisce il supporto java.util.Iterator per poter esaminare i risultati uno alla volta.

Per esempi di codice in vari linguaggi di programmazione, consulta la Guida alle operazioni di base di Amazon DynamoDB e la documentazione dell'SDK AWS per il linguaggio in uso.

È inoltre possibile ridurre la dimensione della pagina limitando il numero di elementi nel set di risultati, con il parametro Limit dell’operazione Query.

Per ulteriori informazioni sull'esecuzione di query con DynamoDB, consulta Esecuzione di query in DynamoDB.