Как структурировать базу данных firestore для подачи сообщений, упорядоченных по дате, например instagram? - PullRequest
0 голосов
/ 11 марта 2020

Мое приложение позволяет пользователям продавать и покупать товары, опубликованные другими пользователями.

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

users(collection){    
   user1(document){
    username: rocky
    following:[user2,user3....]     // or subcollection with users as documents
    }
   user2(document){
    username: paul
    following:[user2,user5....]     // or subcollection with users as documents
    }
}

posts(collection){
     post1(document){
     author:user1
     timestamp:...
     imageurl:...
     ...
     }
     post2(document){
     author: user55
     timestamp:...
     imageurl:...
     ...
     }
}

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

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

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

Мне нужно было бы прочитать 5k и еще немного, чтобы прочитать сообщения. Есть ли эффективный способ сделать это?

Я немного перезапустил и обнаружил, что хорошим способом является денормализация данных и добавление новой коллекции, например:

feed(collection):{ 
    user1(document){
        posts(collection){
            post1(document){
                //post info
            }
            post2(document)
                //post info
            }
    }
}

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

Так что, если у меня 100 пользователей с 10 тыс. Подписчиков, и эти 100 пользователей создают 3 поста в день, я бы хотел 3 миллионных записи только для этих 100 пользователей плюс еще немного, если они отредактируют этот пост в будущем, и это звучит страшно !!

Есть ли лучший способ сделать это?

Возможно, я думаю, что это неправильно, если у меня 100 пользователей с 10k подписчиками, это означает, что мое приложение очень активно, поэтому я должен иметь возможность получать доход для покрытия этой стоимости.

Извините, фот длинный пост. Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...