2012-05-11 28 views
26

Estoy considerando utilizar Firebase para una aplicación que debe utilizar las personas para utilizar la búsqueda de texto completo sobre una colección de unos pocos miles de objetos. Me gusta la idea de entregar una aplicación solo para el cliente (sin tener que preocuparme por alojar los datos), pero no estoy seguro de cómo manejar la búsqueda. Los datos serán estáticos, por lo que la indexación en sí no es un gran problema.Firebase e indexación/búsqueda

Supongo que necesitaré algún servicio adicional que ejecute consultas y devuelva identificadores de objetos de Firebase. Puedo hacer girar un servicio de este tipo en una ubicación fija, pero luego tengo que preocuparme por su disponibilidad y escalabilidad de anuncios. Aunque no espero demasiado tráfico para esta aplicación, puede alcanzar un máximo de un par de miles de usuarios simultáneos.

¿Pensamientos arquitectónicos?

Respuesta

27

A largo plazo, Firebase tendrá consultas más avanzadas, por lo que es de esperar que admita este tipo de cosas directamente sin tener que hacer nada especial. Hasta entonces, tiene algunas opciones:

  1. Escriba el código del servidor para manejar la búsqueda. La manera más fácil sería ejecutar algún código de servidor responsable de la indexación/búsqueda, como usted mencionó. Firebase tiene un cliente Node.JS, por lo que sería una manera fácil de conectar el servicio a Firebase. Toda la transferencia de datos aún podría realizarse a través de Firebase, pero escribirías un servicio Node.JS que vigilara las "solicitudes de búsqueda" de clientes en alguna ubicación designada en Firebase y luego "responde" escribiendo el resultado en Firebase, para el cliente para consumir
  2. Almacene el índice en Firebase con los clientes actualizándolo automáticamente. Si quiere ser realmente inteligente, podría intentar implementar un esquema sin servidor donde los clientes indexen automáticamente sus datos a medida que lo escriben ... De modo que el índice para la búsqueda de texto completo se almacenara en Firebase, y cuando un cliente escribe un nuevo elemento en la colección, sería responsable también de actualizar el índice de manera apropiada. Y para hacer una búsqueda, el cliente consumiría directamente el índice para construir el conjunto de resultados. Esto realmente tiene mucho sentido para los casos simples en los que desee indexar un campo de un objeto complejo almacenado en Firebase, pero para la búsqueda de texto completo, esto probablemente sea bastante desagradable. :-)
  3. Almacene el índice en Firebase con el código del servidor actualizándolo. Podría intentar un enfoque híbrido donde el índice se almacena en Firebase y los clientes lo usan directamente para realizar búsquedas, pero en lugar de que los clientes actualicen el índice, tendría un código de servidor que actualice el índice cada vez que se agreguen nuevos elementos al colección. De esta forma, los clientes aún pueden buscar datos cuando su servidor no funciona. Es posible que obtengan resultados obsoletos hasta que su servidor se ponga al día con la indexación.

Hasta que Firebase tenga consultas más avanzadas, el número 1 es probablemente la mejor opción si está dispuesto a ejecutar un pequeño código de servidor. :-)

+1

Vaya. Simplemente vuelve a leer tu comentario de que tus datos son estáticos. En ese caso, la opción n. ° 2 no es necesaria y la opción n. ° 3 se vuelve más fácil. Aún debe averiguar cómo crear el índice de búsqueda de texto completo, almacenarlo en Firebase y hacer que los clientes lo consulten directamente, pero debe ser totalmente factible. –

+0

Gracias por confirmar que no me estaba perdiendo algo obvio.Creo que # 1 es probablemente la manera correcta de hacerlo. Volver a implementar un índice de texto completo en JavaScript no parece ser un buen uso de mi tiempo :-) –

+0

Eche un vistazo a http://lunrjs.com/ para una solución completa de indexación de texto completo basada en JS. – Nemo