Firebase le permite realizar consultas ad hoc sobre sus datos utilizando una clave secundaria arbitraria. Si sabe de antemano cuáles serán sus índices, puede definirlos mediante 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 te permite realizar consultas ad hoc en una colección de nodos usando 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 sencilla de explicar esto es mediante 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 datos 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 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 los nombres de los dinosaurios son solo las claves, Firebase ya optimiza las consultas por nombre de dinosaurio, ya que esta es la clave del registro. Podemos usar .indexOn
para indicarle a Firebase que también optimice las consultas en cuanto a 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 los 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 resultados deportivos de dinosaurios con los siguientes datos:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Dado que usamos orderByValue() para crear la tabla de clasificación, podemos optimizar nuestras consultas agregando una regla .value
en nuestro nodo /scores
:
{ "rules": { "scores": { ".indexOn": ".value" } } }