如何从用户关注的人创建文件源?

时间:2011-11-17 08:04:28

标签: php mongodb

我正在使用PHP和MongoDB创建API。在这个系统中我得到了用户,每个用户都可以上传文件。用户也可以“跟随”彼此。

我需要返回经过身份验证的用户所关注的用户上传的所有最新文件的Feed。我不确定如何设计和执行它。

这是我正在考虑实施的。

  1. 获取用户关注的所有用户。
  2. 遍历此用户数组并获取每个用户的最新4个文件并将其添加到数组中。
  3. 以某种方式按创建日期订购这些文件(此数组)。
  4. 归还。
  5. 这真的是最佳方式吗?有没有更好的办法?用户保存在集合用户和集合文件中的文件中。以下内容保存在collection.followers集合中。

1 个答案:

答案 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付出更多的努力,但它应该可以在相当多的流量下正常运行。