DynamoDB에서 보조 인덱스를 사용하여 데이터 액세스 개선
Amazon DynamoDB는 기본 키 값을 지정하여 테이블의 항목에 신속하게 액세스할 수 있습니다. 그러나 많은 애플리케이션에서는 주요 키가 아닌 속성을 가진 데이터에 효율적으로 액세스할 수 있다는 장점을 활용하기 위해 하나 이상의 보조(또는 대체) 키를 사용하기도 합니다. 이를 위해 테이블에서 하나 이상의 보조 인덱스를 생성하고 이 인덱스에 대해 Query
또는 Scan
요청을 발행할 수 있습니다.
보조 인덱스는 Query
작업을 지원하는 대체 키와 함께 테이블의 속성 하위 집합을 포함하는 데이터 구조입니다. 테이블에서 Query
를 사용하는 것과 거의 같은 방식으로 Query
를 사용하여 인덱스에서 데이터를 가져올 수 있습니다. 한 테이블에 여러 개의 보조 인덱스를 포함할 수 있어서 애플리케이션이 서로 다른 여러 쿼리 패턴에 액세스할 수 있습니다.
참고
또한 테이블을 Scan
하는 것과 거의 동일한 방식으로 인덱스를 Scan
할 수 있습니다.
모든 보조 인덱스는 정확히 하나의 테이블과 연결되어 해당 테이블에서 데이터를 가져옵니다. 이를 인덱스의 기본 테이블이라고 합니다. 인덱스를 생성할 때 인덱스 파티션 및 정렬 키로 대체 키를 정의할 수 있습니다. 또한 기본 테이블에서 인덱스로 프로젝션하거나 복사하려는 속성을 정의합니다. DynamoDB는 이 속성을 기본 테이블의 기본 키 속성과 함께 인덱스로 복사합니다. 그러면 테이블을 쿼리하거나 스캔하는 것처럼 인덱스를 쿼리하거나 스캔할 수 있습니다.
모든 보조 인덱스는 DynamoDB에서 자동으로 유지 관리됩니다. 기본 테이블의 항목을 추가, 수정 또는 삭제할 때 해당 테이블의 모든 인덱스도 업데이트되어 이 변경 사항이 반영됩니다.
DynamoDB는 두 종류의 보조 인덱스를 지원합니다.
-
글로벌 보조 인덱스 - 파티션 키와 정렬 키와 기본 테이블과 다를 수 있는 인덱스입니다. 모든 파티션에서 인덱스의 쿼리가 기본 테이블의 모든 데이터에 적용될 수 있으므로 글로벌 보조 인덱스는 글로벌하게 간주됩니다. 글로벌 보조 인덱스는 기본 테이블과 별개로 자체 파티션 공간에 저장되며 기본 테이블과는 별도로 크기 조정됩니다.
-
로컬 보조 인덱스 - 기본 테이블과 파티션 키는 동일하지만 정렬 키가 다른 인덱스입니다. 로컬 보조 인덱스는 로컬 보조 인덱스의 모든 파티션이 동일한 파티션 키 값을 갖는 기본 테이블 파티션으로 한정된다는 의미에서 "로컬"이라고 합니다.
글로벌 보조 인덱스와 로컬 보조 인덱스에 대한 비교는 이 비디오를 참조하세요.
사용할 인덱스 유형을 결정할 때 애플리케이션의 요구 사항을 고려해야 합니다. 다음 표에서는 글로벌 보조 인덱스와 로컬 보조 인덱스 간의 주된 차이점을 보여 줍니다.
기능 | 글로벌 보조 인덱스 | 로컬 보조 인덱스 |
---|---|---|
키 스키마 | 글로벌 보조 인덱스의 기본 키는 단순 기본 키(파티션 키)이거나 복합 기본 키(파티션 키 및 정렬 키)일 수 있습니다. | 로컬 보조 인덱스의 기본 키는 반드시 복합 기본 키(파티션 키 및 정렬 키)여야 합니다. |
키 속성 | 인덱스 파티션 키 및 정렬 키(있을 경우)는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다. | 인덱스의 파티션 키는 기본 테이블의 파티션 키와 동일한 속성입니다. 정렬 키는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다. |
파티션 키 값당 크기 제한 | 글로벌 보조 인덱스에는 크기 제한이 없습니다. | 파티션 키 값마다 인덱싱된 모든 항목의 전체 크기가 10GB 이하여야 합니다. |
온라인 인덱스 작업 | 글로벌 보조 인덱스는 테이블을 생성할 때 동시에 생성될 수 있습니다. 새 글로벌 보조 인덱스를 기존 테이블에 추가하거나 기존 글로벌 보조 인덱스를 삭제할 수도 있습니다. 자세한 내용은 DynamoDB에서 글로벌 보조 인덱스 관리 단원을 참조하십시오. | 로컬 보조 인덱스는 테이블을 생성할 때 동시에 생성됩니다. 기존 테이블에 로컬 보조 인덱스를 추가할 수도 없고 현재 있는 로컬 보조 인덱스를 삭제할 수도 없습니다. |
쿼리 및 파티션 | 글로벌 보조 인덱스를 사용하면 모든 파티션에서 전체 테이블을 쿼리할 수 있습니다. | 로컬 보조 인덱스를 사용하면 쿼리에서 파티션 키 값으로 지정하는 단일 파티션을 쿼리할 수 있습니다. |
읽기 일관성 | 글로벌 보조 인덱스의 쿼리는 최종 일관성만 지원합니다. | 로컬 보조 인덱스를 쿼리할 때는 최종 일관성 또는 강력한 일관성을 선택할 수 있습니다. |
프로비저닝된 처리량 소비 | 글로벌 보조 인덱스마다 읽기 및 쓰기 활동에 대한 고유한 프로비저닝된 처리량 설정이 있습니다. 글로벌 보조 인덱스의 쿼리 및 스캔은 기본 테이블이 아니라 인덱스의 용량 단위를 소비합니다. 테이블 쓰기로 인한 글로벌 보조 인덱스 업데이트의 경우도 마찬가지입니다. 글로벌 테이블과 연결된 글로벌 보조 인덱스는 쓰기 용량 단위를 소비합니다. | 로컬 보조 인덱스의 쿼리 또는 스캔은 기본 테이블의 읽기 용량 단위를 소비합니다. 테이블에 쓸 때 해당 로컬 보조 인덱스도 업데이트됩니다. 이 업데이트는 기본 테이블의 쓰기 용량 단위를 소비합니다. 글로벌 테이블과 연결된 로컬 보조 인덱스는 복제된 쓰기 용량 단위를 소비합니다. |
프로젝션 속성 | 글로벌 보조 인덱스 쿼리 또는 스캔에서는 인덱스로 프로젝션되는 속성만 요쳥할 수 있습니다. DynamoDB가 테이블에서는 어떤 속성도 가져오지 않습니다. | 로컬 보조 인덱스를 쿼리 또는 스캔하는 경우에는 인덱스로 프로젝션되지 않는 속성만 요쳥할 수 있습니다. DynamoDB가 테이블에서 이러한 속성을 자동으로 가져옵니다. |
보조 인덱스가 있는 테이블을 2개 이상 생성하려면 순차적으로 해야 합니다. 예를 들어 첫 번째 테이블을 만들고 테이블이 ACTIVE
가 될 때까지 기다리고, 다음 테이블을 만들고 이 테이블이 ACTIVE
가 될 때까지 기다리는 방식으로 진행됩니다. 보조 인덱스가 있는 테이블을 2개 이상 동시에 생성하면 DynamoDB에서 LimitExceededException
을 반환합니다.
각 보조 인덱스는 연결된 기본 테이블과 동일한 테이블 클래스 및 용량 모드를 사용합니다. 각 보조 인덱스에 대해 다음을 지정해야 합니다.
-
생성할 인덱스의 유형, 즉 글로벌 보조 인덱스 또는 로컬 보조 인덱스.
-
인덱스의 이름. 인덱스의 이름 지정 규칙은 Amazon DynamoDB의 서비스, 계정 및 테이블 할당량에 나온 대로 테이블의 경우와 동일합니다. 이름은 연관된 기본 테이블에 대해 고유해야 하지만 다른 기본 테이블과 연관된 인덱스에 동일한 이름을 사용할 수 있습니다.
-
인덱스의 키 스키마. 인덱스 키 스키마의 모든 속성은
String
,Number
또는Binary
형식의 최상위 속성이어야 합니다. 문서, 집합 등 다른 데이터 형식은 허용되지 않습니다. 키 스키마의 다른 요구 사항은 인덱스 유형에 따라 결정됩니다.-
글로벌 보조 인덱스의 경우 파티션 키는 기본 테이블의 스칼라 속성일 수 있습니다. 정렬 키는 선택적이며 역시 기본 테이블의 스칼라 속성일 수 있습니다.
-
로컬 보조 인덱스의 경우 파티션 키는 기본 테이블의 파티션 키와 동일해야 하며 정렬 키는 키가 아닌 기본 테이블 속성이어야 합니다.
-
-
기본 테이블에서 인덱스로 프로젝션할 추가 속성(있는 경우). 테이블 키 속성 외에 이 속성도 모든 인덱스에 자동으로 프로젝션됩니다. 스칼라, 문서, 집합을 포함하여 모든 데이터 형식의 속성을 프로젝션할 수 있습니다.
-
필요할 경우 인덱스의 프로비저닝 처리량 설정:
-
글로벌 보조 인덱스의 경우 읽기 및 쓰기 용량 단위 설정을 지정해야 합니다. 이 할당 처리량 설정은 기본 테이블의 설정과 관련이 없습니다.
-
로컬 보조 인덱스의 경우 읽기 및 쓰기 용량 단위 설정을 지정할 필요가 없습니다. 로컬 보조 인덱스의 읽기 및 쓰기 작업은 기본 테이블의 프로비저닝된 처리량 설정을 활용합니다.
-
쿼리 유연성을 극대화하도록 테이블당 최대 20개의 글로벌 보조 인덱스(기본 할당량)와 최대 5개의 로컬 보조 인덱스를 생성할 수 있습니다.
다음 AWS 리전의 경우 테이블당 글로벌 보조 인덱스의 할당량은 20개입니다.
-
AWS GovCloud(미국 동부)
-
AWS GovCloud(미국 서부)
-
유럽(스톡홀름)
테이블의 보조 인덱스에 대한 상세 목록을 가져오려면 DescribeTable
작업을 사용합니다. DescribeTable
은 테이블에 있는 모든 보조 인덱스의 이름, 스토리지 크기 및 항목 수를 반환합니다. 이 값은 실시간으로 업데이트되지 않지만 거의 6시간마다 새로 고쳐집니다.
Query
또는 Scan
작업을 사용하여 보조 인덱스의 데이터에 액세스할 수 있습니다. 사용하려는 인덱스의 이름과 기본 테이블의 이름, 결과에 반환할 속성, 적용할 조건 표현식 또는 필터를 지정해야 합니다. DynamoDB는 결과를 오름차순 또는 내림차순으로 반환할 수 있습니다.
테이블을 삭제할 때 테이블과 연관된 모든 인덱스도 삭제됩니다.
모범 사례는 DynamoDB의 보조 인덱스 사용에 대한 모범 사례 단원을 참조하세요.