보조 인덱스를 사용하여 데이터 액세스 향상 - Amazon DynamoDB

보조 인덱스를 사용하여 데이터 액세스 향상

Amazon DynamoDB는 기본 키 값을 지정하여 테이블의 항목에 신속하게 액세스할 수 있습니다. 그러나 많은 애플리케이션에서는 주요 키가 아닌 속성을 가진 데이터에 효율적으로 액세스할 수 있다는 장점을 활용하기 위해 하나 이상의 보조(또는 대체) 키를 사용하기도 합니다. 이를 위해 테이블에서 하나 이상의 보조 인덱스를 생성하고 이 인덱스에 대해 Query 또는 Scan 요청을 발행할 수 있습니다.

보조 인덱스Query 작업을 지원하는 대체 키와 함께 테이블의 속성 하위 집합을 포함하는 데이터 구조입니다. 테이블에서 Query를 사용하는 것과 거의 같은 방식으로 Query를 사용하여 인덱스에서 데이터를 가져올 수 있습니다. 한 테이블에 여러 개의 보조 인덱스를 포함할 수 있어서 애플리케이션이 서로 다른 여러 쿼리 패턴에 액세스할 수 있습니다.

참고

또한 테이블을 Scan하는 것과 거의 동일한 방식으로 인덱스를 Scan할 수 있습니다.

모든 보조 인덱스는 정확히 하나의 테이블과 연결되어 해당 테이블에서 데이터를 가져옵니다. 이를 인덱스의 기본 테이블이라고 합니다. 인덱스를 생성할 때 인덱스 파티션 및 정렬 키로 대체 키를 정의할 수 있습니다. 또한 기본 테이블에서 인덱스로 프로젝션하거나 복사하려는 속성을 정의합니다. DynamoDB는 이 속성을 기본 테이블의 기본 키 속성과 함께 인덱스로 복사합니다. 그러면 테이블을 쿼리하거나 스캔하는 것처럼 인덱스를 쿼리하거나 스캔할 수 있습니다.

모든 보조 인덱스는 DynamoDB에서 자동으로 유지 관리됩니다. 기본 테이블의 항목을 추가, 수정 또는 삭제할 때 해당 테이블의 모든 인덱스도 업데이트되어 이 변경 사항이 반영됩니다.

DynamoDB는 두 종류의 보조 인덱스를 지원합니다.

  • 글로벌 보조 인덱스 - 파티션 키와 정렬 키와 기본 테이블과 다를 수 있는 인덱스입니다. 모든 파티션에서 인덱스의 쿼리가 기본 테이블의 모든 데이터에 적용될 수 있으므로 글로벌 보조 인덱스는 글로벌하게 간주됩니다. 글로벌 보조 인덱스는 기본 테이블과 별개로 자체 파티션 공간에 저장되며 기본 테이블과는 별도로 크기 조정됩니다.

  • 로컬 보조 인덱스 - 기본 테이블과 파티션 키는 동일하지만 정렬 키가 다른 인덱스입니다. 로컬 보조 인덱스는 로컬 보조 인덱스의 모든 파티션이 동일한 파티션 키 값을 갖는 기본 테이블 파티션으로 한정된다는 의미에서 "로컬"이라고 합니다.

글로벌 보조 인덱스와 로컬 보조 인덱스에 대한 비교는 이 비디오를 참조하세요.

사용할 인덱스 유형을 결정할 때 애플리케이션의 요구 사항을 고려해야 합니다. 다음 표에서는 글로벌 보조 인덱스와 로컬 보조 인덱스 간의 주된 차이점을 보여 줍니다.

기능 글로벌 보조 인덱스 로컬 보조 인덱스
키 스키마 글로벌 보조 인덱스의 기본 키는 단순 기본 키(파티션 키)이거나 복합 기본 키(파티션 키 및 정렬 키)일 수 있습니다. 로컬 보조 인덱스의 기본 키는 반드시 복합 기본 키(파티션 키 및 정렬 키)여야 합니다.
키 속성 인덱스 파티션 키 및 정렬 키(있을 경우)는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다. 인덱스의 파티션 키는 기본 테이블의 파티션 키와 동일한 속성입니다. 정렬 키는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다.
파티션 키 값당 크기 제한 글로벌 보조 인덱스에는 크기 제한이 없습니다. 파티션 키 값마다 인덱싱된 모든 항목의 전체 크기가 10GB 이하여야 합니다.
온라인 인덱스 작업 글로벌 보조 인덱스는 테이블을 생성할 때 동시에 생성될 수 있습니다. 새 글로벌 보조 인덱스를 기존 테이블에 추가하거나 기존 글로벌 보조 인덱스를 삭제할 수도 있습니다. 자세한 내용은 글로벌 보조 인덱스 관리 단원을 참조하십시오. 로컬 보조 인덱스는 테이블을 생성할 때 동시에 생성됩니다. 기존 테이블에 로컬 보조 인덱스를 추가할 수도 없고 현재 있는 로컬 보조 인덱스를 삭제할 수도 없습니다.
쿼리 및 파티션 글로벌 보조 인덱스를 사용하면 모든 파티션에서 전체 테이블을 쿼리할 수 있습니다. 로컬 보조 인덱스를 사용하면 쿼리에서 파티션 키 값으로 지정하는 단일 파티션을 쿼리할 수 있습니다.
읽기 일관성 글로벌 보조 인덱스의 쿼리는 최종 일관성만 지원합니다. 로컬 보조 인덱스를 쿼리할 때는 최종 일관성 또는 강력한 일관성을 선택할 수 있습니다.
프로비저닝된 처리량 소비 글로벌 보조 인덱스마다 읽기 및 쓰기 활동에 대한 고유한 프로비저닝된 처리량 설정이 있습니다. 글로벌 보조 인덱스의 쿼리 및 스캔은 기본 테이블이 아니라 인덱스의 용량 단위를 소비합니다. 테이블 쓰기로 인한 글로벌 보조 인덱스 업데이트의 경우도 마찬가지입니다. 글로벌 테이블과 연결된 글로벌 보조 인덱스는 쓰기 용량 단위를 소비합니다. 로컬 보조 인덱스의 쿼리 또는 스캔은 기본 테이블의 읽기 용량 단위를 소비합니다. 테이블에 쓸 때 해당 로컬 보조 인덱스도 업데이트됩니다. 이 업데이트는 기본 테이블의 쓰기 용량 단위를 소비합니다. 글로벌 테이블과 연결된 로컬 보조 인덱스는 복제된 쓰기 용량 단위를 소비합니다.
프로젝션 속성 글로벌 보조 인덱스 쿼리 또는 스캔에서는 인덱스로 프로젝션되는 속성만 요쳥할 수 있습니다. DynamoDB가 테이블에서는 어떤 속성도 가져오지 않습니다. 로컬 보조 인덱스를 쿼리 또는 스캔하는 경우에는 인덱스로 프로젝션되지 않는 속성만 요쳥할 수 있습니다. DynamoDB가 테이블에서 이러한 속성을 자동으로 가져옵니다.

