Come si implementa l'impaginazione in Amazon DynamoDB?

Ultimo aggiornamento: 12/08/2022

Quando provo a recuperare articoli da una tabella Amazon DynamoDB utilizzando un'operazione di query o scansione, la risposta non restituisce i risultati completi.

Risoluzione

Questo problema si verifica nelle seguenti condizioni:

  • L'operazione iniziale di scansione o query contiene LastEvaluatedKey nella risposta.
  • Non è stata eseguita un'operazione successiva utilizzando questa chiave come ExclusiveStartKey per la richiesta successiva.

È possibile risolvere questo problema implementando l'impaginazione per la tabella DynamoDB. L'impaginazione è il processo di invio di richieste successive per continuare quando una richiesta precedente è incompleta. Un'operazione di query o scansione in DynamoDB potrebbe restituire risultati incompleti e richiedere richieste successive per ottenere l'intero set di risultati. Questo perché DynamoDB impagina i risultati di un'operazione di query o scansione e restituisce un massimo di 1 MB di dati in una singola operazione. Questo è un limite rigido in DynamoDB. Con l'impaginazione, i risultati delle operazioni di scansione e query sono suddivisi in pagine di dati di dimensioni pari o inferiori a 1 MB.

Per impaginare i risultati e recuperarli una pagina alla volta, controllare il risultato di basso livello di un'operazione di query o scansione per vedere se il risultato contiene l'elemento LastEvaluatedKey. È possibile ottenere i risultati rimanenti della richiesta iniziale utilizzando un'altra operazione di scansione o query con gli stessi parametri, ma utilizzando il valore LastEvaluatedKey come parametro ExclusiveStartKey. Se il risultato non include il valore LastEvaluatedKey, non ci sono elementi da recuperare.

Per ulteriori informazioni, vedere Impaginazione dei risultati delle query della tabella e Impaginazione dei risultati.

Per implementare l'impaginazione in Boto3 utilizzando LastEvaluatedKey, utilizzare il seguente esempio di codice:

from __future__ import print_function  # Python 2/3 compatibility
import boto3
from botocore.exceptions import ClientError

# Create Client
session = boto3.session.Session()
dynamoDbClient = session.client('dynamodb')

table_name = 'AmazonBins'

# Track number of Items read
item_count = 0

try:
    # Get the first 1MB of data
    response = dynamoDbClient.scan(
        TableName=table_name
    )

except ClientError as error:
    print("Something went wrong: ")
    print(error.response['ResponseMetadata'])

# Track number of Items read
item_count += len(response['Items'])

# Paginate returning up to 1MB of data for each iteration
while 'LastEvaluatedKey' in response:
    try:
        response = dynamoDbClient.scan(
            TableName=table_name,
            ExclusiveStartKey=response['LastEvaluatedKey']
        )
        # Track number of Items read
        item_count += len(response['Items'])

    except ClientError as error:
        print("Something went wrong: ")
        print(error.response['ResponseMetadata'])

print("Total number of items found: {}".format(item_count))

Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?