General Guidelines for Secondary Indexes in DynamoDB - Amazon DynamoDB

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

General Guidelines for Secondary Indexes in DynamoDB

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

  • Global secondary index—An index with a partition key and a sort key that can be different from those on the base table. A global secondary index is considered "global" because queries on the index can span all of the data in the base table, across all partitions. A global secondary index has no size limitations and has its own provisioned throughput settings for read and write activity that are separate from those of the table.

  • Local secondary index—An index that has the same partition key as the base table, but a different sort key. A local secondary index is "local" in the sense that every partition of a local secondary index is scoped to a base table partition that has the same partition key value. As a result, the total size of indexed items for any one partition key value can't exceed 10GB. Also, a local secondary index shares provisioned throughput settings for read and write activity with the table it is indexing.

DynamoDB의 각 테이블은 최대 20개의 글로벌 보조 인덱스(기본 할당량)와 5개의 로컬 보조 인덱스를 가질 수 있습니다.

글로벌 보조 인덱스와 로컬 보조 인덱스의 차이에 대한 자세한 내용은 보조 인덱스를 사용하여 데이터 액세스 향상를 참조하십시오.

일반적으로 로컬 보조 인덱스보다 글로벌 보조 인덱스를 사용해야 합니다. 단 쿼리 결과에 높은 일관성이 필요한 경우는 예외입니다. 로컬 보조 인덱스는 높은 일관성을 제공할 수 있지만, 글로벌 보조 인덱스는 이것이 불가능합니다(글로벌 보조 인덱스 쿼리는 최종 일관성만 지원).

다음은 DynamoDB에 인덱스를 생성할 때 유의해야 할 몇 가지 일반 원칙과 설계 패턴입니다.

Use Indexes Efficiently

Keep the number of indexes to a minimum. 자주 쿼리하지 않는 속성에 2차 인덱스를 생성하지 마십시오. 거의 사용하지 인덱스는 애플리케이션 성능 향상에 도움을 주지 못하며, 스토리지 및 IO 비용을 높입니다.

Choose Projections Carefully

보조 인덱스는 스토리지 및 프로비저닝된 처리량을 이용하므로 인덱스를 가능한 한 작은 크기로 유지해야 합니다. 또한 인덱스 크기가 작을수록 전체 테이블에서 쿼리하는 데 비해 성능면에서 훨씬 큰 이점이 있습니다. 일반적으로 쿼리에서 속성의 작은 하위 집합만 반환하고 해당 속성의 총 크기가 전체 항목보다 훨씬 작은 경우, 정기적으로 요청할 속성만 프로젝션하십시오.

테이블에서 쓰기 작업이 읽기에 비해 많을 것으로 예상되는 경우, 다음 모범 사례를 적용합니다.

  • Consider projecting fewer attributes to minimize the size of items written to the index. However, this only applies if the size of projected attributes would otherwise be larger than a single write capacity unit (1 KB). For example, if the size of an index entry is only 200 bytes, DynamoDB rounds this up to 1 KB. In other words, as long as the index items are small, you can project more attributes at no extra cost.

  • Avoid projecting attributes that you know will rarely be needed in queries. Every time you update an attribute that is projected in an index, you incur the extra cost of updating the index as well. You can still retrieve non-projected attributes in a Query at a higher provisioned throughput cost, but the query cost may be significantly lower than the cost of updating the index frequently.

  • Specify ALL only if you want your queries to return the entire table item sorted by a different sort key. Projecting all attributes eliminates the need for table fetches, but in most cases, it doubles your costs for storage and write activity.

다음 섹션에서 설명하겠지만, 페치를 최소한으로 유지하는 동시에 인덱스를 가능한 작게 유지해야 합니다.

Optimize Frequent Queries to Avoid Fetches

가장 적은 지연 시간으로 가장 빠른 쿼리를 가져오려면 해당 쿼리가 반환할 것으로 예상되는 모든 속성을 프로젝션하십시오. 특히 프로젝션되지 않은 속성에 대해 로컬 보조 인덱스를 쿼리하면, DynamoDB가 자동으로 테이블에서 이런 속성을 가져오는데, 이 경우 테이블에서 전체 항목을 읽어야 합니다. 이렇게 하면 지연 시간과 추가적인 I/O 작업 발생을 피할 수 없습니다.

종종 '간헐적' 쿼리가 '필수' 쿼리로 변한다는 점을 유의합시오. 간헐적으로만 쿼리할 것으로 예상하기 때문에 프로젝션을 하지 않는 속성이 있다면, 상황이 바뀔지 여부, 속성을 프로젝션하지 않은 것을 후회하게 될지 여부를 고려해야 합니다.

테이블 가져오기에 대한 자세한 내용은 Provisioned Throughput Considerations for Local Secondary Indexes 단원을 참조하십시오.

Be Aware of Item-Collection Size Limits When Creating Local Secondary Indexes

An item collection is all the items in a table and its local secondary indexes that have the same partition key. 항목 모음은 10GB를 초과할 수 없으므로 특정 파티션 키 값에 대한 공간이 부족할 수 있습니다.

테이블 항목을 추가하거나 업데이트하는 경우 DynamoDB는 영향을 받는 모든 로컬 보조 인덱스도 업데이트합니다. 인덱싱된 속성이 테이블에 정의되면 로컬 보조 인덱스 또한 늘어납니다.

로컬 보조 인덱스를 생성할 때, 여기에 기록할 데이터의 양과 동일한 파티션 키 값을 갖게 될 데이터 항목의 수를 고려하십시오. 특정 파티션 키 값에 대한 테이블과 인덱스 항목의 합이 10GB를 초과할 것으로 예상되면 인덱스를 생성하지 않아야 하는지를 고려하십시오.

로컬 보조 인덱스를 반드시 생성해야 한다면 항목 모음 크기 제한을 예상하여 초과되기 전에 조치를 취해야 합니다. 제한값 내에서 작업 및 교정 작업에 대한 전략은 Item Collection Size Limit의 내용을 참조하십시오.