C'est le problème du fan-in vs. fan-out. Je vous suggère d'essayer la distribution :
Conserver un feed
collecte pour vos utilisateurs. Lorsqu'un utilisateur télécharge un document, insérez un nouvel élément de fil dans chacune des collections d'éléments de fil de ses amis. La collection pourrait ressembler à ceci :
{
"_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": ...
}
Utiliser un index composé {UserId, Timestamp}
.
Cette approche est lourde en écriture :si Jane a des centaines d'amis, ces centaines d'insertions prendront leur temps. D'un autre côté, le téléchargement d'un fichier prend généralement beaucoup de temps de toute façon, donc la surcharge est négligeable et vos lectures seront ridiculement simples.
Bien sûr, cela peut être plus optimisé avec plus d'effort, mais cela devrait suffire pour un peu de trafic.