web-dev-qa-db-ja.com

Firebase警告:不特定のインデックスを使用する

JavaScriptからのクエリで使用したすべてのorderByChildについて、Firebaseから次の警告メッセージが表示されます。

FIREBASE警告:不特定のインデックスを使用しています。パフォーマンスを向上させるために、/ tablesの ".indexOn": ""をセキュリティルールに追加することを検討してください

これまでのところ、クエリは非常に高速に実行されたため、indexOnを含める必要はないと思います。負の影響は何だと思いますか?

また、デバッグ中に警告が非常にイライラするので、どのように警告を実際に無効にしますか。

17
hyperfkcb

開発段階にいる場合、違いを感じることはありません。ただし、データが大きくなると、インデックス作成によりクエリを高速化できます。

インデックス作成の利点について詳しく知るには、これをお読みください。 https://firebase.google.com/docs/database/security/indexing-data

警告を無効にすることを知っている限り、firebaseソースコードを編集する必要があります。 コンソールへのすべてのfirebaseロギングを無効にする方法はありますか?

13
Anand Mohan

他の人が言ったように:インデックスを定義しない場合、すべてのフィルタリングはクライアント側で行われます。これは最初の開発ではおそらく問題ありませんが、データを追加するにつれて無駄になります。

問題を修正するには、Firebase Databaseルールで正しいインデックスを定義します。 プロジェクトのFirebaseコンソールのデータベースパネル でルールを変更できます。 Firebaseドキュメントの データインデックスの定義 をご覧ください。

インデックス作成によって何が変わったのかを観察する方法はありますか?

  1. 正しいインデックスを定義すると、警告がJavaScriptコンソールから消えます。
  2. さらに、ブラウザの開発者ツールの[ネットワーク]タブで、Firebaseクライアントとサーバー間のトラフィックを監視できます。正しいインデックスを定義する前に、Firebaseクライアントがその場所のすべてのデータをダウンロードすることがわかります(ローカルでフィルタリングを実行するため)。正しいインデックスを定義すると、Firebaseクライアントはクエリに一致するデータのみをダウンロードすることがわかります。
8

Firebaseは、データの順序付けとクエリのための強力なツールを提供します。インデックスを作成すると、クエリのパフォーマンスが向上します。 dinosaurというテーブルに次のようなデータがあると考えてください。

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

恐竜の身長と長さを(検索して)並べる必要がありますが、重量ではありません。したがって、次のようなdinosaurテーブルのルールを設定する必要があります。

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

Firebaseにこの情報を伝えることにより、Firebaseはこの.indexOn高さと長さのクエリを最適化します。その後、データをクエリするためのFirebaseセキュリティを維持し、クエリのパフォーマンスも改善しました。

5