희소 인덱스의 활용 - Amazon DynamoDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

희소 인덱스의 활용

테이블에 있는 항목의 경우 DynamoDB인덱스 정렬 키 값이 항목에 있는 경우에만가 해당 인덱스 항목을 작성합니다. 정렬 키가 모든 테이블 항목에 표시되지 않으면 인덱스가 희소하다고 말합니다.

희소한 인덱스는 테이블의 작은 하위 항목에 대한 쿼리에 유용합니다. 예를 들어, 다음의 키 속성을 가지고 있는 고객 주문을 모두 저장한 테이블이 있다고 가정하겠습니다.

  • 파티션 키: CustomerId

  • Sort key: OrderId

열려 있는 주문을 추적하기 위해 아직 배송되지 않은 주문 항목에 isOpen라는 속성을 삽입할 수 있습니다. 그리고 주문을 발송한 후에 이 속성을 삭제할 수 있습니다. 그리고 CustomerId(파티션 키) 및 isOpen(정렬 키)에 인덱스를 생성하면, isOpen 이 정의된 주문만 여기에 표시됩니다. 수천 가지의 주문이 있지만 열려 있는 주문이 적은 경우, 전체 테이블을 스캔하는 대신 열려 있는 주문의 인덱스에 쿼리를 하는 것이 훨씬 빠르고 경제적입니다.

와 같은 속성 유형을 사용하는 대신, 인덱스에서 유용한 정렬 순서를 생성하는 값을 가진 속성을 사용할 수 있습니다.isOpen 예를 들어, 각 주문 날짜에 대한 OrderOpenDate 속성을 사용한 후, 주문을 처리한 후에 이를 삭제할 수도 있습니다. 이는 희소 인덱스를 쿼리할 때, 주문한 날짜를 기준으로 항목을 분류해 반환하는 방식입니다.

DynamoDB의 희소 인덱스에 대한 예

글로벌 보조 인덱스는 기본값이 '희소'입니다. 글로벌 보조 인덱스를 생성할 때는 파티션 키를 지정해야 합니다(선택적으로 정렬 키 지정). 이 속성을 가진 기본 테이블의 항목만 인덱스에 표시됩니다.

글로벌 보조 인덱스를 희소 인덱스로 설계해서 프로비저닝을 하면, 기본 테이블보다 쓰기 처리량을 줄이고, 성능을 높일 수 있습니다.

예를 들어, 게임 애플리케이션이 모든 사용자의 점수를 추적하지만, 점수가 높은 소수만 쿼리할 필요가 있다고 가정하겠습니다. 다음 설계가 이런 시나리오를 효율적으로 처리합니다.


          희소 GSI 예

Rick이 3가지 게임을 플레이했는 데, 이 중 하나에서 Champ 상태를 달성했다고 가정하겠습니다. Padama는 4가지 게임을 플레이했는 데, 이 중 2개에서 Champ 상태를 달성했습니다. Award 속성은 사용자가 성과(Award)를 달성한 항목에만 표시됩니다. 이과 관련된 글로벌 보조 인덱스는 다음과 같습니다.


          희소 GSI 예

글로벌 보조 인덱스에는 기본 테이블의 항목 중 소수 하위 집합으로 자주 쿼리되는 높은 점수만 포함되어 있습니다.