보조 인덱스가 있는 테이블을 2개 이상 생성하려면 순차적으로 해야 합니다. 예를 들어 첫 번째 테이블을 만들고 테이블이 ACTIVE가 될 때까지 기다리고, 다음 테이블을 만들고 이 테이블이 ACTIVE가 될 때까지 기다리는 방식으로 진행됩니다. 보조 인덱스가 있는 테이블을 2개 이상 동시에 생성하면 DynamoDB에서 LimitExceededException을 반환합니다.

각 보조 인덱스는 연결된 기본 테이블과 동일한 테이블 클래스용량 모드를 사용합니다. 각 보조 인덱스에 대해 다음을 지정해야 합니다.

  • 생성할 인덱스의 유형, 즉 글로벌 보조 인덱스 또는 로컬 보조 인덱스.

  • 인덱스의 이름. 인덱스의 이름 지정 규칙은 Amazon DynamoDB의 서비스, 계정 및 테이블 할당량에 나온 대로 테이블의 경우와 동일합니다. 이름은 연관된 기본 테이블에 대해 고유해야 하지만 다른 기본 테이블과 연관된 인덱스에 동일한 이름을 사용할 수 있습니다.

  • 인덱스의 키 스키마. 인덱스 키 스키마의 모든 속성은 String, Number 또는 Binary 형식의 최상위 속성이어야 합니다. 문서, 집합 등 다른 데이터 형식은 허용되지 않습니다. 키 스키마의 다른 요구 사항은 인덱스 유형에 따라 결정됩니다.

    • 글로벌 보조 인덱스의 경우 파티션 키는 기본 테이블의 스칼라 속성일 수 있습니다. 정렬 키는 선택적이며 역시 기본 테이블의 스칼라 속성일 수 있습니다.

    • 로컬 보조 인덱스의 경우 파티션 키는 기본 테이블의 파티션 키와 동일해야 하며 정렬 키는 키가 아닌 기본 테이블 속성이어야 합니다.

  • 기본 테이블에서 인덱스로 프로젝션할 추가 속성(있는 경우). 테이블 키 속성 외에 이 속성도 모든 인덱스에 자동으로 프로젝션됩니다. 스칼라, 문서, 집합을 포함하여 모든 데이터 형식의 속성을 프로젝션할 수 있습니다.

  • 필요할 경우 인덱스의 프로비저닝 처리량 설정:

    • 글로벌 보조 인덱스의 경우 읽기 및 쓰기 용량 단위 설정을 지정해야 합니다. 이 할당 처리량 설정은 기본 테이블의 설정과 관련이 없습니다.

    • 로컬 보조 인덱스의 경우 읽기 및 쓰기 용량 단위 설정을 지정할 필요가 없습니다. 로컬 보조 인덱스의 읽기 및 쓰기 작업은 기본 테이블의 프로비저닝된 처리량 설정을 활용합니다.

쿼리 유연성을 극대화하도록 테이블당 최대 20개의 글로벌 보조 인덱스(기본 할당량)와 최대 5개의 로컬 보조 인덱스를 생성할 수 있습니다.

다음 AWS 리전의 경우 테이블당 글로벌 보조 인덱스의 할당량은 5개입니다.

  • AWS GovCloud(미국 동부)

  • AWS GovCloud(미국 서부)

  • 유럽(스톡홀름)

테이블의 보조 인덱스에 대한 상세 목록을 가져오려면 DescribeTable 작업을 사용합니다. DescribeTable은 테이블에 있는 모든 보조 인덱스의 이름, 스토리지 크기 및 항목 수를 반환합니다. 이 값은 실시간으로 업데이트되지 않지만 거의 6시간마다 새로 고쳐집니다.

Query 또는 Scan 작업을 사용하여 보조 인덱스의 데이터에 액세스할 수 있습니다. 사용하려는 인덱스의 이름과 기본 테이블의 이름, 결과에 반환할 속성, 적용할 조건 표현식 또는 필터를 지정해야 합니다. DynamoDB는 결과를 오름차순 또는 내림차순으로 반환할 수 있습니다.

테이블을 삭제할 때 테이블과 연관된 모든 인덱스도 삭제됩니다.

모범 사례는 DynamoDB의 보조 인덱스 사용에 대한 모범 사례 단원을 참조하세요.