Dit is het fan-in vs. fan-out probleem. Ik raad je aan om fan-out te proberen:
Bewaar een feed
collectie voor uw gebruikers. Wanneer een gebruiker een document uploadt, voegt u een nieuw feeditem toe aan elke feeditemverzameling van haar vrienden. De collectie kan er als volgt uitzien:
{
"_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": ...
}
Gebruik een samengestelde index {UserId, Timestamp}
.
Deze aanpak is schrijfintensief:als Jane honderden vrienden heeft, zullen deze honderden bijlagen hun tijd vergen. Aan de andere kant kost het uploaden van een bestand over het algemeen toch veel tijd, dus de overhead is te verwaarlozen en je leest belachelijk eenvoudig.
Dit kan natuurlijk verder geoptimaliseerd met meer moeite, maar het zou goed moeten werken voor nogal wat verkeer.