Catch up on everthing we announced at this year's Firebase Summit. Learn more

Indexez 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 ce que vos index seront, vous pouvez les définir par la .indexOn règle dans votre base de données en temps réel Firebase Règles de sécurité pour améliorer les performances des requêtes.

Définition d'index de données

Firebase fournit des outils puissants pour la commande et l' interrogation de 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 de n'importe quelle clé enfant commune. Au fur et à mesure que votre application grandit, les performances de cette requête se dégradent. Cependant, si vous indiquez à Firebase les clés que vous interrogerez, Firebase indexera ces clés sur les serveurs, améliorant ainsi les performances de vos requêtes.

Indexation avec orderByChild

La façon la plus simple d'expliquer cela est à travers 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 de faits sur les dinosaures. Nous allons l' utiliser 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 commander les dinosaures par nom, taille et longueur, mais jamais par poids. Nous pouvons améliorer les performances de nos requêtes en communiquant ces informations à Firebase. Étant donné que le nom des dinosaures ne sont que les 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 dire Firebase pour optimiser les requêtes pour la hauteur et la longueur ainsi:

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

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

Indexation avec orderByValue

Dans cet exemple, nous allons vous montrer comment .indexOn fonctionne avec orderByValue() . Disons que nous créons un classement des résultats sportifs de dino avec les données suivantes :

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

Comme nous utilisons orderByValue () pour créer le leaderboard, nous pouvons optimiser nos requêtes en ajoutant une .value règle à notre /scores noeud:

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