我正在使用PHP和MongoDB创建API。在这个系统中我得到了用户,每个用户都可以上传文件。用户也可以“跟随”彼此。
我需要返回经过身份验证的用户所关注的用户上传的所有最新文件的Feed。我不确定如何设计和执行它。
这是我正在考虑实施的。
这真的是最佳方式吗?有没有更好的办法?用户保存在集合用户和集合文件中的文件中。以下内容保存在collection.followers集合中。
答案 0 :(得分:2)
这是粉丝输入与扇出问题。我建议你尝试扇出:
为您的用户保留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}
。
这种方法很重要:如果简拥有数百名朋友,那么这些数百个插页将占用他们的时间。另一方面,上传文件通常需要花费很多时间,因此开销可以忽略不计,并且您的读取将非常简单。
当然,这可以further optimized付出更多的努力,但它应该可以在相当多的流量下正常运行。