Масштабируемость функции numChildren () в базе данных Firebase Realtime - PullRequest
1 голос
/ 09 февраля 2020

Я позаимствовал код из отличного репозитория firebase / friendlypix-web (https://github.com/firebase/friendlypix-web/blob/39cca671242d833e83252e31f30ed9b655f9478b/src/FirebaseHelper.js#L722).

Фрагмент использует функцию numChildren() для подсчета подписчиков пользователя. Тем не менее, комментарий над кодом предупреждает: «Это не будет масштабироваться, если у пользователя огромное количество подписчиков».

Трудно судить, что здесь подразумевается под "огромным".

Исправлением для этого может быть облачная функция для увеличения счетчика, но было бы неплохо знать, когда это будет действительно необходимо, поскольку я никогда не смогу достичь числа, которое сотрудники Google считают "огромным" написал этот комментарий!

1 Ответ

1 голос
/ 09 февраля 2020

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

Главное, что нужно понять, это то, что numChildren() - это операция на стороне клиента, которая считает число дочерних узлов в DataSnapshot.

Если я правильно помню, узел followers FriendlyPix имеет такую ​​структуру:

"followers": {
  "uidOfUser1ButThenOfALength": true,
  "uidOfUser2ButThenOfALength": true,
  "uidOfUser3ButThenOfALength": true,
  "uidOfUser4ButThenOfALength": true
}

Если вы загружаете эту структуру, вы читаете около 150 байт. Ничего страшного, но если вам нужно только количество детей, вы также можете получить такой результат, прочитав такую ​​структуру:

"followerCount": 4

И это всего лишь 20 байтов, что сэкономит пользователю 130 полосы пропускания. и вы получите 130 счетов за чтение для каждого пользователя.

По мере того, как ваше приложение приобретает больше пользователей, и каждый пользователь, вероятно, получает больше последователей, эти цифры начинают складываться. При среднем числе 20 подписчиков чтение всех данных для вызова numChildren() на стороне клиента занимает 672 байта, тогда как чтение счетчика займет всего 21 байт.

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