Това е проблемът с вентилатора срещу вентилатора. Предлагам ви да опитате разклоняване:
Поддържайте feed
колекция за вашите потребители. Когато потребител качи документ, вмъкнете нов елемент във всяка от колекциите от елементи в емисията на неговите приятели. Колекцията може да изглежда така:
{
"_id": (some id)
"UserId": (id of the user who 'owns', i.e. reads this feed)
"FriendId": (if of the friend who posted the file)
"FriendName": "John Doe" (name of the fried, denormalized)
"Timestamp": ...
}
Използвайте съставен индекс {UserId, Timestamp}
.
Този подход е труден за писане:ако Джейн има стотици приятели, тези стотици вмъквания ще отнемат време. От друга страна, качването на файл обикновено отнема много време така или иначе, така че режийните разходи са незначителни и вашите четения ще бъдат абсурдно прости.
Разбира се, това може да бъде допълнително оптимизирано с повече усилия, но би трябвало да се справи добре с доста голям трафик.