Cloud Firestore의 색인 유형

색인은 데이터베이스 성능에 중요한 요소입니다. 책에 포함된 여러 주제를 페이지 번호에 연결하는 도서 색인처럼 데이터베이스 색인은 데이터베이스의 항목을 데이터베이스의 항목 위치에 매핑합니다. 쿼리하는 경우 데이터베이스는 색인을 사용하여 해당 데이터베이스 또는 표시됩니다.

이 페이지에서는 Cloud Firestore에서 사용하는 두 가지 색인 유형을 설명합니다. 단일 필드 색인복합 색인이 포함되어 있습니다.

색인 정의 및 구조

색인은 지정된 문서의 필드 목록에 정의되며 각 필드에 해당하는 색인 모드를 생성합니다.

색인에는 색인 정의에 이름이 지정된 모든 필드의 항목이 포함됩니다. 이 색인에는 다음을 기준으로 쿼리의 잠재적 결과인 모든 문서가 포함됩니다. 생성합니다. 색인 값이 있는 문서만 색인에 포함됩니다. 인덱스에서 사용되는 모든 필드에 대해 설정됩니다. 색인 정의가 필드를 참조하는 경우 문서에 값이 설정되지 않은 경우 해당 문서는 색인에 표시되지 않습니다. 이 경우에는 색인을 기반으로 하는 쿼리의 결과로 문서가 반환되지 않습니다.

복합 색인은 index 정의

모든 쿼리에 색인 지원

쿼리에 색인이 없으면 대부분의 데이터베이스에서 항목별로 콘텐츠 항목을 크롤링하므로 데이터베이스가 커질수록 처리 속도가 느려집니다. Cloud Firestore는 다음에 대한 색인을 사용하여 높은 쿼리 성능을 보장합니다. 모든 검색어. 따라서 쿼리 성능은 데이터베이스의 항목 수가 아닌 결과 모음의 크기에 따라 달라집니다.

색인 관리 부담을 줄이고 앱 개발에 집중 가능

Cloud Firestore에는 앱 사용 시간을 줄여주는 기능이 포함되어 있습니다 비용을 절감할 수 있습니다 가장 기본적인 쿼리가 자동으로 생성됩니다 앱을 사용하고 테스트하면서 Cloud Firestore는 앱에 필요한 추가 색인을 생성합니다.

색인 유형

Cloud Firestore는 두 가지 색인 유형인 단일 필드복합입니다. 색인이 지정된 필드 수 외에도 단일 필드 색인과 복합 색인은 관리하는 방법이 서로 다릅니다.

단일 필드 색인

단일 필드 색인은 특정 필드가 있는 컬렉션에 모든 문서가 정렬된 매핑을 저장합니다. 단일 필드 색인의 각 항목은 특정 필드의 문서 값 및 데이터베이스 내 해당 문서 위치를 기록합니다. Cloud Firestore는 이러한 색인을 사용하여 여러 작업을 수행합니다. 사용할 수 있습니다. 단일 필드 색인은 데이터베이스의 자동 색인 생성 설정 및 색인 예외를 구성하여 관리할 수 있습니다.

자동 색인 생성

기본적으로 Cloud Firestore는 단일 필드 색인을 자동으로 유지합니다. 을 정의합니다. Cloud Firestore 단일 필드 색인에 다음 기본 설정을 사용합니다.

  • Cloud Firestore는 배열과 맵이 아닌 필드 각각에 대해 2를 정의합니다. 컬렉션 범위 단일 필드 색인, 오름차순 모드로 하나 다른 하나는 내림차순으로 표시합니다.

  • 각 맵 필드에 대해 Cloud Firestore는 다음을 만듭니다.

    • 배열과 맵이 아닌 각 하위 필드에 대한 컬렉션 범위 오름차순 색인 1개.
    • 배열과 맵이 아닌 각 하위 필드에 대한 컬렉션 범위 내림차순 색인 1개.
    • 각 배열 하위 필드에 대한 컬렉션 범위 배열 포함 색인 1개.
    • Cloud Firestore는 각 맵 하위 필드의 색인을 재귀적으로 생성합니다.
  • 문서의 각 배열 필드에 대해 Cloud Firestore는 컬렉션 범위 배열 포함 색인을 유지합니다.

  • 기본적으로 컬렉션 그룹 범위가 지정된 단일 필드 색인은 유지되지 않습니다.

