DynamoDB에서 scan 하기

4riend·2024년 3월 27일
1

CodeMind 프로젝트

목록 보기
7/20
post-thumbnail

'자막 수집 서비스'에서 각 문제별 수집된 데이터 수 현황을 보여주는 기능을 만들었다.
이때 DynamoDB 조회가 필요했는데 이것에 관한 고찰을 적어본다 🔥


DynamoDB에서 조회 방법

query와 scan 두 가지 방법이 있다.

query

  • 파티션 키(혹은 추가적으로 정렬 키)로 값을 읽어오는 방식
  • scan에 비해 속도가 빠름

scan

  • 전체 데이터를 모두 읽어오는 방식
  • query에 비해 속도가 느림

이전에 검색 기능을 만들 때 query를 이용했었다.
하지만 오늘은 전체 데이터의 수가 필요했기 때문에 scan을 이용했다.


DyanmoDB scan 하기

처음엔 이렇게 scan했다.

# DynamoDB에서 모든 게시글을 검색
response = table.scan()

DynamoDB의 scan 연산은 기본적으로 전체 테이블을 스캔하지만,
한 번의 요청으로 가져올 수 있는 항목의 양에 제한이 있다 😢

대량의 데이터를 처리할 때는 여러 페이지로 나뉘어 결과가 반환되는데
scan이 전체 데이터를 한 번에 반환하지 않고 일부만 반환하는 경우 추가 데이터를 순차적으로 요청해야 한다.


추가 데이터 순차적으로 요청하기

어떻게 요청해야 할까?
반환하는 응답 값에 LastEvaluatedKey가 있는데
이 값을 scan시 ExclusiveStartKey의 인자값으로 넣으면 된다.

# LastEvaluatedKey를 확인하여 모든 데이터를 스캔했는지 확인
while 'LastEvaluatedKey' in response:
    response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])

LastEvaluatedKey가 없는 경우 더 이상 가져올 항목이 없다는 의미다.
따라서 위와 같이 while 문을 통해 다음 페이지가 없을 때 까지 요청하면 된다 👍


참고 문헌

profile
날씨의 아이, 진격의 거인, 로스트 아크, Java Spring

0개의 댓글