Paginación de los resultados de consulta de tabla en DynamoDB - Amazon DynamoDB

Paginación de los resultados de consulta de tabla en DynamoDB

DynamoDB pagina los resultados de las operaciones Query. La paginación permite dividir los resultados de Query en "páginas" de datos con un tamaño de 1 MB (o menos). Una aplicación puede procesar la primera página de resultados, luego la segunda página, y así sucesivamente.

Una operación Query única devuelve solamente un conjunto de resultados que se ajuste al límite de tamaño de 1 MB. Para determinar si hay más resultados y para recuperarlos de página en página, las aplicaciones deben hacer lo siguiente:

  1. Examinar el resultado de Query de bajo nivel:

    • Si el resultado contiene una entrada LastEvaluatedKey, vaya al paso 2.

    • Si no figura LastEvaluatedKey en el resultado, no hay más elementos que recuperar.

  2. Crear una nueva solicitud Query con los mismos parámetros que la anterior. Sin embargo, esta vez, se toma el valor LastEvaluatedKey del paso 1 y se usa como parámetro ExclusiveStartKey en la nueva solicitud Query.

  3. Ejecutar la nueva solicitud Query.

  4. Ir al paso 1.

Es decir, el valor de LastEvaluatedKey de la respuesta de Query debe utilizarse como valor de ExclusiveStartKey en la siguiente solicitud Query. Si no hay una entrada LastEvaluatedKey en una respuesta de Query, significa que se ha recuperado la última página de resultados. Si LastEvaluatedKey no está vacía, no significa necesariamente que haya más datos en el conjunto de resultados. La única forma de saber que se ha alcanzado el final del conjunto de resultados es cuando LastEvaluatedKey está vacío.

Puede utilizar la AWS CLI para ver este comportamiento. La AWS CLI envía solicitudes Query de bajo nivel a DynamoDB una y otra vez hasta que LastEvaluatedKey ya no esté presente en los resultados. Considere el siguiente ejemplo de la AWS CLI que recupera títulos de películas de un determinado año:

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

Normalmente, la AWS CLI se encarga de la paginación automáticamente. No obstante, en este ejemplo, el parámetro --page-size de la AWS CLI limita el número de elementos por página. El parámetro --debug muestra información de bajo nivel de las solicitudes y las respuestas.

Si ejecuta el ejemplo, la primera respuesta de DynamoDB será similar a la siguiente.

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}'

El elemento LastEvaluatedKey de la respuesta indica que no se han recuperado todos los elementos. La AWS CLI envía entonces otra solicitud Query a DynamoDB. Este patrón de solicitud y respuesta continúa hasta la respuesta final.

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}'

La ausencia de LastEvaluatedKey indica que no hay más elementos que recuperar.

nota

Los SDK de AWS se encargan también de las respuestas de DynamoDB de bajo nivel (incluida la presencia o ausencia de LastEvaluatedKey) y proporcionan varias abstracciones para paginar los resultados de Query. Por ejemplo, la interfaz de documentos de SDK para Java proporciona compatibilidad con java.util.Iterator para que pueda examinar los resultados de uno en uno.

Para ver ejemplos de código en diversos lenguajes de programación, consulte la Guía de inicio de Amazon DynamoDB y la documentación del SDK de AWS correspondiente a su lenguaje.

También puede reducir el tamaño de página limitando el número de elementos del conjunto de resultados, con el parámetro de Limit de la operación de Query.

Para obtener más información sobre cómo realizar consultas en DynamoDB, consulte Consulta de tablas en DynamoDB.