단일 필드 색인 예외

단일 필드 색인 예외를 만들면 자동 색인 생성 설정에서 특정 필드를 제외할 수 있습니다. 색인 생성 예외는 데이터베이스 전체의 자동 색인 설정을 재정의합니다. 예외는 달리 설정하지 않았을 경우 자동 색인 생성 설정을 중지한 단일 필드 색인을 사용 설정하거나 자동 색인 생성 설정을 사용 설정한 단일 필드 색인을 중지합니다. 예외를 유용하게 활용할 수 있는 경우를 확인하려면 색인 생성 권장사항을 참조하세요.

* 필드 경로 값을 사용하여 컬렉션 그룹의 모든 필드에 컬렉션 수준 색인 예외를 추가합니다. 예를 들어 컬렉션 그룹 comments의 경우 comments 컬렉션 그룹의 모든 필드와 일치하도록 필드 경로를 *로 설정하고 컬렉션 그룹에 속한 모든 필드의 색인 생성을 중지합니다. 그런 다음 예외를 추가하여 쿼리에 필요한 필드에 대해서만 색인을 생성할 수 있습니다. 색인이 생성된 필드 수를 줄이면 스토리지 비용이 줄어들고 쓰기 성능이 향상될 수 있습니다.

맵 필드에 단일 필드 색인 예외를 만들면 맵의 하위 필드에서 해당 설정을 상속합니다. 그러나 특정 하위 필드에 대한 단일 필드 색인 예외를 정의할 수 있습니다. 하위 필드의 예외를 삭제하면 하위 필드가 상위 필드의 예외 설정(상위 필드 예외가 있는 경우) 또는 데이터베이스 전체 설정(상위 필드 예외가 없는 경우)을 상속합니다.

단일 필드 색인 예외를 만들고 관리하려면 다음을 참조하세요. 색인 관리

복합 색인

복합 색인은 색인 생성 순서가 지정된 필드 목록에 따라 모든 문서의 정렬된 매핑을 컬렉션에 저장합니다.

Cloud Firestore는 복합 색인을 사용하여 지원합니다. 쿼리가 아직 단일 필드 색인에서 지원되지 않습니다.

Cloud Firestore은(는) 유사한 복합 색인을 자동으로 만들지 않습니다. 단일 필드 색인에 대해 수행하는 작업 조합할 수 있습니다. 대신 Cloud Firestore를 사용하면 이미지를 식별하고 필수 복합 색인을 사용할 수도 있습니다.

색인에서 지원하지 않는 쿼리를 시도할 때마다 Cloud Firestore 오류 메시지를 반환합니다. 이 링크를 클릭하면 누락된 색인

또한 Console이나 Firebase CLI를 사용하여 직접 복합 색인을 정의하고 관리할 수 있습니다. 생성 및 관리 방법에 대한 자세한 내용은 자세한 내용은 색인 관리를 참조하세요.

색인 모드 및 쿼리 범위

단일 필드 색인 및 복합 색인을 구성하는 방법은 각각 다르지만 두 색인 모두 색인 모드와 쿼리 범위를 구성해야 합니다.

색인 모드

색인을 정의할 때 색인이 생성되는 각 필드의 색인 모드를 선택합니다. 각 필드의 색인 모드는 해당 필드의 특정 쿼리 절을 지원합니다. 색인 모드는 다음 중에서 선택할 수 있습니다.

색인 모드 설명
오름차순 필드에서 <, <=, ==, >=, >, !=, in, not-in 쿼리 절을 지원하고 이 필드 값을 기준으로 결과의 오름차순 정렬을 지원합니다.
내림차순 필드에서 <, <=, ==, >=, >, !=, in, not-in 쿼리 절을 지원하고 이 필드 값을 기준으로 결과의 내림차순 정렬을 지원합니다.
배열에 포함 필드에서 array-containsarray-contains-any 쿼리 절을 지원합니다.
Vector 필드에서 FindNearest 쿼리 절을 지원합니다.

