Upvotes видимы только для общей структуры базы данных друзей - PullRequest
1 голос
/ 23 сентября 2019

Я создаю простое приложение в firebase, где пользователи могут дружить и публиковать посты друг друга.Тем не менее, вы можете видеть только голоса, поданные общими друзьями.

Т.е.: если Бобу нравится пост Джо.

Если я дружу с Джо и Бобом, я вижу, что Боб похож.

Если я дружу только с Джо, я не вижу Боба, как.

Как мне структурировать мои данные?Я планирую создать PostFeeds для каждого пользователя:

— PostFeed (collection)
     — Uid (document)
         — Posts (collection)
              — Likes (collection)

Если я напишу новый пост, он будет добавлен во все фиды постов моих друзей.Если у меня 1000 друзей, это сообщение будет добавлено в 1000 каналов.

Я сохраняю лайки для каждого поста внутри каждого поста в PostFeed.Таким образом, мы можем получать лайки без дополнительного запроса.Так что, если Боб любит публикацию сообщений joes, он будет добавлен к каждому сообщению в лентах сообщений друзей Джо.

Т.е.: если Джо любит запись Боба, а у Боба есть 500 друзей.Пост Боба находится на 500 друзей PostFeeds.Лайки Джо должны быть добавлены ко всем 500 постам в каждом посте.

Но лайки видны только в том случае, если мы общие друзья.

Т.е.: если Бобу нравится пост Джо, он будет добавлен в фид пользователей только в том случае, если мы общие друзья.Так что просмотрите посты Джо, где Боб - общий друг, и добавьте к ним подобные сообщения.

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

Есть ли лучший способ справиться с этим?

1 Ответ

0 голосов
/ 23 сентября 2019

Это не очень хороший подход.

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

Вместо этого он должен хранить только фактическую информацию, которая имела место, а именно:

  • ГолосоватьИдентификатор (уникальный идентификатор для этой записи)
  • Идентификатор сообщения (за который проголосовали)
  • Идентификатор пользователя, которому понравилась запись

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

Возможно, вы захотите изучить использование графовой базы данных для хранения всех этих отношений вместо реляционной базы данных .

См .: TAO: мощность графа |Facebook

...