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 によるインデックス作成
この例では、 .indexOn
がorderByValue()
でどのように機能するかを示します。次のデータを使用して、恐竜スポーツのスコアのリーダーボードを作成しているとします。
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
orderByValue() を使用してリーダーボードを作成しているため、 /scores
ノードに.value
ルールを追加してクエリを最適化できます。
{ "rules": { "scores": { ".indexOn": ".value" } } }、
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 によるインデックス作成
この例では、 .indexOn
がorderByValue()
でどのように機能するかを示します。次のデータを使用して、恐竜スポーツのスコアのリーダーボードを作成しているとします。
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
orderByValue() を使用してリーダーボードを作成しているため、 /scores
ノードに.value
ルールを追加してクエリを最適化できます。
{ "rules": { "scores": { ".indexOn": ".value" } } }