Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Cloud Firestore의 색인 유형

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

인덱스는 데이터베이스 성능에 중요한 요소입니다. 책의 주제를 페이지 번호에 매핑하는 책의 색인과 매우 유사하게 데이터베이스 색인은 데이터베이스의 항목을 데이터베이스의 해당 위치에 매핑합니다. 데이터베이스에 쿼리를 보내면 데이터베이스는 인덱스를 사용하여 요청한 항목의 위치를 ​​빠르게 찾을 수 있습니다.

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

모든 쿼리 뒤의 인덱스

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

인덱스 관리 감소, 앱 개발 증가

Cloud Firestore에는 색인 관리에 소요되는 시간을 줄이는 기능이 포함되어 있습니다. 가장 기본적인 쿼리에 필요한 인덱스가 자동으로 생성됩니다. 앱을 사용하고 테스트할 때 Cloud Firestore는 앱에 필요한 추가 색인을 식별하고 생성 하는 데 도움이 됩니다.

인덱스 유형

Cloud Firestore는 단일 필드복합 이라는 두 가지 유형의 색인을 사용합니다. 인덱싱된 필드 수 외에도 단일 필드 및 복합 인덱스는 관리 방법이 다릅니다.

단일 필드 인덱스

단일 필드 인덱스는 특정 필드를 포함하는 컬렉션의 모든 문서에 대한 정렬된 매핑을 저장합니다. 단일 필드 인덱스의 각 항목은 특정 필드에 대한 문서 값과 데이터베이스의 문서 위치를 기록합니다. Cloud Firestore는 이러한 색인을 사용하여 많은 기본 쿼리를 수행합니다. 데이터베이스의 자동 인덱싱 설정 및 인덱스 면제를 구성하여 단일 필드 인덱스를 관리합니다.

자동 인덱싱

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

  • 각 비배열 및 비맵 필드에 대해 Cloud Firestore는 두 개의 컬렉션 범위 단일 필드 인덱스(하나는 오름차순 모드, 다른 하나는 내림차순 모드)를 정의합니다.

  • 각 맵 필드에 대해 Cloud Firestore는 맵의 각 비배열 및 비맵 하위 필드에 대해 하나의 컬렉션 범위 오름차순 인덱스와 하나의 내림차순 인덱스를 만듭니다.

  • 문서의 각 배열 필드에 대해 Cloud Firestore는 컬렉션 범위 배열 포함 인덱스를 만들고 유지합니다.

  • 컬렉션 그룹 범위가 있는 단일 필드 인덱스는 기본적으로 유지되지 않습니다.

단일 필드 인덱스 예외

단일 필드 색인 면제를 생성하여 자동 색인 설정에서 필드를 면제할 수 있습니다. 인덱싱 면제는 데이터베이스 차원의 자동 인덱스 설정을 재정의합니다. 예외는 자동 인덱싱 설정이 그렇지 않은 경우 단일 필드 인덱스를 활성화하거나 자동 인덱싱이 활성화하는 단일 필드 인덱스를 비활성화할 수 있습니다. 면제가 유용할 수 있는 경우 색인 생성 모범 사례 를 참조하세요.

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

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

복합 인덱스

복합 인덱스는 인덱싱할 정렬된 필드 목록을 기반으로 컬렉션에 있는 모든 문서의 정렬된 매핑을 저장합니다.

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

Cloud Firestore는 가능한 필드 조합이 많기 때문에 단일 필드 색인과 같이 복합 색인을 자동으로 생성하지 않습니다. 대신 Cloud Firestore를 사용하면 앱을 빌드할 때 필요한 복합 색인을 식별하고 생성 할 수 있습니다.

필요한 색인을 먼저 만들지 않고 위의 쿼리를 시도하면 Cloud Firestore에서 누락된 색인을 만들기 위해 따라갈 수 있는 링크가 포함된 오류 메시지를 반환합니다. 이는 인덱스에서 지원하지 않는 쿼리를 시도할 때마다 발생합니다. 콘솔 또는 Firebase CLI 를 사용하여 복합 색인을 수동으로 정의하고 관리할 수도 있습니다. 복합 인덱스 생성 및 관리에 대한 자세한 내용은 인덱스 관리 를 참조하십시오.

