색인 생성 개요

색인은 데이터베이스 성능에 중요한 요소입니다. 책에 포함된 여러 주제를 페이지 번호에 연결하는 도서 색인처럼 데이터베이스 색인은 데이터베이스의 항목을 데이터베이스의 항목 위치에 매핑합니다. 데이터베이스에 쿼리를 보내면 데이터베이스가 색인을 사용하여 요청한 항목의 위치를 빠르게 찾을 수 있습니다.

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

모든 쿼리에 색인 지원

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

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

Firestore에는 색인을 관리하는 데 필요한 시간을 줄여주는 기능이 포함되어 있습니다. 대부분의 기본 쿼리에 필요한 색인은 자동으로 생성됩니다. 앱을 사용하고 테스트할 때 Firestore를 사용하면 앱에 필요한 추가 색인을 식별하고 만들 수 있습니다.

색인 유형

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

단일 필드 색인

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

자동 색인 생성

Firestore는 기본적으로 문서의 각 필드와 맵의 각 하위 필드에 대한 단일 필드 색인을 자동으로 유지합니다. Firestore는 단일 필드 색인에 다음 기본 설정을 사용합니다.

  • 배열과 맵이 아닌 필드의 경우 Firestore는 컬렉션 범위 단일 필드 색인 두 개 중 하나를 오름차순 모드로, 다른 하나를 내림차순 모드로 정의합니다.

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

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

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

단일 필드 색인 예외

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

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

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

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

복합 색인

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

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

Firestore에서는 단일 필드 색인과는 달리 복합 색인을 자동으로 만들지 않습니다. 가능한 필드 조합 수가 많기 때문입니다. 대신 Firestore를 통해 앱을 빌드할 때 필요한 복합 색인을 식별하고 만들 수 있습니다.

필수 색인부터 만들지 않고 위의 쿼리를 시도하면 Firestore에서 링크가 포함된 오류 메시지를 반환합니다. 이 링크로 이동하면 누락된 색인을 만들 수 있습니다. 색인에서 지원하지 않는 쿼리를 시도할 때마다 이러한 오류가 발생합니다. 또한 Console이나 Firebase CLI를 사용하여 직접 복합 색인을 정의하고 관리할 수 있습니다. 복합 색인 생성 및 관리에 대한 자세한 내용은 색인 관리를 참조하세요.

색인 모드 및 쿼리 범위

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

색인 모드

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

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

쿼리 범위

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

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

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

기본 순서 및 __name__ 필드

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

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

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

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

색인 생성 예시

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"] });

자동 색인 생성의 기본 설정을 가정할 때 Firestore는 배열이 아닌 필드마다 오름차순 단일 필드 색인 한 개, 배열이 아닌 필드마다 내림차순 단일 필드 색인 한 개, 배열 필드에 배열 포함 단일 필드 색인 한 개를 업데이트합니다. 다음 표의 각 행은 단일 필드 색인의 항목을 나타냅니다.

컬렉션 색인이 생성된 필드 쿼리 범위
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"])

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

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 컬렉션

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

컬렉션 그룹 범위가 지정된 색인에 대해 알아보기 위해 몇 가지 city 문서에 landmarks 하위 컬렉션을 추가한다고 가정해 보겠습니다.

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"])

이제 모든 cities의 landmarks를 쿼리하려고 한다고 가정해 보겠습니다. 모든 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

색인 항목

이 색인 구성은 문서에 다음 색인 항목 18개를 생성합니다.

색인 색인이 생성된 데이터
단일 필드 색인 항목
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'

색인 및 가격 책정

색인 비용은 애플리케이션의 스토리지 비용에 추가됩니다. 색인의 스토리지 크기가 계산되는 방식을 자세히 알아보려면 색인 항목 크기를 참조하세요.

색인 병합 활용

Firestore는 모든 쿼리에 색인을 사용하지만 쿼리마다 색인이 하나씩 필요한 것은 아닙니다. 동등(==) 절 여러 개와 orderBy 절(선택사항)이 있는 쿼리의 경우 Firestore는 기존 색인을 재사용할 수 있습니다. 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 컬렉션

보다 나은 방법으로는 Firestore의 동등 절 색인 병합 기능을 활용하여 색인 수를 줄일 수 있습니다.

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

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

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

색인 생성 한도

색인에 대한 한도는 다음과 같습니다. 모든 할당량과 한도는 할당량 및 한도를 참조하세요.

이 페이지에서는 Firestore의 요청 할당량과 한도에 대해 다룹니다.

한도 세부정보
데이터베이스의 최대 복합 색인 수
데이터베이스의 최대 단일 필드 구성 수
  • Google Cloud 프로젝트에 결제를 사용 설정하지 않은 경우 200입니다.

    할당량이 더 필요하다면 Google Cloud 프로젝트에 결제를 사용 설정해야 합니다.

  • Google Cloud 프로젝트에 결제를 사용 설정한 경우 500입니다.

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

각 문서의 최대 색인 항목 수

40,000개

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

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

Firestore에서 문서 및 색인 집합을 색인 항목으로 전환하는 방식을 확인하려면 색인 항목 개수 예시를 참조하세요.

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

7.5KiB

Firestore에서 색인 항목 크기를 계산하는 방식을 확인하려면 색인 항목 크기를 참조하세요.

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

8MiB

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

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

    1,500바이트

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

    색인 생성 권장사항

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

    케이스 설명
    큰 문자열 필드

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

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

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

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

    TTL 필드

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

    큰 배열 또는 맵 필드

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

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