입문3분 분량

DynamoDB의 GSI 대 LSI

글로벌 보조 인덱스(GSI)와 로컬 보조 인덱스(LSI) 둘 다 테이블의 키가 아닌 속성으로 Query할 수 있게 해 줍니다. 이 둘은 서로 대체할 수 없습니다 — 그 차이가 어떤 패턴에 어느 것이 필요한지를 결정합니다.

DynamoDB에서 GSI와 LSI의 차이는 무엇인가요?

글로벌 보조 인덱스는 어떤 최상위 스칼라 속성(String, Number, Binary)이든 파티션 키로 쓸 수 있고, 자체 용량을 가지며, 언제든 추가할 수 있습니다 — 다만 최종적 일관성 읽기만 제공합니다. 로컬 보조 인덱스는 테이블의 같은 파티션 키를 다른 정렬 키와 함께 유지하고, 강력한 일관성 읽기를 지원하며 테이블의 용량을 공유하지만, 테이블과 함께 생성해야 합니다.

중요한 차이들

GSILSI
파티션 키어떤 스칼라든 (S/N/B)테이블과 같음
정렬 키어떤 스칼라든 (S/N/B)어떤 스칼라든 (S/N/B)
생성 시점언제든테이블 생성 시에만
일관성최종적 일관성만강력한 일관성 가능
용량자체 용량테이블의 용량을 공유
쓰기 전파비동기(최종적)동기(원자적)
테이블당 최대20(기본값, 상향 가능)5(고정)
10 GB 파티션 상한없음있음(PK당)

어림 규칙

  • 다른 가 필요한가요(예: 주문을 customer가 아니라 status로 조회)? GSI가 필요합니다 — LSI는 재파티션할 수 없습니다.
  • 같은 파티션 안에서 두 번째 정렬 순서가 필요한가요 — LSI는 테이블의 정확한 파티션 키를 유지하고 오직 다른 정렬 키만 바꿔 넣습니다 — 처음부터 정하고, 읽기와 함께? LSI가 맞습니다.

선택은 하나의 질문으로 압축됩니다 — 어떤 키를 바꾸고 있나요:

YesNo, same PKnew sort keyNeed to queryanother way?Differentpartition key?GSILSIOwn partitionsEventual readsOwn capacityAdd anytimeShared partitionStrong reads OKShared capacityTable-creation only

다른 파티션 키는 GSI를 강제하고, 같은 파티션의 다른 정렬 키가 LSI가 맞는 유일한 경우입니다.

실제로 대부분의 팀은 거의 전적으로 GSI를 꺼내 듭니다: 나중에 추가할 수 있고, 독립적으로 스케일되며, 10 GB 파티션당 한도의 대상이 아니기 때문입니다. 하나의 GSI 키를 오버로드해 여러 패턴을 처리하세요 — 싱글 테이블 디자인을 보세요.

Scan을 없애려고 GSI를 추가한다면, 그것이 자체 읽기/쓰기 용량을 가진다는 점을 기억하세요. 그 추가 비용을 요금 계산기로 산정하고, DynoTable을 사용해 인덱스에 커밋하기 전에 그것의 프로젝션된 속성을 살펴보세요.

업데이트됨