인덱스 모드 및 쿼리 범위

단일 필드 및 복합 인덱스를 다르게 구성하지만 둘 다 인덱스에 대한 인덱스 모드 및 쿼리 범위를 구성해야 합니다.

인덱스 모드

인덱스를 정의할 때 각 인덱스 필드에 대한 인덱스 모드를 선택합니다. 각 필드의 인덱스 모드는 해당 필드에서 특정 쿼리 절을 지원합니다. 다음 인덱스 모드 중에서 선택할 수 있습니다.

인덱스 모드 설명
오름차순 필드에서 < , <= , == , >= , > , != , innot-in 쿼리 절을 지원하고 이 필드 값을 기준으로 결과를 오름차순으로 정렬하도록 지원합니다.
내림차순 필드에서 < , <= , == , >= , > , != , innot-in 쿼리 절을 지원하고 이 필드 값을 기준으로 내림차순으로 결과 정렬을 지원합니다.
어레이 포함 필드에서 array-containsarray-contains-any 쿼리 절을 지원합니다.

쿼리 범위

각 인덱스는 컬렉션 또는 컬렉션 그룹으로 범위가 지정됩니다. 이를 인덱스의 쿼리 범위라고 합니다.

컬렉션 범위
Cloud Firestore는 기본적으로 컬렉션 범위로 인덱스를 생성합니다. 이러한 인덱스는 단일 컬렉션에서 결과를 반환하는 쿼리를 지원합니다.

컬렉션 그룹 범위
컬렉션 그룹에는 동일한 컬렉션 ID를 가진 모든 컬렉션이 포함됩니다. 컬렉션 그룹에서 필터링되거나 정렬된 결과를 반환하는 컬렉션 그룹 쿼리 를 실행하려면 컬렉션 그룹 범위가 있는 해당 인덱스를 만들어야 합니다.

기본 순서 및 __name__ 필드

각 필드(오름차순 또는 내림차순)에 지정된 인덱스 모드로 문서를 정렬하는 것 외에도 인덱스는 각 문서의 __name__ 필드로 최종 정렬을 적용합니다. __name__ 필드의 값은 전체 문서 경로로 설정됩니다. 즉, 필드 값이 동일한 결과 집합의 문서가 문서 경로별로 정렬됩니다.

기본적으로 __name__ 필드는 인덱스 정의에서 마지막으로 정렬된 필드와 같은 방향으로 정렬됩니다. 예를 들어:

수집 인덱싱된 필드 쿼리 범위
도시 이름, __이름 __name__ 수집
도시 상태, __name__ 수집
도시 국가, 인구, __name__ 수집

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

인덱싱 예시

Cloud Firestore는 단일 필드 인덱스를 자동으로 생성하여 애플리케이션이 가장 기본적인 데이터베이스 쿼리를 신속하게 지원할 수 있도록 합니다. 단일 필드 인덱스를 사용하면 필드 값과 비교기 < , <= , == , >= , >in 기반으로 간단한 쿼리를 수행할 수 있습니다. 배열 필드의 경우 array-containsarray-contains-any 쿼리를 수행할 수 있습니다.

설명을 위해 인덱스 생성의 관점에서 다음 예를 검토하십시오. 다음 스니펫은 cities 모음에 몇 개의 city 문서를 생성하고 각 문서에 대해 name , state , country , capital , populationtags 필드를 설정합니다.

편물
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개, 배열 필드에 대해 하나의 배열 포함 단일 필드 인덱스를 업데이트합니다. 다음 표의 각 행은 단일 필드 인덱스의 항목을 나타냅니다.

수집 인덱싱된 필드 쿼리 범위
도시 이름 수집
도시 상태 수집
도시 국가 수집
도시 자본 수집
도시 인구 수집
도시 이름 수집
도시 상태 수집
도시 국가 수집
도시 자본 수집
도시 인구 수집
도시 array-contains 영역 수집

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

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

