Структурирование двусторонних отношений в базе данных Firebase Realtime - PullRequest
0 голосов
/ 27 февраля 2019

Код ниже взят из Документы Firebase о структурировании данных .У меня есть похожая настройка для некоторых из моих данных, но у меня есть дополнительное требование, которое этот конкретный пример, похоже, не охватывает.

Допустим, вы хотите получить имя каждого пользователя, принадлежащего «технионистам»'group.

Правильно ли я сказал, что единственный способ сделать это - получить список членов из groups/techpioneers/members, а затем просмотреть их, извлекая users/$userId?

Если у вас есть миллионы пользователей, не становится ли это ужасно неэффективным?Конечно, вы можете ограничить результаты, но если вам нужно выбрать 100 членов, входящих в группу techpioneers, это 100 отдельных запросов.

Является ли такой тип структурирования лучшим способом для масштабирования данных на этой основе?

// An index to track Ada's memberships
{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      // Index Ada's groups in her profile
      "groups": {
         // the value here doesn't matter, just that the key exists
         "techpioneers": true,
         "womentechmakers": true
      }
    },
    ...
  },
  "groups": {
    "techpioneers": {
      "name": "Historical Tech Pioneers",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      }
    },
    ...
  }
}

Я думаю, что было бы лучше иметь другой структурированный ключ, подобный следующему:

{
  "groupUsers":
    "techpioneers": {
      "alovelace": {
        "name": "Ada Lovelace"
      }
    }
}

Выполнение этого означало бы, что вам нужно всего лишь выполнить один запрос к groupUsers/techpioneers, чтобы получитьвсе члены, а также их имена.

Я стремлюсь к тому, чтобы структура оставалась как можно более плоской, следуя советам, приведенным в документации.

Думал ли я по правильным линиям?или я неправильно понял?Любой совет будет принят с благодарностью.

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