쿼리 범위

각 색인의 범위는 컬렉션 또는 컬렉션 그룹 중 하나로 지정됩니다. 이 범위를 색인의 쿼리 범위라고 합니다.

컬렉션 범위
Cloud Firestore는 기본적으로 컬렉션 범위로 색인을 만듭니다. 이러한 색인은 단일 컬렉션의 결과를 반환하는 쿼리를 지원합니다.

컬렉션 그룹 범위
컬렉션 그룹은 컬렉션 ID가 동일한 모든 컬렉션으로 구성됩니다. 컬렉션 그룹에서 필터링된 결과나 순서가 지정된 결과를 반환하는 컬렉션 그룹 쿼리를 실행하려면 컬렉션 그룹 범위에 해당하는 색인을 만들어야 합니다.

기본 순서 지정 및 __name__ 필드

색인은 각 필드에 지정된 색인 모드(오름차순 또는 내림차순)로 문서를 정렬할 뿐만 아니라 각 문서의 __name__ 필드를 기준으로 최종 정렬을 적용합니다. __name__ 필드의 값은 전체 문서 경로로 설정됩니다. 즉, 동일한 필드 값을 가진 결과 세트의 문서는 문서 경로를 기준으로 정렬됩니다.

기본적으로 __name__ 필드는 색인 정의에서 마지막으로 정렬된 필드와 같은 방향으로 정렬됩니다. 예를 들면 다음과 같습니다.

컬렉션 색인이 지정된 필드 쿼리 범위
cities name, __name__ 컬렉션
cities state, __name__ 컬렉션
cities country, population, __name__ 컬렉션

기본이 아닌 __name__ 방향으로 결과를 정렬하려면 해당 색인을 만들어야 합니다.

색인 속성

쿼리를 가장 효율적으로 실행할 수 있는 색인은 다음 속성으로 정의됩니다.

  • 균등 필터에 사용되는 필드
  • 정렬 순서에 사용되는 필드
  • 범위 및 비균등 필터에 사용되는 필드 (정렬 순서에 아직 포함되지 않음)
  • 집계에 사용되는 필드 (정렬 순서, 범위, 비균등 필터에 아직 포함되지 않음)

Cloud Firestore는 다음과 같이 쿼리의 결과를 계산합니다.

  1. 쿼리의 컬렉션, 필터 속성, 필터 연산자, 정렬 순서에 해당하는 색인을 식별합니다.
  2. 스캔이 시작되는 색인 위치를 식별합니다. 시작 위치에는 쿼리의 균등 필터가 접두사로 붙고 첫 번째 orderBy 필드의 범위 및 비균등 필터로 끝납니다.
  3. 색인 스캔을 시작하고 스캔 프로세스가 다음 중 하나를 수행할 때까지 모든 필터를 충족하는 각 문서를 반환합니다.
    • 필터 조건을 충족하지 않는 문서가 발생하여 후속 문서가 필터 조건을 완전히 충족하지 않음을 확인합니다.
    • 색인 끝에 도달합니다.
    • 쿼리에서 요청한 최대 결과 수를 수집합니다.

색인 생성 예시

단일 필드 색인을 자동으로 만들면 Cloud Firestore 애플리케이션에서 대부분의 기본적인 데이터베이스 쿼리를 신속하게 지원할 수 있습니다. 단일 필드 색인을 사용하면 필드 값을 기반으로 간단한 쿼리를 수행할 수 있습니다. 및 비교 연산자 <, <=, ==, >=, >, in가 포함됩니다. 배열 필드의 경우 array-containsarray-contains-any 쿼리를 수행할 수 있습니다

자세히 알아보기 위해 다음 예시를 색인 생성의 관점에서 살펴보겠습니다. 다음 스니펫은 cities 컬렉션에 city 문서를 여러 개 만들고 각 문서에 name, state, country, capital, population, tags 필드를 설정합니다.

var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

