Как создать фид файлов от людей, которых следует пользователю?

Я создаю API, используя PHP и MongoDB. В этой системе я получил пользователей, и каждый пользователь может загружать файлы. Пользователи также могут «следить» друг за другом.

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

Это то, что я думаю о внедрении.

  1. Получите всех пользователей, за которыми следует пользователь.
  2. Прокрутите этот массив пользователей и получите последние 4 файла для каждого пользователя и добавьте их в массив.
  3. Как-то упорядочить эти файлы (этот массив) по дате создания.
  4. Верни это.

Это действительно оптимальный способ? Есть ли способ лучше? Пользователи сохраняются в коллекции Пользователи и файлы в файлах коллекции. Следующее сохраняется в коллекции пользователей. Далее.

Это проблема вентилятора и вентилятора. Я предлагаю вам попробовать развернуть:

Храните коллекцию feed для своих пользователей. Когда пользователь загружает документ, вставьте новый элемент фида в каждую коллекцию элементов коллекции друзей. Коллекция может выглядеть так:

 { "_id": (some id) "UserId": (id of the user who 'owns', ie reads this feed) "FriendId": (if of the friend who posted the file) "FriendName": "John Doe" (name of the fried, denormalized) "Timestamp": ... } 

Используйте составной индекс {UserId, Timestamp} .

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

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