Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

데이터 색인 생성

Firebase는 데이터에 대해 임의의 하위 키를 사용하는 임시 쿼리를 허용합니다. 색인을 미리 계획할 수 있으면 Firebase 실시간 데이터베이스 보안 규칙에서 .indexOn 규칙을 통해 색인을 정의하여 쿼리 성능을 높일 수 있습니다.

데이터 색인 정의

Firebase는 데이터 정렬쿼리를 위한 강력한 도구를 제공합니다. 특히 Firebase는 노드 컬렉션에 대해 임의의 공통 하위 키를 사용한 즉석 쿼리를 허용합니다. 이 쿼리는 앱의 규모가 커질수록 성능이 저하됩니다. 그러나 쿼리 대상 키를 Firebase에 미리 알리면 Firebase가 서버에서 이 키를 색인화하여 쿼리 성능이 향상됩니다.

orderByChild로 색인 생성

예제를 통해 알기 쉽게 설명해 드리겠습니다. Firebase 개발팀 모두는 공룡을 매우 좋아해서 공룡을 예로 들어보겠습니다. 다음은 공룡 자료 샘플 데이터베이스의 스니펫입니다. 이 스니펫을 사용하여 .indexOnorderByChild()를 함께 사용하는 방법을 설명하려 합니다.

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

앱에서 공룡을 이름, 키, 길이 순으로 자주 정렬하지만 무게로는 정렬하지 않는다고 가정하겠습니다. Firebase에 이 정보를 미리 알리면 쿼리의 성능을 높일 수 있습니다. 공룡의 이름 자체가 레코드의 키이므로 Firebase에서 이미 공룡 이름으로 쿼리가 최적화된 상태입니다. .indexOn을 사용하여 Firebase에 높이 및 길이에 대한 쿼리를 최적화하도록 지시할 수도 있습니다.

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

다른 규칙과 마찬가지로 규칙의 모든 수준에서 .indexOn 규칙을 지정할 수 있습니다. 위 예시에서는 모든 공룡 데이터가 데이터베이스의 루트에 저장되어 있으므로 규칙을 루트 수준에 배치했습니다.

orderByValue로 색인 생성

이 예시에서는 .indexOnorderByValue()를 함께 사용하는 방법을 보여줍니다. 다음 데이터로 공룡 운동경기 점수 리더보드를 만든다고 가정해 보겠습니다.

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

orderByValue()를 사용하여 리더보드를 만들려고 하므로 /scores 노드에 .value 규칙을 추가하여 쿼리를 최적화할 수 있습니다.

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}