처음 만난 AWS 문서


13.5 DynamoDB 보조 인덱스

지금부터는 DynamoDB의 보조 인덱스에 대해서 배워보도록 하겠습니다.

DynamoDB의 테이블에서는 하나 이상의 보조 인덱스를 생성할 수 있습니다.
보조 인덱스는 파티션 키에 대한 쿼리는 물론이고, 정렬 키를 사용하여 테이블 데이터에 대한 쿼리까지 실행할 수 있습니다.

DynamoDB는 인덱스를 사용하도록 요구하지는 않으면서도 데이터를 쿼리할 때 애플리케이션에 보다 많은 유연성을 제공합니다.
테이블에서 보조 인덱스를 생성한 후에는, 테이블에서 데이터를 읽는 것과 같은 방식으로 인덱스에서 데이터를 읽을 수 있습니다.

DynamoDB의 보조 인덱스에는 로컬 보조 인덱스와 글로벌 보조 인덱스가 있습니다.

로컬 보조 인덱스Local Secondary Index의 약자로 LSI라고 부르고, 테이블과 파티션 키는 동일하지만 정렬 키는 다른 인덱스입니다.
그래서 테이블에 정렬 키(Sort Key)를 추가로 더 만든다고 생각하면 됩니다.

글로벌 보조 인덱스Global Secondary Index의 약자로 GSI라고 부르고, 파티션 키 및 정렬 키가 테이블의 파티션 키 및 정렬 키와 다를 수 있는 인덱스입니다.

DynamoDB에서는 테이블당 최대 20개의 GSI 및 5개의 LSI를 정의할 수 있습니다.


이번에는 글로벌 보조 인덱스와 로컬 보조 인덱스의 차이점을 표로 비교해보겠습니다.

GSI vs LSI

먼저 키 스키마는 글로벌 보조 인덱스에서는 단순 기본 키 또는 복합 기본 키가 될 수 있으며, 로컬 보조 인덱스에서는 기본 키는 반드시 복합 기본 키여야 합니다.

그리고 키 속성은 글로벌 보조 인덱스에서는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성이고, 로컬 보조 인덱스에서는 기본 테이블의 파티션 키와 동일한 속성이 됩니다.

파티션 키 값당 크기 제한과 관련해서는 글로벌 보조 인덱스는 크기 제한이 없으며, 로컬 보조 인덱스는 파티션 키 값마다 인덱싱된 모든 항목의 전체 크기가 10GB 이하여야 합니다.

그리고 온라인 인덱스 작업과 관련해서는 글로벌 보조 인덱스는 테이블을 생성할 때 동시에 GSI를 생성할 수 있으며, 기존 테이블에 새 GSI를 추가하거나, 기존 GSI를 삭제할 수도 있습니다.

하지만 로컬 보조 인덱스는 테이블을 생성할 때 동시에 LSI가 생성되며, 기존 테이블에 LSI를 추가할 수도 없고 기존 LSI를 삭제할 수도 없습니다.

그리고 쿼리 및 파티션과 관련해서는 글로벌 보조 인덱스는 전체 테이블의 모든 파티션에 대해 쿼리가 가능하며, 로컬 보조 인덱스는 파티션키가 같은 단일 파티션에 대해서만 쿼리가 가능합니다.

그리고 읽기 일관성에서는 글로벌 보조 인덱스는 최종 일관성만 지원하며, 로컬 보조 인덱스는 최종 일관성 또는 강력한 일관성 선택 가능합니다.

할당된 처리량 소비측면에서는 글로벌 보조 인덱스는 자체 할당 처리량 설정이 있어서 GSI의 용량 단위를 소비하며, 로컬 보조 인덱스는 기본 테이블의 읽기/쓰기 용량 단위를 소비하기 합니다.

마지막으로 프로젝션 속성에서는 글로벌 보조 인덱스는 인덱스로 프로젝션되는 속성만 요쳥할 수 있으며, 로컬 보조 인덱스는 인덱스로 프로젝션되지 않는 속성도 요청할 수 있습니다.

이러한 두 가지 보조 인덱스의 차이점을 지금 모두 다 이해할 필요는 없지만, 보조 인덱스를 사용할 때는 각각의 특징을 꼭 잘 확인하고 사용하는 것이 중요합니다.


지금부터는 두 가지 보조 인덱스를 그림으로 살펴보도록 하겠습니다.

LSI

먼저 지금 테이블의 파티션 키는 Name이고 정렬 키는 Subject입니다.
그리고 로컬 보조 인덱스는 테이블과 파티션 키는 동일하지만 정렬 키는 다른 인덱스죠.
그래서 그림처럼 로컬 보조 인덱스의 파티션 키는 Name으로 테이블과 동일하며, 정렬 키는 Score로 테이블과 다른 것을 볼 수 있습니다.

이렇게 로컬 보조 인덱스를 만들어서 사용하게 되면, Name과 Score 값을 이용해서 테이블 내에서 아이템을 찾을 수 있는 것입니다.

이번에는 글로벌 보조 인덱스를 살펴보겠습니다.

GSI

글로벌 보조 인덱스는 파티션 키 및 정렬 키가 테이블의 파티션 키 및 정렬 키와 다를 수 있는 인덱스입니다.
그래서 그림처럼 글로벌 보조 인덱스의 파티션 키는 Subject가 되고, 정렬 키는 Name이 됩니다.

이렇게 글로벌 보조 인덱스를 사용하면 다른 값으로 파티션을 나눌 수 있고, 해당 파티션 내에서 아이템들을 정렬할 수 있습니다.


마지막 업데이트: 2023년 11월 12일 00시 00분

이 문서의 저작권은 이인제(소플)에 있습니다. 무단 전재와 무단 복제를 금합니다.