자동 색인 생성의 기본 설정이 있다고 가정하면 Cloud Firestore는 배열이 아닌 필드당 오름차순 단일 필드 색인 1개, 내림차순 단일 필드 1개 배열이 아닌 필드당 필드 색인 및 배열 필드입니다. 다음 테이블의 각 행은 단일 필드 색인의 항목을 나타냅니다.

컬렉션 색인이 생성된 필드 쿼리 범위
cities name 컬렉션
cities state 컬렉션
cities country 컬렉션
cities capital 컬렉션
cities population 컬렉션
cities name 컬렉션
cities state 컬렉션
cities country 컬렉션
cities capital 컬렉션
cities population 컬렉션
cities array-contains regions 컬렉션

단일 필드 색인에서 지원하는 쿼리

자동으로 생성된 단일 필드 색인을 사용하여 다음과 같은 간단한 쿼리를 실행할 수 있습니다.

const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

in 및 복합 일치(==) 쿼리를 만들 수도 있습니다.

citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

범위 비교(<, <=, >, >=)를 사용하는 복합 쿼리를 실행해야 하거나 다른 필드로 정렬해야 하는 경우에는 해당 쿼리에 대한 복합 색인을 만들어야 합니다.

array-contains 색인을 사용하면 다음과 같이 regions 배열 필드를 쿼리할 수 있습니다.

citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

복합 색인에서 지원하는 쿼리

Cloud Firestore는 복합 색인을 사용하여 지원합니다. 단일 필드 색인에서 아직 지원하지 않는 복합 쿼리 예를 들어 다음 쿼리의 경우 복합 색인이 필요합니다.

citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

이러한 쿼리에 아래의 복합 색인이 필요합니다. 이 쿼리는 country 필드에 등호(== 또는 in)를 사용하므로 이 필드에 오름차순 또는 내림차순 색인 모드를 사용할 수 있습니다. 기본적으로 불일치 절은 불일치 절의 필드를 기준으로 오름차순 정렬을 적용합니다.

컬렉션 색인이 지정된 필드 쿼리 범위
cities (또는 ) country, population 컬렉션

동일한 쿼리를 내림차순으로 정렬하여 실행하려면 population에 대한 내림차순으로 추가 복합 색인이 있어야 합니다.

citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
컬렉션 색인이 지정된 필드 쿼리 범위
cities country, population 컬렉션
cities country, population 컬렉션

색인 병합으로 인한 성능 손실을 방지하려면 array-contains 또는 array-contains-any 쿼리 결합을 위한 복합 색인 다음과 같은 추가 절이 있습니다.

citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
컬렉션 색인이 지정된 필드 쿼리 범위
cities array-contains 태그, (또는 ) capital 컬렉션

컬렉션 그룹 색인에서 지원하는 쿼리

컬렉션 그룹 범위가 있는 색인을 보여주려면 다음을 추가하세요. landmarks 하위 컬렉션을 city 문서 중 일부에 추가합니다.

var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

컬렉션 범위가 있는 다음 단일 필드 색인을 사용하면 category 필드를 기준으로 단일 도시의 landmarks 컬렉션을 쿼리할 수 있습니다.

컬렉션 색인이 지정된 필드 쿼리 범위
landmarks (또는 ) category 컬렉션
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

예를 들어 모든 도시의 랜드마크를 쿼리하려는 경우 모든 landmarks으로 구성된 컬렉션 그룹에서 이 쿼리를 실행합니다. 컬렉션입니다. 또한 다음을 사용하여 landmarks 단일 필드 색인도 사용 설정해야 합니다. 컬렉션 그룹 범위:

컬렉션 색인이 지정된 필드 쿼리 범위
landmarks (또는 ) category 컬렉션 그룹

이 색인을 사용 설정한 상태에서 landmarks 컬렉션 그룹을 쿼리할 수 있습니다.

var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

필터링 결과나 순서가 지정된 결과를 반환하는 컬렉션 그룹 쿼리를 실행하려면 컬렉션 그룹 범위에 해당하는 단일 필드 색인 또는 복합 색인을 생성해야 합니다. 하지만 결과를 필터링하거나 순서를 지정하지 않는 컬렉션 그룹 쿼리에는 추가로 색인을 정의할 필요가 없습니다.

