Firebase te permite hacer consultas ad hoc en tus datos usando una clave secundaria arbitraria. Si sabes con antelación cuáles serán tus índices, puedes definirlos a través de la regla .indexOn
en tus reglas de seguridad de Firebase Realtime Database para mejorar el rendimiento de las consultas.
Define los índices de datos
Firebase proporciona herramientas potentes para ordenar y consultar tus datos. Específicamente, Firebase te permite hacer consultas ad hoc en una colección de nodos con cualquier clave secundaria común. A medida que tu app se expanda, el rendimiento de esta solicitud se reducirá. Sin embargo, si indicas a Firebase las claves que consultarás, Firebase las indexará en los servidores para mejorar el rendimiento de las consultas.
Indexa con orderByChild
La manera más sencilla de explicar esto es a través de un ejemplo. Aquí en Firebase somos amantes de los dinosaurios. A continuación, incluiremos un fragmento de una base de datos de muestra con información sobre 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 app, a menudo debemos ordenar los dinosaurios por nombre, altura y longitud, pero nunca por peso. Para mejorar el rendimiento de nuestras consultas, podemos darle esa información a Firebase. Debido a que los nombres de los dinosaurios son solo las claves, Firebase optimiza con antelación las consultas por nombre del dinosaurio, dado que esta es la clave del registro.
Podemos usar .indexOn
para indicarle a Firebase que también optimice las consultas por altura y longitud.
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Al igual que otras reglas, puedes especificar una regla de .indexOn
en cualquier nivel de tus reglas.
En el ejemplo anterior, la ubicamos en el nivel de raíz, ya que todos los datos de dinosaurios se almacenan en la raíz de la base de datos.
Indexa con orderByValue
En este ejemplo, demostraremos cómo funciona .indexOn
con orderByValue()
.
Supongamos que creamos una tabla de clasificación con puntuaciones de deportes de dinosaurios que incluye los siguientes datos:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Debido a que usamos orderByValue() para crear la tabla de clasificación, podemos agregar una regla .value
a nuestro nodo /scores
para optimizar nuestras consultas:
{ "rules": { "scores": { ".indexOn": ".value" } } }