Самый эффективный способ запросить Firebase Firestore для сообщений - PullRequest
0 голосов
/ 02 мая 2018

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

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

Сначала я структурировал свою базу данных следующим образом:

пользователи -> (uid) -> друзья (массив uid's) сообщения (массив идентификаторов сообщений) другая информация ...

сообщений -> (идентификатор сообщения) -> image_url другая информация ...

С этой настройкой I: 1. Я взял текущие вошедшие в систему пользователи uid и получил документ, который принадлежит для этого пользователя в разделе «пользователи».

  1. Затем я получил список друзей пользователей в виде массива и перебрал их.

  2. Для каждого идентификатора пользователя я снова запрашивал «пользователей» и находил документ. принадлежит этому пользователю.

  3. Затем я взял первый "post id" в их массиве "posts", если был один

  4. Я взял идентификатор поста, нашел соответствующий пост в коллекции "posts" и скачал его.

  5. Повторите шаги 3 - 5 для каждого идентификатора пользователя, пока не останется больше сообщений или пока я не загрузил 10 из них.

Это был мой первый подход, однако есть несколько проблем, которые я могу определить, и, скорее всего, еще несколько, о которых я еще не думал.

  1. В шагах 2 и 4. На этих двух шагах я загружаю целый массив из-за того, что firestore не позволит вам загрузить определенный индекс в массив. Это замедляет процесс, если изображение там, где

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

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

Есть еще идеи?

1 Ответ

0 голосов
/ 02 мая 2018

Если я правильно понимаю вашу проблему, вы пытаетесь облегчить joins между user и posts (то есть вы хотите, чтобы все posts, которые user могли видеть, упорядочены по времени или значимости) , Я бы предложил создать функцию Firebase, которая записывает записи в коллекции фидов пользователей, когда один из их друзей создает сообщение. Запись будет содержать Reference к сообщению и необходимую информацию для ранжирования / упорядочения сообщения. Затем вы можете просто сделать два запроса (первый - относительно быстрый и с возможностью просмотра страниц), чтобы упростить подачу для пользователя. Если пользователь приобретает нового друга, просто создайте другую функцию Firebase, чтобы получать от этого друга несколько недавних (вероятно, не с самого начала) сообщений.

...