예를 들어 추가 색인 없이 다음 컬렉션 그룹 쿼리를 실행할 수 있습니다.

db.collectionGroup("landmarks").get()

색인 항목

프로젝트의 구성된 색인과 문서 구조에 따라 문서의 색인 항목 수가 결정됩니다. 색인 항목 수는 색인 항목 수 한도에 반영됩니다.

다음 예시에서는 문서의 색인 항목을 보여줍니다.

문서

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

단일 필드 색인

  • city_name ASC
  • city_name DESC
  • temperatures.summer ASC
  • temperatures.summer DESC
  • temperatures.winter ASC
  • temperatures.winter DESC
  • neighborhoods Array Contains(ASC 및 DESC)

복합 색인

  • city_name ASC, neighborhoods ARRAY
  • city_name DESC, neighborhoods ARRAY

색인 항목

이 색인 구성으로 인해 다음 색인 항목이 생성됩니다. 문서:

색인 색인이 생성된 데이터
단일 필드 색인 항목
city_name ASC city_name: 'San Francisco'
city_name DESC city_name: 'San Francisco'
temperatures.summer ASC temperatures.summer: 67
temperatures.summer DESC temperatures.summer: 67
temperatures.winter ASC temperatures.winter: 55
temperatures.winter DESC temperatures.winter: 55
neighborhoods Array Contains ASC neighborhoods: 'Mission'
neighborhoods Array Contains DESC neighborhoods: 'Mission'
neighborhoods Array Contains ASC neighborhoods: 'Downtown'
neighborhoods Array Contains DESC neighborhoods: 'Downtown'
neighborhoods Array Contains ASC neighborhoods: 'Marina'
neighborhoods Array Contains DESC neighborhoods: 'Marina'
복합 색인 항목
city_name ASC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Mission'
city_name ASC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Downtown'
city_name ASC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Marina'
city_name DESC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Mission'
city_name DESC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Downtown'
city_name DESC, neighborhoods ARRAY city_name: 'San Francisco', neighborhoods: 'Marina'

색인 및 가격 책정

색인 비용은 애플리케이션의 스토리지 비용에 추가됩니다. 색인의 스토리지 크기를 계산하는 방법에 대한 자세한 내용은 다음을 참조하세요. 색인 항목 크기.

색인 병합 사용

Cloud Firestore는 모든 쿼리에 색인을 사용하지만, 그렇지는 않습니다. 쿼리당 하나의 색인이 필요합니다. 여러 동등성이 있는 쿼리의 경우 (==) 절 및 orderBy 절(선택사항) Cloud Firestore은 기존 색인을 재사용할 수 있습니다 Cloud Firestore는 간단한 더 큰 동등성에 필요한 복합 색인을 빌드하는 균등 필터 쿼리합니다.

색인을 사용할 수 있는 상황을 식별하여 색인 생성 비용을 줄일 수 있습니다. 있습니다. 예를 들어 레스토랑 별점 앱의 restaurants 컬렉션을 가정해 보겠습니다.

  • restaurants

    • burgerthyme

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

이 앱은 다음과 같은 쿼리를 사용합니다. 앱이 균등의 조합을 사용함 category, city, editors_pick 절을 사용하며 항상 기준 정렬 오름차순 star_rating:

db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

각 쿼리에 대한 색인을 만들 수 있습니다.

컬렉션 색인이 지정된 필드 쿼리 범위
restaurants category, star_rating 컬렉션
restaurants city, star_rating 컬렉션
restaurants category, city, star_rating 컬렉션
restaurants category, city, editors_pick, star_rating 컬렉션

더 좋은 방법은 Cloud Firestore의 병합 기능을 활용하여 색인의 등호 절의 색인:

컬렉션 색인이 지정된 필드 쿼리 범위
restaurants category, star_rating 컬렉션
restaurants city, star_rating 컬렉션
restaurants editors_pick, star_rating 컬렉션

색인 모음의 크기가 더 작을 뿐만 아니라 추가 쿼리도 지원합니다.

