これはファンインとファンアウトの問題です。ファンアウトを試してみることをお勧めします:
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}
。
このアプローチは書き込みが多くなります。ジェーンに数百人の友人がいる場合、これらの数百の挿入には時間がかかります。一方、ファイルのアップロードには通常、時間がかかるため、オーバーヘッドはごくわずかであり、読み取りは途方もなく簡単になります。
もちろん、これはさらに最適化 することができます。 より多くの努力が必要ですが、かなりの量のトラフィックに対しては問題なく機能するはずです。