편물
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 )를 사용하므로 이 필드에 대해 오름차순 또는 내림차순 인덱스 모드를 사용할 수 있습니다. 기본적으로 inequality 절은 inequality 절의 필드를 기반으로 오름차순 정렬 순서를 적용합니다.

수집 인덱싱된 필드 쿼리 범위
도시 (또는 ) 국가, 인구 수집

동일한 쿼리를 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")
수집 인덱싱된 필드 쿼리 범위
도시 국가, 인구 수집
도시 국가 , 인구 수집

또한 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)
수집 인덱싱된 필드 쿼리 범위
도시 array-contains tags, (또는 ) 대문자 수집

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

컬렉션 그룹 범위가 있는 인덱스를 시연하기 위해 일부 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 컬렉션을 쿼리할 수 있습니다.

수집 인덱싱된 필드 쿼리 범위
랜드마크 (또는 ) 범주 수집
편물
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

이제 모든 도시의 랜드마크를 쿼리하는 데 관심이 있다고 가정해 보겠습니다. 모든 landmarks 컬렉션으로 구성된 컬렉션 그룹에서 이 쿼리를 실행하려면 컬렉션 그룹 범위가 있는 landmarks 단일 필드 인덱스를 활성화해야 합니다.

수집 인덱싱된 필드 쿼리 범위
랜드마크 (또는 ) 범주 컬렉션 그룹

이 인덱스를 사용하면 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"]

단일 필드 인덱스

  • 도시_이름 ASC
  • city_name 내림차순
  • 온도.여름 ASC
  • 온도.여름 DESC
  • 온도.겨울 ASC
  • 온도.겨울 DESC
  • 이웃 배열 포함(ASC 및 DESC)

복합 인덱스

  • city_name ASC, 이웃 ARRAY
  • city_name DESC, 이웃 ARRAY

색인 항목

이 인덱싱 구성은 문서에 대해 다음과 같은 18개의 인덱스 항목을 생성합니다.

색인 인덱싱된 데이터
단일 필드 색인 항목
도시_이름 ASC city_name: "샌프란시스코"
city_name 내림차순 city_name: "샌프란시스코"
온도.여름 ASC 온도.여름: 67
온도.여름 DESC 온도.여름: 67
온도.겨울 ASC 온도.겨울: 55
온도.겨울 DESC 온도.겨울: 55
이웃 배열 ASC 포함 이웃: "미션"
이웃 배열은 DESC를 포함합니다. 이웃: "미션"
이웃 배열 ASC 포함 동네: "다운타운"
이웃 배열은 DESC를 포함합니다. 동네: "다운타운"
이웃 배열 ASC 포함 동네: "마리나"
이웃 배열은 DESC를 포함합니다. 동네: "마리나"
복합 색인 항목
city_name ASC, 이웃 ARRAY city_name: "샌프란시스코", Neighbors: "미션"
city_name ASC, 이웃 ARRAY city_name: "샌프란시스코", Neighbors: "다운타운"
city_name ASC, 이웃 ARRAY city_name: "샌프란시스코", 이웃: "마리나"
city_name DESC, 이웃 ARRAY city_name: "샌프란시스코", Neighbors: "미션"
city_name DESC, 이웃 ARRAY city_name: "샌프란시스코", Neighbors: "다운타운"
city_name DESC, 이웃 ARRAY city_name: "샌프란시스코", 이웃: "마리나"

인덱스 및 가격

인덱스는 애플리케이션의 스토리지 비용 에 기여합니다. 인덱스의 스토리지 크기를 계산하는 방법에 대한 자세한 내용은 인덱스 항목 크기 를 참조하십시오.

인덱스 병합 활용

Cloud Firestore는 모든 쿼리에 인덱스를 사용하지만 쿼리당 하나의 인덱스가 반드시 필요한 것은 아닙니다. 등호( == ) 절이 여러 개 있고 선택적으로 orderBy 절이 있는 쿼리의 경우 Cloud Firestore는 기존 색인을 재사용할 수 있습니다. Cloud Firestore는 단순 동등성 필터의 색인을 병합하여 더 큰 동등성 쿼리에 필요한 복합 색인을 빌드할 수 있습니다.

