Php 如何从用户跟踪的人创建文件提要?

Php 如何从用户跟踪的人创建文件提要?,php,mongodb,Php,Mongodb,我正在使用PHP和MongoDB创建一个API。在这个系统中我得到了用户,每个用户都可以上传文件。用户也可以相互“跟随” 我需要返回用户上传的所有最新文件的提要,经过身份验证的用户正在跟踪这些文件。我真的不知道如何设计和执行这个 这就是我想实施的 获取用户正在跟踪的所有用户 循环遍历此用户数组,为每个用户获取最新的4个文件,并将它们添加到数组中 以某种方式按创建日期对这些文件(此数组)排序 归还它 这真的是最佳方式吗?有更好的办法吗?用户保存在集合中,用户和文件保存在集合文件中。以下内容保存在集

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

我需要返回用户上传的所有最新文件的提要,经过身份验证的用户正在跟踪这些文件。我真的不知道如何设计和执行这个

这就是我想实施的

  • 获取用户正在跟踪的所有用户
  • 循环遍历此用户数组,为每个用户获取最新的4个文件,并将它们添加到数组中
  • 以某种方式按创建日期对这些文件(此数组)排序
  • 归还它

  • 这真的是最佳方式吗?有更好的办法吗?用户保存在集合中,用户和文件保存在集合文件中。以下内容保存在集合users.followers中。

    这是扇入与扇出的问题。我建议您尝试扇出:

    为您的用户保留一个
    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}

    这种方法写得很重:如果Jane有数百个朋友,那么这数百个插页将花费他们的时间。另一方面,上传一个文件通常需要很多时间,因此开销可以忽略不计,而且读取过程将非常简单


    当然,这可能需要更多的努力,但对于相当大的流量来说,这应该很好。

    听起来很有趣!当你说它很重的时候。写入这些提要大约需要多长时间?2-5秒可进行500次写入?更快?如果一个用户在跟踪1000个用户,那么这个提要文档会变得非常大并且很难处理吗?反过来说:如果一个用户有数千个追随者,那么它会很重。它真正需要多长时间取决于无数因素,但您应该能够在商品硬件上每秒进行数千次插入。您也可以脱机进行扇出:后台工具会不断搜索新发布的文件,并在找到这些项目时插入新闻项目。做得好,延迟只有几秒钟,但您大大减少了web服务器上的负载。延迟对我来说没有问题。所以我只是想看看我是否理解。我创建了一个名为feeds的集合,每个用户在feeds集合中都有一个文档。然后,当用户上传一个文件时,我会在每个followers提要文档中将关于该文件的元数据作为子文档发布?这是正确的吗?每个新闻提要项目都有自己的文档(不仅仅是每个用户),因此当用户上载文件时,您必须插入n个新文档,其中n是用户的关注者数量。这里没有子文档。啊,好的。你写了“为每个用户保留一个提要集合”。你是指一个单独的集合还是一个单独的文档?一个数据库可以容纳多少个集合?