색인 키의 히트맵 패턴

이 페이지에서는 Key Visualizer 히트맵에 표시될 수 있는 패턴 예시를 설명합니다. 이러한 패턴은 특정 성능 문제를 해결하는 데 도움이 될 수 있습니다.

고르게 분산된 사용량

고르게 분산된 읽기 및 쓰기를 보여주는 히트맵

히트맵에 밝고 어두운 색상이 고운 결로 혼합되어 표시되는 경우에는 데이터베이스 전반에서 색인 키의 쓰기/삭제 작업이 고르게 분산된 것입니다. 이 히트맵은 Firestore의 효과적인 사용 패턴을 나타냅니다.

순차 키의 색인

밝은 대각선 하나가 있는 히트맵은 타임스탬프와 같이 엄격하게 증가하거나 감소하는 키에 있는 색인을 나타낼 수 있습니다. 순차 키의 색인은 권장되지 않으며 핫스팟을 만들 수 있습니다. 부하 집중 시 해당하는 지연 시간이 길어질 수 있습니다.

색인에 있는 일반적인 핫스팟의 예시는 다음과 같습니다.

타임스탬프 증가로 인한 부하 집중

타임스탬프 증가로 인한 부하 집중을 보여주는 히트맵

이 예시에서 밝은 대각선 하나가 있는 히트맵은 타임스탬프 필드 이름에서 색인 쓰기/삭제 작업을 엄격하게 늘리거나 줄이는 데 사용하는 데이터베이스를 나타낼 수 있습니다.

필드 이름 증가로 인한 부하 집중

필드 증가로 인한 부하 집중을 보여주는 히트맵

이 예시에서 밝은 대각선 하나가 있는 히트맵은 자동 생성된 인보이스 번호와 같이 증분 필드에서 색인 쓰기/삭제 작업을 엄격하게 늘리거나 줄이는 데 사용하는 데이터베이스를 나타낼 수 있습니다.

부하 집중 문제를 식별하려면 Key Visualizer 도구를 사용하고 색인 키 구조를 이해하여 문제를 일으키는 색인을 결정하고 권장사항에 따라 이러한 색인을 제외합니다.

색인 키 구조 이해

Key Visualizer 도구에 표시되는 색인 키의 구조를 이해하기 전에 Firestore의 색인을 알아보세요.

다음 코드에서는 히트맵에서 영향을 받은 키 범위 위로 마우스를 가져가면 표시되는 색인 키 형식의 예시를 보여줍니다.

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC)
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

각 항목의 의미는 다음과 같습니다.

  • 컬렉션: 데이터베이스에 있는 컬렉션의 위치입니다. 범위에 따라 컬렉션 범위의 컬렉션 경로나 컬렉션 그룹 범위의 컬렉션 이름이 될 수 있습니다.
  • 속성: 색인을 만드는 데 사용된 필드입니다.
  • : 각 속성의 값입니다.
  • 문서: 작업에서 업데이트된 문서의 ID입니다.

앞의 예시에서 속성 값의 필드를 식별하여 영향을 받는 색인을 찾습니다.

색인을 찾으려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.

    데이터베이스로 이동

  2. 데이터베이스 목록에서 필요한 데이터베이스를 선택합니다.

  3. 탐색 메뉴에서 색인을 클릭합니다.

  4. 복합 또는 단일 필드 탭으로 이동합니다.

    속성 필드를 분석하여 색인 유형을 식별할 수 있습니다. 자세한 내용은 색인 키 예시를 참조하세요.

  5. 필터를 클릭하고 필드를 선택한 후 필드 이름을 입력합니다.

    복합 색인의 경우 더 많은 필드를 추가하려면 OR 연산자를 사용합니다.

문제의 원인이 되는 색인을 식별한 후에 다음 솔루션을 사용할 수 있습니다.

  • 복합 색인: 값이 단조 증가 또는 감소하는 필드가 색인 생성의 첫 번째 필드로 선택되지 않도록 색인을 수정하거나 색인을 삭제합니다.

  • 단일 필드 색인: 필드의 예외 및 제외할 정렬 순서를 추가합니다. 자세한 내용은 단일 필드 예외 추가를 참조하세요.

히트맵의 색인 키 항목 예시

유형 설명
컬렉션 범위 단일 필드 색인 ASC, DESC Firestore는 기본적으로 색인을 만들 때 컬렉션 범위를 지정합니다.

Timestamp 필드의 단일 필드 색인의 색인 항목입니다(Users/5000000000000001 문서의 내림차순).
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
배열 필드의 컬렉션 범위 단일 필드 색인 문서의 배열 필드마다 Firestore는 컬렉션 범위 배열 포함 색인을 만들고 유지합니다.

필드 Country: [USA, Japan]이 문서에 추가될 때 생성되는 배열 포함 모드 단일 필드 색인의 색인 항목입니다. 기본적으로 이 필드에 ASC,DESC 색인도 생성됩니다. 이 예시에서는 Country 필드의 ASC 색인을 보여줍니다.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
컬렉션 그룹 단일 필드 색인 ASC, DESC, ARRAY 컬렉션 그룹에는 컬렉션 ID가 같은 모든 컬렉션이 포함되어 있습니다.
Timestamp 필드의 컬렉션 그룹 단일 필드 색인의 색인 항목입니다(내림차순).
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
컬렉션 그룹 단일 필드 색인 ASC, DESC, ARRAY array-contains 모드의 Country 필드에서 컬렉션 그룹 단일 필드 색인의 색인 항목 COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
ASC, ASC, ARRAY 속성이 있는 컬렉션 복합 색인 항목 컬렉션 범위 색인 정의로 중첩된 문서가 생성되면 상위 요소가 있는 복합 색인 항목이 생성됩니다.

TimestampName 필드(오름차순) 및 array-contains 모드의 Country가 있는 복합 색인의 색인 항목
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
ASC, ASC 속성이 있는 컬렉션 그룹 범위 복합 색인 항목 Timestamp 필드(오름차순) 및 Name 필드(오름차순)에서 복합 색인의 색인 항목 COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)

다음 단계