Indexer vos données

Firebase vous permet d'effectuer des requêtes ad hoc sur vos données à l'aide d'une clé enfant arbitraire. Si vous savez à l'avance quels seront vos index, vous pouvez les définir à l'aide de la règle .indexOn dans vos règles de sécurité Firebase Realtime Database pour améliorer les performances des requêtes.

Définir des index de données

Firebase fournit des outils puissants pour trier et interroger vos données. Plus précisément, Firebase vous permet d'effectuer des requêtes ad hoc sur une collection de nœuds à l'aide d'une clé enfant commune. À mesure que votre application se développe, les performances de cette requête se dégradent. Toutefois, si vous indiquez à Firebase les clés que vous allez interroger, Firebase les indexera sur les serveurs, ce qui améliorera les performances de vos requêtes.

Indexer avec orderByChild

Le plus simple est d'expliquer cela à l'aide d'un exemple. Chez Firebase, nous sommes tous d'accord pour dire que les dinosaures sont plutôt cool. Voici un extrait d'un exemple de base de données contenant des informations sur les dinosaures. Nous l'utiliserons pour expliquer comment .indexOn fonctionne avec orderByChild().

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

Imaginons que dans notre application, nous devons souvent trier les dinosaures par nom, taille et longueur, mais jamais par poids. Nous pouvons améliorer les performances de nos requêtes en indiquant ces informations à Firebase. Étant donné que les noms des dinosaures ne sont que des clés, Firebase optimise déjà les requêtes par nom de dinosaure, car il s'agit de la clé de l'enregistrement. Nous pouvons utiliser .indexOn pour indiquer à Firebase d'optimiser également les requêtes par taille et longueur :

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

Comme pour les autres règles, vous pouvez spécifier une .indexOn règle à n'importe quel niveau de vos règles. Nous l'avons placée au niveau racine dans l'exemple ci-dessus, car toutes les données sur les dinosaures sont stockées à la racine de la base de données.

Indexer avec orderByValue

Dans cet exemple, nous allons montrer comment .indexOn fonctionne avec orderByValue(). Supposons que nous créons un classement des scores de sports de dinosaures avec les données suivantes :

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

Étant donné que nous utilisons orderByValue() pour créer le classement, nous pouvons optimiser nos requêtes en ajoutant une .value règle à notre /scores nœud :

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