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

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

У меня есть приложение, в котором я регистрирую пользователя, позволяя этому пользователю установить «photoURL» для его «пользовательской» информации в системе Firebase Auth. Это работает. Когда пользователь создает сообщение в моем приложении, я хочу отобразить заголовок, изображение и «photoURL» создателя.

В настоящее время я сохраняю пост:

-Post {
 -id
 -title
 -image
 -photoURL <- from current logged in user }

Я также разрешаю пользователям посещать страницу постеров через маршрутизацию / poster / 'displayName'

Поэтому позже, когда пользователь обновляет информацию своего профиля, такую ​​как displayName или photoURL, нужно ли мне искать все сообщения, комментарии, сообщения, ответы и любое другое место, где у этого пользователя есть запись, и обновлять photoURL?

Я думал, что смогу сказать: (псевдокод)

get all posts =>
 foreach(post)
   post = {
          title: post.title.val()
          image: post.image.val()
          avatar: firebase.database().ref().child('users' + post.key)
          }

Все, что я читаю, говорит о том, что мне нужно хранить этот photoURL в своей таблице «Пользователи». Если я это сделаю, то ни одна из публикаций не будет обновлена, если я не напишу серверный вызов, чтобы сделать это каждый раз, когда происходят изменения. Проблема в том, что, если у меня есть 100 000 пользователей, и 10% из них меняют свой photoURL, я должен изменить его в сообщениях, комментариях, ответах и ​​сообщениях для каждого пользователя. Если средний пользователь имеет 100 сообщений, 4000 комментариев, 6000 ответов, мы ищем около 10 000 пользователей * 10 000 пользователей, которых необходимо обновить, и если средний серверный вызов составляет 137 мс, то мои затраты составляют около $ 175 (расходы)

Другой вариант - извлекать информацию из двух таблиц и каждый раз создавать новый объект. Это приведет к удвоению количества обращений к серверу и времени, что удвоит мои затраты.

Это лучший подход для этого? Я думал, что будет намного проще просто получить фотографию пользователя и отображаемое имя.

Извините за длинный эпический пост, но я пытаюсь учиться. Спасибо всем!

Ответы на вопрос(1)

Ваш ответ на вопрос