테이블 쿼리 결과 페이지 매김 - Amazon DynamoDB

테이블 쿼리 결과 페이지 매김

DynamoDB는 Query 작업 결과의 페이지를 매깁니다. 페이지를 매기면 Query 결과는 크기가 1MB 이하인 데이터 ‘페이지’로 분리됩니다. 응용 프로그램은 결과의 첫 번째 페이지를 처리한 다음, 두 번째 페이지를 처리하고 이런 식으로 계속할 수 있습니다.

단일 Query는 1MB 크기 한도 내에 맞는 결과 집합만 반환합니다. 추가 결과가 있는지 확인하고 이러한 결과를 한번에 한 페이지에 가져오려면 애플리케이션에서 다음을 수행해야 합니다.

  1. 하위 수준 Query 결과를 확인합니다.

    • 결과가 LastEvaluatedKey 요소를 포함하고 null이 아닌 경우 2단계로 계속합니다.

    • 결과에 LastEvaluatedKey없는 경우 더 이상 가져올 항목이 없습니다.

  2. 이전과 동일한 파라미터를 이용해 새로운 Query 요청을 구성합니다. 그러나 이번에는 1단계에서 LastEvaluatedKey 값을 가져와서 새로운 Query 요청의 ExclusiveStartKey 파라미터로 사용합니다.

  3. 새로운 Query 요청을 실행합니다.

  4. 1단계로 이동합니다.

다시 말해서, Query 응답의 LastEvaluatedKey를 다음 Query 요청에 대한 ExclusiveStartKey로 사용해야 합니다. Query 응답에 LastEvaluatedKey 요소가 없는 경우 결과의 최종 페이지를 검색한 것입니다. LastEvaluatedKey가 비어 있지 않는 경우 결과 집합에 데이터가 더 있음을 의미하는 것은 아닙니다. 결과 집합의 마지막 페이지를 알 수 있는 유일한 방법은 LastEvaluatedKey가 비어 있을 때입니다.

AWS CLI를 사용하여 이 동작을 볼 수 있습니다. AWS CLI는 LastEvaluatedKey가 결과에 더 이상 없을 때까지 하위 수준 Query 요청을 DynamoDB에 반복적으로 보냅니다. 특정 연도의 영화 제목을 검색하는 다음 AWS CLI 예제를 살펴보세요.

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

일반적으로 AWS CLI에서는 페이지 매김이 자동으로 처리됩니다. 그러나 이 예제에서는 AWS CLI --page-size 파라미터가 페이지당 항목 수를 제한합니다. --debug 파라미터는 요청 및 응답에 대한 하위 수준 정보를 출력합니다.

예제를 실행하면 DynamoDB의 첫 응답이 다음과 유사합니다.

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

응답의 LastEvaluatedKey는 가져온 항목이 전부가 아님을 나타냅니다. 그러면 AWS CLI는 DynamoDB에 다른 Query 요청을 보냅니다. 이 요청과 응답 패턴은 마지막 응답이 반환될 때까지 계속됩니다.

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

LastEvaluatedKey가 없으면 가져올 항목이 더 이상 없음을 나타냅니다.

참고

AWS SDK는 하위 수준 DynamoDB 응답(LastEvaluatedKey의 유무 포함)을 처리하여 Query 결과 페이지 매김에 대해 다양한 추상을 제공합니다. 예를 들어, SDK for Java 문서 인터페이스는 java.util.Iterator 지원을 제공하므로 한 번에 하나씩 결과를 볼 수 있습니다.

다양한 프로그래밍 언어의 코드 예제를 보려면 Amazon DynamoDB 시작 안내서 및 해당 언어의 AWS SDK 설명서를 참조하세요.

Query 작업의 Limit 파라미터를 사용하여 결과 세트의 항목 수를 제한하여 페이지 크기를 줄일 수도 있습니다.

DynamoDB를 사용한 쿼리 방법에 대한 자세한 내용은 DynamoDB의 쿼리 작업 단원을 참조하세요.