Firebase и индексирование/поиск

Я рассматриваю использование Firebase для приложения, которое должно заставить людей использовать полнотекстовый поиск по коллекции из нескольких тысяч объектов. Мне нравится идея предоставления клиентского приложения (не беспокоясь о размещении данных), но я не уверен, как обращаться с поиском. Данные будут статичными, поэтому сама индексация не является большой проблемой.

Я предполагаю, что мне понадобится дополнительная служба, которая запускает запросы и возвращает дескрипторы объектов Firebase. Я могу развернуть такую ​​услугу в определенном месте, но тогда мне приходится беспокоиться о ее доступности масштабируемости объявлений. Хотя я не ожидаю слишком большого трафика для этого приложения, он может достигать нескольких тысяч одновременных пользователей.

Архитектурные мысли?

Ответ 1

В долгосрочной перспективе Firebase будет иметь более продвинутые запросы, так что, надеюсь, он будет поддерживать такие вещи напрямую, без необходимости делать что-то особенное. До этого у вас есть несколько вариантов:

  1. Напишите серверный код для обработки поиска. Самый простой способ - запустить некоторый код сервера, отвечающий за индексацию/поиск, как вы упомянули. У Firebase есть клиент Node.JS, так что это будет простой способ интегрировать сервис в Firebase. Вся передача данных все еще может происходить через Firebase, но вы бы написали сервис Node.JS, который отслеживает клиентские "поисковые запросы" в некотором указанном месте в Firebase, а затем "отвечает", записывая набор результатов обратно в Firebase, для клиент потреблять.
  2. Сохраните индекс в Firebase с клиентами, автоматически обновляющими его. Если вы хотите стать действительно умным, вы можете попробовать реализовать безсерверную схему, где клиенты автоматически индексируют свои данные при их записи... Таким образом, индекс для полнотекстового поиска будет храниться в Firebase, а когда клиент пишет новый элемент в коллекции, он также будет отвечать за надлежащее обновление индекса. И чтобы выполнить поиск, клиент будет напрямую использовать индекс для построения результирующего набора. На самом деле это имеет большой смысл для простых случаев, когда вы хотите проиндексировать одно поле сложного объекта, хранящегося в Firebase, но для полнотекстового поиска это, вероятно, будет довольно грубым. :-)
  3. Сохраните индекс в Firebase с обновлением кода сервера. Вы можете попробовать гибридный подход, где индекс хранится в Firebase и используется клиентами непосредственно для поиска, но вместо того, чтобы клиенты обновляли индекс, у вас будет серверный код, который обновляет индекс при каждом добавлении новых элементов в коллекцию., Таким образом, клиенты могут по-прежнему искать данные, когда ваш сервер не работает. Они могут просто получить устаревшие результаты, пока ваш сервер не догонит индексацию.

Пока у Firebase нет более продвинутых запросов, # 1, вероятно, будет лучшим выбором, если вы хотите запустить небольшой серверный код. :-)