Dette er fan-in vs. fan-out-problemet. Jeg vil foreslå, at du prøver fan-out:
Hold et feed
indsamling til dine brugere. Når en bruger uploader et dokument, skal du indsætte et nyt feedelement i hver af hendes venners feedelementsamling. Samlingen kunne se sådan ud:
{
"_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": ...
}
Brug et sammensat indeks {UserId, Timestamp}
.
Denne tilgang er skrivetung:Hvis Jane har hundredvis af venner, vil disse hundredevis af indlæg tage deres tid. På den anden side tager det generelt meget tid at uploade en fil, så overhead er ubetydeligt, og dine læsninger vil være latterligt enkle.
Dette kan selvfølgelig optimeres yderligere med mere indsats, men det burde fungere fint til en del trafik.