Я создаю API, используя PHP и MongoDB. В этой системе я получил пользователей, и каждый пользователь может загружать файлы. Пользователи также могут «следить» друг за другом.
Мне нужно вернуть фид всех последних файлов, загруженных пользователями, которым соответствует аутентифицированный пользователь. Я не совсем уверен, как его проектировать и исполнять.
Это то, что я думаю о внедрении.
Это действительно оптимальный способ? Есть ли способ лучше? Пользователи сохраняются в коллекции Пользователи и файлы в файлах коллекции. Следующее сохраняется в коллекции пользователей. Далее.
Это проблема вентилятора и вентилятора. Я предлагаю вам попробовать развернуть:
Храните коллекцию 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}
.
Этот подход тяжелый для записи: если у Джейн есть сотни друзей, эти сотни вложений будут тратить свое время. С другой стороны, загрузка файла обычно требует много времени, поэтому накладные расходы незначительны, и ваши чтения будут смехотворно простыми.
Конечно, это может быть дополнительно оптимизировано с большим усилием, но оно должно отлично работать для довольно большого количества трафика.