Amazon DynamoDB에서 페이지 매김을 구현하려면 어떻게 해야 하나요?

2분 분량
0

쿼리 또는 스캔 작업을 사용하여 Amazon DynamoDB 테이블에서 항목을 가져오는 경우 응답이 전체 결과를 반환하지 않습니다.

해결 방법

이 문제는 다음 두 가지 조건 때문에 발생합니다.

  • 초기 쿼리 또는 스캔 작업의 응답에는 LastEvaluatedKey가 포함됩니다.
  • 후속 작업을 수행하기 위한 다음 요청에서는 이 키를 ExclusiveStartKey로 사용하지 않았습니다.

이 문제를 해결하려면 DynamoDB 테이블의 페이지 매김을 구현하세요. 페이지 매김은 이전 요청이 완료되지 않은 경우 계속하도록 후속 요청을 보내는 프로세스입니다. DynamoDB의 쿼리 또는 스캔 작업은 불완전한 결과를 반환할 수 있으며 전체 결과 세트를 가져오기 위해 후속 요청이 필요할 수 있습니다. 이는 DynamoDB가 쿼리 또는 스캔캔 작업의 결과를 페이지 매김하고 단일 작업에서 최대 1MB의 데이터를 반환하기 때문입니다. 데이터 최대값은 DynamoDB의 엄격한 한도입니다. 페이지 매김을 사용하면 스캔 및 쿼리 작업의 결과를 1MB 이하의 데이터 페이지로 나뉩니다.

Amazon DynamoDB에서 페이지 매김을 구현하려면 내장된 페이지 매김 기능을 사용하세요. 다음 예제와 비슷한 명령을 실행합니다.

use DynamoDB.Paginator.Query.paginate

client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
params = {}

for page in paginator.paginate(params):
# do something

결과를 페이지로 나누어 한 번에 한 페이지씩 검색할 수도 있습니다. 결과에 LastEvaluatedKey 요소가 포함되어 있는지 확인하려면 스캔 또는 쿼리 작업의 하위 수준 결과를 확인합니다. 나머지 결과를 얻으려면 매개 변수가 같은 다른 스캔 또는 쿼리 작업을 사용하세요. 두 번째 작업의 경우 LastEvaluatedKeyExclusiveStartKey 파라미터로 사용합니다. 결과에 LastEvaluatedKey 값이 포함되지 않으면 검색할 항목이 없는 것입니다.

자세한 내용을 보려면 테이블 쿼리 결과 페이지 매김결과 페이지 매김을 참조하세요.

LastEvaluatedKey를 사용하여 Boto3에서 페이지 매김을 구현하려면 다음 예제와 유사한 명령을 실행합니다.

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))
AWS 공식
AWS 공식업데이트됨 8달 전
댓글 없음

관련 콘텐츠