Firebase поиск со списком данных - PullRequest
0 голосов
/ 02 декабря 2018

Предполагая, что у меня есть список данных, которые я хотел бы сохранить в базе данных Firebase в реальном времени, и выполнить их поиск позже.

Каков наилучший способ хранения данных и запроса их для достижения наилучшей производительности?

Мои данные - это список имен (содержащий много имен).

["Bob", "Rob", ...]

Обратите внимание, что у меня естьпоиск нескольких клиентов в данный момент времени.

1 Ответ

0 голосов
/ 02 декабря 2018

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

"usernames": {
  "Bob": true,
  "Rob": true
}

Несколько замечаний об этой модели:

  • Мы используем имена в качестве ключей, что означает, что каждыйимя по определению уникально (поскольку каждый ключ может существовать только один раз в содержащем его узле).
  • Значения true не имеют конкретного значения.Они просто необходимы, поскольку Firebase не может хранить ключ без значения.
  • Определенные символы (например, . и /) не могут использоваться в ключах.Если имя содержит такие символы, вам придется отфильтровать их (или закодировать) в ключе.Например, кто-то по имени Jes.sie должен быть сохранен как Jes.sie (с потерями) или, например, Jes%2Esie (с кодировкой URL).
  • В таких случаях вы можете сохранить исходное нефильтрованное / незашифрованное имя какзначение.Итак: "Jes%2Esie": "Jes.sie".

Еще несколько общих замечаний о (текстовом) поиске в базе данных реального времени Firebase:

  • Firebase может выполнять только префиксные совпадения, у него нетподдержка поиска строк, которые содержат или заканчиваются определенными подстроками.Это означает, что в исходных данных он может искать все, начиная с BorderByKey().startAt("R").endAt("R\uF7FF")), но не может искать все, заканчивающиеся на ob.
  • Поискс учетом регистра.Если вы хотите выполнять поиск без учета регистра, рассмотрите возможность хранения ключей как строчных:

    "usernames": {
      "bob": "Bob",
      "rob": "Rob",
      "jes%2esie": "Jes.sie"
    }
    
  • Если вам нужна лучшая поддержка текстового поиска, рассмотрите возможность интеграции третьейпоисковая системаОбщие рекомендации: Elastic-search (самостоятельно) или Algolia (на основе облака).

Для получения дополнительной информации по многим из этих тем см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...