Firebase e indexação / pesquisa

Estou pensando em usar o Firebase para um aplicativo em que as pessoas usem a pesquisa de texto completo em uma coleção de alguns milhares de objects. Eu gosto da idéia de entregar um aplicativo somente para cliente (não ter que me preocupar em hospedar os dados), mas não tenho certeza de como lidar com a pesquisa. Os dados serão estáticos, portanto, a indexação em si não é um grande problema.

Suponho que precisarei de algum serviço adicional que execute consultas e retorne identificadores de object do Firebase. Posso criar um serviço desse tipo em algum local fixo, mas tenho que me preocupar com a escalabilidade de anúncios de disponibilidade. Embora eu não espere muito tráfego para este aplicativo, ele pode chegar a alguns milhares de usuários simultâneos.

Pensamentos arquitectónicos?

A longo prazo, o Firebase terá consultas mais avançadas, então, esperamos que ele suporte esse tipo de coisa diretamente, sem que você precise fazer nada de especial. Até lá, você tem algumas opções:

  1. Escreva o código do servidor para lidar com a pesquisa. A maneira mais fácil seria executar algum código de servidor responsável pela indexação / pesquisa, como você mencionou. O Firebase tem um cliente Node.JS, de modo que seria uma maneira fácil de conectar o serviço ao Firebase. Toda a transferência de dados ainda pode acontecer por meio do Firebase, mas você escreveria um serviço Node.JS que procura “solicitações de pesquisa” do cliente em um local designado no Firebase e “responde” gravando o conjunto de resultados no Firebase, para o cliente para consumir.
  2. Armazene o índice no Firebase com os clientes atualizando-o automaticamente. Se você quiser ser realmente inteligente, pode tentar implementar um esquema sem servidor em que os clientes indexam automaticamente seus dados à medida que eles são gravados … Assim, o índice da pesquisa de texto completo será armazenado no Firebase e quando um cliente gravar um novo item para a coleção, seria responsável por atualizar também o índice apropriadamente. E para fazer uma pesquisa, o cliente consumiria diretamente o índice para construir o conjunto de resultados. Isso realmente faz muito sentido para casos simples em que você deseja indexar um campo de um object complexo armazenado no Firebase, mas para a pesquisa de texto completo, isso provavelmente seria bastante complicado. 🙂
  3. Armazene o índice no Firebase com o código do servidor atualizando-o. Você pode tentar uma abordagem híbrida em que o índice é armazenado no Firebase e usado diretamente pelos clientes para fazer pesquisas, mas em vez de fazer com que os clientes atualizem o índice, você terá um código do servidor que atualiza o índice sempre que novos itens forem adicionados à coleção . Dessa forma, os clientes ainda podem pesquisar dados quando o servidor está inativo. Eles só podem obter resultados obsoletos até que o seu servidor recupere a indexação.

Até que o Firebase tenha uma consulta mais avançada, # 1 é provavelmente sua melhor opção se você estiver disposto a executar um pequeno código de servidor. 🙂

O método atual do Google para fazer pesquisas de texto completo parece estar sincronizando com Algolia ou BigQuery com o Cloud Functions for Firebase .

Veja o exemplo de integração de pesquisa de texto completo da Algolia do Firebase e seu exemplo de integração do BigQuery que pode ser estendido para oferecer suporte à pesquisa completa.