Эффективно храните записи и запрашивайте их в Firestore

#firebase #google-cloud-firestore

#firebase #google-облако-firestore

Вопрос:

Итак, мне нужно хранить записи, созданные пользователями, теперь проблема с моделью данных, приведение всех существующих записей в коллекцию Posts с полем creatorUserID позволит отображать записи, принадлежащие пользователю.

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

Также я беспокоюсь о производительности, когда в коллекции более 10 миллионов записей.

Комментарии:

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

2. @AlexMamo структура еще не существует, вопрос в том, какой была бы наиболее эффективная структура для такой цели

3. Было бы довольно просто прочитать uid, хранящиеся в коллекции users following, а затем выполнить итерацию по ним, чтобы запросить узел posts для записей, содержащих их пользовательский uid. Также это запрос logical OR и из документов Logical OR queries. В этом случае вам следует создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении.

Ответ №1:

Чтобы запросить документ в Firestore, данные, по которым вы хотите запросить, должны находиться в Документе, к которому вы хотите запросить, нет способа запросить коллекцию по данным документа из другой коллекции. Вот почему ваш вариант использования немного сложный. Это может показаться не очень элегантным, но это способ решить проблему:

Мы используем две коллекции: users и posts.

 User
    - email: string
    - followingUserIDs: array with docIds of users you are following

Posts
    - postName: string
    - postText: string
    - creatorUserID: string
  

Чтобы найти все записи, принадлежащие всем пользователям, за которыми следит вошедший в систему пользователь, мы можем сделать следующее в коде:

1 Извлеките документ зарегистрированного пользователя

2 Для каждого идентификатора в массиве «followingUserIDs» я бы запросил записи в Firestore. В JavaScript это было бы что-то вроде:

 followingUserIDs.map(followingUserId => {
        return firestore.collection('Posts', ref => ref.where('creatorUserID', 
        '==', followingUserId));
    })
  

3 Объедините результат всех запросов в один массив записей

Комментарии:

1. Но не будет ли это медленным при больших объемах a) следующего ppl и b) количества записей в коллекции posts?

2. Не совсем, потому что в Firestore производительность запросов пропорциональна размеру вашего результирующего набора, а не вашего набора данных.