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:
-
Esamina i risultati della
Querydi livello inferiore:-
Se il risultato contiene un elemento
LastEvaluatedKeyche non è null, passa alla fase 2. -
Se nel risultato non è presente un
LastEvaluatedKey, allora non ci sono altri elementi da recuperare.
-
-
Costruzione di una
Querycon la stessaKeyConditionExpression. Tuttavia, questa volta, accettare il valoreLastEvaluatedKeydella fase 1 e usarlo come parametroExclusiveStartKeynella nuova richiesta diQuery. -
Eseguire la nuova richiesta di
Query. -
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.
Un valore non vuoto significa LastEvaluatedKey solo che il valore precedente Query si è fermato al limite di una pagina, ovvero il limite di 1 MB per le dimensioni della pagina o un Limit valore, non che rimangono necessariamente più elementi corrispondenti. In particolare, quando si utilizza aFilterExpression, Query applica il limite di 1 Limit MB/pagina agli elementi letti prima di applicare il filtro, in modo che una pagina possa restituire zero elementi corrispondenti e includere comunque un. LastEvaluatedKey Continua a inviare richieste con i dati restituiti LastEvaluatedKey finché la risposta non ne contiene più uno.
Puoi usare il AWS CLI per visualizzare questo comportamento. AWS CLI Invia Query richieste di basso livello a DynamoDB ripetutamente, finché non LastEvaluatedKey sono più presenti nei risultati. Considera il seguente AWS CLI esempio che recupera i titoli dei film di un determinato 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
Di solito, AWS CLI gestisce automaticamente l'impaginazione. Tuttavia, in questo esempio, il AWS CLI --page-size parametro limita il numero di elementi per pagina. Il parametro --debug consente di stampare le informazioni di livello inferiore relative alle richieste e alle risposte.
Nota
L'impaginazione automatica è il comportamento predefinito sia nella AWS CLI versione 1 che nella versione 2, quindi un singolo comando restituisce tutti gli elementi corrispondenti. Se invece hai bisogno di impaginare te stesso, usa l'--no-paginateopzione per restituire solo la prima pagina (la risposta include quindi LastEvaluatedKey quando rimangono più elementi) o usala --max-items per limitare il numero di elementi restituiti e ottenere un NextToken valore per il recupero della pagina successiva.
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. AWS CLI Quindi invia un'altra Query richiesta 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 AWS SDK gestiscono le risposte DynamoDB di basso livello (inclusa la presenza o l'assenza diLastEvaluatedKey) e forniscono varie astrazioni per l'impaginazione dei risultati. 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.