javascript - query - Consultas de estilo de base de datos con Firebase
recuperar datos firebase web (3)
¿Existe una forma rápida de realizar consultas de estilo de base de datos con Firebase?
Por ejemplo:
Dado un usuario de referencia de firebase con los campos user_id
, name
y age
, ¿cuál sería la mejor manera de hacer una consulta similar a esta:
SELECT name FROM users WHERE `user_id`=147;
y
SELECT COUNT(*) FROM users WHERE age=21;
Creé mi propio CMS para firebase así que al crear una tabla de los datos de firebase lo filté con esto
var child = ref.child();
var compare;
switch(filter){
case "First_Name":
compare = child.First_Name;
break;
case "Last_Name":
compare = child.Last_Name;
break;
case "Phone_Number":
compare = child.Phone_Number;
break;
case "Department_Number":
compare = child.Department_Number;
break;
case "Position":
compare = child.Position;
break;
case "Status":
compare = child.Status;
break;
case "Tier":
compare = child.Tier;
break;
}
if(compare.match("^" + string)){
//display items
El Sr. Lehenbauer es, por supuesto, el maestro de todas las cosas de Firebase, así que escúchenlo. ;) Sin embargo, este tema en particular es uno en el que he estado trabajando durante un par de semanas.
Estos son algunos de mis comentarios, para mejorar las respuestas de "Ejecutar un servidor por separado" y "Consultar en el lado del cliente":
ElasticSearch (una secuencia de comandos node.js)
Con un script node.js en el servidor, puede tener ElasticSearch integrado y proporcionar algunas búsquedas de contenido sólido en menos de una hora. Aquí hay una publicación de blog y una lib que lo hace aún más fácil: firebase.com/blog/2014-01-02-queries-part-two.html
consultas cacheables / comunes
Estos pueden ser manejados por un proceso de servidor / cron que lee la tabla y duplica los datos. Por ejemplo, supongamos que deseo mostrar "no disponible / disponible" para el nombre de inicio de sesión de un usuario durante el registro, pero almaceno los registros del usuario con una identificación única diferente por algún motivo complejo.
Mi cron / servidor podía leer todos los registros de la tabla de usuarios, luego insertarlos en otra tabla que está almacenada por dirección de correo electrónico, con un valor de identificación de registro del usuario (o cualquier otro dato que yo desee conocer).
Este enfoque de datos duplicados es una técnica de almacenamiento en caché manual y es una práctica común en entornos sin SQL; estamos intercambiando espacio de almacenamiento (que se presume barato y disponible) por la velocidad y los procesos simplificados.
consultas personalizadas (usando una cola)
Las consultas personalizadas se pueden enviar a través de XHR (ajax) directamente a un servidor, lo que podría hacer el trabajo arduo y devolver mejores resultados. Alternativamente, puede utilizar Firebase para conectarse con un servidor de back-end mediante la utilización de una cola.
El cliente coloca la solicitud de consulta como JSON en una tabla especial de Firebase llamada queue
y espera una respuesta.
El servidor escucha queue.on(''child_added'', ...)
y devuelve los datos utilizando `queue_record.child (''response'', ... data here ...)
Esto tiene algunas bonitas ventajas. Por un lado, cualquier cantidad de servidores podría escuchar y dar respuestas, haciendo que el equilibrio de carga sea muy fácil. El código para esto es muy simple de configurar y se cubre en otro hilo aquí en SO.
Espero que esto sea útil!
En general, no. Firebase es esencialmente una "base de datos en tiempo real", que le transmite actualizaciones constantemente a medida que los datos cambian, por lo que es más difícil realizar consultas de propósito general. Por ahora, hay un par de primitivas de consulta (ciertamente limitadas) que se proporcionan. Vea la página de Queries/Limits en los documentos.
A menudo puede evitar estas limitaciones a través de una variedad de enfoques:
- Use los nombres de las ubicaciones y las prioridades de forma inteligente. Si estructura sus datos como / users / [userid] / name, puede realizar su primera "consulta" simplemente recuperando / users / 147 / name. Si sabe que desea consultar por edad, puede usar la edad como prioridad para los nodos de usuario y luego hacer "usersRef.startAt (21) .endAt (21) .on (''child_added'', ...)" para consiga que todos los usuarios tengan 21 años. Aún debe contarlos manualmente.
- Hacer consultas en el lado del cliente. Si todo el conjunto de datos es pequeño, es posible que pueda recuperar todo el conjunto de datos y luego filtrarlo / procesarlo manualmente en el cliente.
- Ejecute un servidor por separado . Se puede conectar a Firebase, sincronizar datos y luego responder "consultas" para los clientes. Todavía se puede comunicar con los clientes a través de Firebase, y Firebase aún puede ser el principal almacén de datos, pero tu servidor por separado puede hacer el trabajo para realizar consultas rápidamente.
Tenemos la intención de mejorar esto con el tiempo, ya que nos damos cuenta de que es un punto débil en comparación con las consultas flexibles proporcionadas por los sistemas de bases de datos relacionales tradicionales.