인덱스 병합을 활용할 수 있는 상황을 식별하여 인덱싱 비용을 줄일 수 있습니다. 예를 들어 레스토랑 평가 앱에 대한 restaurants 컬렉션을 상상해 보십시오.

  • 레스토랑

    • 버거 타임

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

이제 이 앱이 아래와 같은 쿼리를 사용한다고 상상해 보세요. 앱은 항상 star_rating 을 오름차순으로 정렬하면서 category , cityeditors_pick 에 대해 등호 절의 조합을 사용합니다.

편물
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")

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

수집 인덱싱된 필드 쿼리 범위
레스토랑 카테고리, star_rating 수집
레스토랑 도시, star_rating 수집
레스토랑 카테고리, 도시, star_rating 수집
레스토랑 카테고리, 도시, editors_pick, star_rating 수집

더 나은 솔루션으로 동등 절에 대한 인덱스를 병합하는 Cloud Firestore의 기능을 활용하여 인덱스 수를 줄일 수 있습니다.

수집 인덱싱된 필드 쿼리 범위
레스토랑 카테고리, star_rating 수집
레스토랑 도시, star_rating 수집
레스토랑 editors_pick, star_rating 수집

이 인덱스 집합은 더 작을 뿐만 아니라 추가 쿼리도 지원합니다.

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

인덱싱 제한

인덱스에는 다음 제한이 적용됩니다. 모든 할당량 및 한도는 할당량 및 한도를 참조하세요.

한계 세부
데이터베이스에 대한 최대 복합 인덱스 수

200

지원팀에 문의 하여 이 한도 증가를 요청할 수 있습니다.

데이터베이스에 대한 최대 단일 필드 구성 수

200

총 200개의 필드 수준 구성이 허용됩니다. 하나의 필드 구성은 동일한 필드에 대한 여러 구성을 포함할 수 있습니다. 예를 들어 동일한 필드에 대한 단일 필드 인덱싱 면제 및 TTL 정책은 제한에 대한 하나의 필드 구성으로 계산됩니다.

각 문서의 최대 색인 항목 수

40,000

색인 항목 수는 문서에 대한 다음 항목의 합계입니다.

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

Cloud Firestore가 문서와 인덱스 집합을 인덱스 항목으로 변환하는 방법을 보려면 이 인덱스 항목 수 예 를 참조하세요.

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

7.5KiB

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

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

8MiB

총 크기는 문서에 대한 다음 항목의 합계입니다.

  • 문서의 단일 필드 색인 항목 크기의 합계
  • 문서의 복합 색인 항목 크기의 합계
  • 인덱싱된 필드 값의 최대 크기

    1500바이트

    1500바이트를 초과하는 필드 값은 잘립니다. 잘린 필드 값과 관련된 쿼리는 일관되지 않은 결과를 반환할 수 있습니다.

    인덱싱 모범 사례

    대부분의 앱에서 자동 인덱싱 및 오류 메시지 링크를 사용하여 인덱스를 관리할 수 있습니다. 그러나 다음과 같은 경우 단일 필드 면제를 추가할 수 있습니다.

    사례 설명
    큰 문자열 필드

    쿼리에 사용하지 않는 긴 문자열 값을 자주 보유하는 문자열 필드가 있는 경우 해당 필드를 인덱싱에서 제외하여 스토리지 비용을 절감할 수 있습니다.

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

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

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

    TTL 필드

    TTL(time-to-live) 정책 을 사용하는 경우 TTL 필드는 타임스탬프여야 합니다. TTL 필드에 대한 인덱싱은 기본적으로 활성화되어 있으며 더 높은 트래픽 속도에서 성능에 영향을 미칠 수 있습니다. 가장 좋은 방법은 TTL 필드에 대한 단일 필드 예외를 추가하는 것입니다.

    대형 배열 또는 맵 필드

    큰 배열 또는 맵 필드는 문서당 40,000개의 인덱스 항목 제한에 근접할 수 있습니다. 큰 배열 또는 맵 필드를 기반으로 쿼리하지 않는 경우 인덱싱에서 제외해야 합니다.