Еще одна вещь, которую следует учитывать, - это использовать некую форму кэширования на стороне клиента, чтобы в некоторых случаях запросы не повторялись. База данных реального времени обеспечивает постоянство для всего, что она читает, или вы можете также внедрить простой кеш для встречающихся пользователей.
я было время, пытаясь обернуть голову вокруг того, что я считал простой концепцией.
У меня есть приложение, в котором я регистрирую пользователя, позволяя этому пользователю установить «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 (расходы)
Другой вариант - извлекать информацию из двух таблиц и каждый раз создавать новый объект. Это приведет к удвоению количества обращений к серверу и времени, что удвоит мои затраты.
Это лучший подход для этого? Я думал, что будет намного проще просто получить фотографию пользователя и отображаемое имя.
Извините за длинный эпический пост, но я пытаюсь учиться. Спасибо всем!