db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

색인 생성 한도

색인에 대한 한도는 다음과 같습니다. 할당량 및 한도에 대한 자세한 내용은 다음을 참조하세요. 할당량 및 한도

한도 세부정보
데이터베이스의 최대 복합 색인 수
데이터베이스의 최대 단일 필드 구성 수

하나의 필드 수준 구성은 동일한 필드에 여러 구성을 포함할 수 있습니다. 예를 들어 동일한 필드의 단일 필드 색인 생성 예외와 TTL 정책은 한도에서 1개의 필드 구성으로 집계됩니다.

각 문서의 최대 색인 항목 수

40,000개

색인 항목 수는 문서 내 다음 항목의 총합입니다.

  • 단일 필드 색인 항목 수
  • 복합 색인 항목 수

Cloud Firestore이(가) 문서 및 데이터 집합을 어떻게 반환하는지 확인하려면 색인 항목 색인에 대한 자세한 내용은 다음을 참조하세요. 색인 항목 개수 예시를 참조하세요.

복합 색인의 최대 필드 수 100개
색인 항목의 최대 크기

7.5KiB

Cloud Firestore가 색인 항목 크기를 계산하는 방법은 다음을 참고하세요. 색인 항목 크기.

문서의 색인 항목 크기 최대 총합

8MiB

전체 크기는 문서 내 다음 항목의 총합입니다.

  • 문서의 단일 필드 색인 항목 크기 총합
  • 문서의 복합 색인 항목 크기 총합
  • 색인이 지정된 필드 값의 최대 크기

    1,500바이트

    1,500바이트를 초과하는 필드 값은 잘립니다. 잘린 필드 값을 포함하는 쿼리는 일관성 없는 결과를 반환할 수 있습니다.

    색인 생성 권장사항

    대부분의 앱에서는 자동 색인 생성 및 오류 메시지 링크를 사용하여 색인을 관리할 수 있습니다. 하지만 다음과 같은 경우에는 단일 필드 예외를 추가할 수 있습니다.

    케이스 설명
    큰 문자열 필드

    쿼리에 사용하지 않는 긴 문자열 값이 포함된 문자열 필드가 있는 경우 색인 생성에서 해당 필드를 제외하여 스토리지 비용을 줄일 수 있습니다.

    순차 값이 있는 문서를 포함하는 컬렉션에 대한 높은 쓰기 속도

    타임스탬프처럼 컬렉션 내 문서 간 순차적으로 증가하거나 감소하는 필드에 색인을 생성하는 경우 컬렉션에 대한 최대 쓰기 속도는 초당 500회입니다. 순차 값이 있는 필드를 기준으로 쿼리하지 않는 경우 색인 생성에서 이 필드를 제외하여 이 한도를 우회할 수 있습니다.

    예를 들어 쓰기 속도가 높은 IoT 사용 사례에서 타임스탬프 필드가 있는 문서가 포함된 컬렉션은 초당 500회 한도에 근접할 수 있습니다.

    TTL 필드

    TTL(수명) 정책을 사용하는 경우 TTL 필드는 타임스탬프여야 합니다. TTL 필드 색인 생성은 기본적으로 사용 설정되며 트래픽 속도가 빨라지면 성능에 영향을 줄 수 있습니다. TTL 필드에 단일 필드 예외를 추가하는 것이 좋습니다.

    큰 배열 또는 맵 필드

    큰 배열 또는 맵 필드는 문서당 색인 한도인 40,000개에 근접할 수 있습니다. 큰 배열 또는 맵 필드를 기준으로 쿼리하지 않는 경우 색인 생성에서 큰 배열 또는 맵 필드를 제외해야 합니다.

    여러 필드에서 범위 및 부등 연산자가 있는 쿼리를 사용하는 경우 색인 생성 고려사항을 살펴보겠습니다. Cloud Firestore 쿼리의 성능 및 비용

    색인 생성 문제 (색인 팬아웃, INVALID_ARGUMENT 오류)를 해결하는 방법에 대한 자세한 내용은 문제 해결 페이지를 참고하세요.