Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

データのインデックスを作成する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Firebase では、任意の子キーを使用して、データに対してアドホック クエリを実行できます。インデックスがどうなるかが事前にわかっている場合は、Firebase Realtime Database セキュリティ ルールの.indexOnルールを使用してインデックスを定義し、クエリのパフォーマンスを向上させることができます。

データ インデックスの定義

Firebase は、データの順序付けクエリを行うための強力なツールを提供します。具体的には、Firebase では、共通の子キーを使用して、ノードのコレクションに対してアドホック クエリを実行できます。アプリが大きくなるにつれて、このクエリのパフォーマンスは低下します。ただし、クエリするキーについて Firebase に通知すると、Firebase はサーバーでそれらのキーにインデックスを付け、クエリのパフォーマンスを向上させます。

orderByChild によるインデックス作成

これを説明する最も簡単な方法は、例を使用することです。 Firebase の私たち全員が、恐竜がとてもクールであることには同意しています。これは、恐竜の事実のサンプル データベースの抜粋です。これを使用して、 .indexOn が.indexOn orderByChild()でどのように機能するかを説明します。

{
  "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"
    }
  }
}