Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Indexe sus datos

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Firebase le permite realizar consultas ad-hoc en sus datos utilizando una clave secundaria arbitraria. Si sabe de antemano cuáles serán sus índices, puede definirlos a través de la regla .indexOn en sus Reglas de seguridad de la base de datos en tiempo real de Firebase para mejorar el rendimiento de las consultas.

Definición de índices de datos

Firebase proporciona herramientas poderosas para ordenar y consultar sus datos. Específicamente, Firebase le permite realizar consultas ad-hoc en una colección de nodos utilizando cualquier clave secundaria común. A medida que su aplicación crece, el rendimiento de esta consulta se degrada. Sin embargo, si le informa a Firebase sobre las claves que consultará, Firebase indexará esas claves en los servidores, lo que mejorará el rendimiento de sus consultas.

Indexación con orderByChild

La forma más fácil de explicar esto es a través de un ejemplo. Todos nosotros en Firebase estamos de acuerdo en que los dinosaurios son geniales. Aquí hay un fragmento de una base de datos de muestra de hechos de dinosaurios. Lo usaremos para explicar cómo funciona .indexOn con orderByChild() .

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

Imaginemos que en nuestra aplicación muchas veces necesitamos ordenar los dinosaurios por nombre, altura y longitud, pero nunca por peso. Podemos mejorar el rendimiento de nuestras consultas diciéndole a Firebase esta información. Dado que el nombre de los dinosaurios son solo las claves, Firebase ya optimiza para consultas por nombre de dinosaurio, ya que esta es la clave del registro. Podemos usar .indexOn para decirle a Firebase que también optimice las consultas de altura y longitud:

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

Al igual que otras reglas, puede especificar una regla .indexOn en cualquier nivel de sus reglas. Lo colocamos en el nivel raíz para el ejemplo anterior porque todos los datos de dinosaurios se almacenan en la raíz de la base de datos.

Indexación con orderByValue

En este ejemplo, demostraremos cómo funciona .indexOn con orderByValue() . Digamos que estamos haciendo una tabla de clasificación de puntajes deportivos de dinosaurios con los siguientes datos:

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

Como estamos usando orderByValue() para crear la tabla de clasificación, podemos optimizar nuestras consultas agregando una regla .value en nuestro nodo /scores :

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