Swift 查询Firebase Firestore帖子的最有效方法

Swift 查询Firebase Firestore帖子的最有效方法,swift,firebase,google-cloud-firestore,social-media,network-efficiency,Swift,Firebase,Google Cloud Firestore,Social Media,Network Efficiency,我目前正在创建一种社交媒体应用程序,与任何社交媒体应用程序一样,显示来自朋友的某种信息几乎至关重要 我尝试过各种方式向用户显示他们的朋友发布的帖子,但速度可能很慢,我怀疑这是最有效的方式 起初,我的数据库结构如下: 用户->(uid)->朋友(uid数组) 帖子(帖子id的数组) 其他信息 帖子->(帖子id)->图片链接 其他信息 使用此设置,我: 1.我获取了当前登录用户的uid,并获得了属于我的文档 在“用户”下发送给该用户 然后,我将用户的好友列表作为一个数组进行循环 对于每个uid,我

我目前正在创建一种社交媒体应用程序,与任何社交媒体应用程序一样,显示来自朋友的某种信息几乎至关重要

我尝试过各种方式向用户显示他们的朋友发布的帖子,但速度可能很慢,我怀疑这是最有效的方式

起初,我的数据库结构如下:

用户->(uid)->朋友(uid数组) 帖子(帖子id的数组) 其他信息

帖子->(帖子id)->图片链接 其他信息

使用此设置,我: 1.我获取了当前登录用户的uid,并获得了属于我的文档 在“用户”下发送给该用户

  • 然后,我将用户的好友列表作为一个数组进行循环

  • 对于每个uid,我再次查询“用户”并找到文档 属于该用户的

  • 然后我在他们的“posts”数组中获取第一个“post id”(如果有的话)

  • 我获取了帖子id,在“posts”集合中找到了相应的帖子并下载了它

  • 对每个用户id重复步骤3-5,直到没有更多的帖子,或者我已经下载了10篇

  • 这是我的第一个方法,但是我可以确定其中有几个问题,很可能还有几个我还没有想到的问题

  • 在步骤2和4中。在这两个步骤中,我下载了整个数组,因为firestore不允许您下载数组中的某个索引。这会减慢处理速度,如果有图像,请在哪里

  • 假设用户向下滚动以刷新新帖子,那么就很难加载更多的帖子,因为即使我从离开的地方开始下载,也可能会在这段时间内添加另一篇帖子,从而引发整个系统的崩溃

  • 我还尝试了一个收集呼叫帖子的方法,其中每个用户都附带了帖子文档


    还有其他想法吗?

    如果我正确理解了您的问题,那么您是在尝试促进
    用户
    帖子
    之间的
    连接(即,您希望
    用户
    可以按时间或相关性排序的所有
    帖子
    )。我建议创建一个Firebase函数,当用户的一个朋友创建帖子时,该函数会在用户的“提要”集合下写入一条记录。该记录将包含对该职位的回复以及对该职位进行排名/排序的必要信息。然后,您可以只进行两个查询(第一个查询速度相对较快且可分页),以便为用户提供提要。如果用户获得了一个新朋友,那么只需使用另一个Firebase功能从该朋友那里获取一些最近(可能不是从一开始)的帖子。

    唯一的问题是,它可能会在功能服务器上接受多个请求,例如某人有100个追随者,您需要查询每个朋友,然后输入一个引用,就像我说的,您正在尝试执行一个
    连接
    (使用Firestore是不可能的);因此,无论采用哪种方式,它都无法很好地扩展。因此,您必须回答以下问题:我是否希望用户看到昂贵的部件,以及我是否希望对需要完成的工作采取主动。在当前的解决方案中,每次阅读都必须重复昂贵的部分。使用此解决方案,您只需执行一次,用户就不会看到任何昂贵的执行。好的,谢谢您的建议,我将尝试一下。对不起,我刚刚注意到此解决方案存在一个问题。这并不是说我想让自己听起来很自大,我知道我的应用程序很可能永远不会有一天会接触到数百万用户。然而,在不太可能的情况下,如果一个人拥有100万“粉丝”,那么他写一篇文章的效率不会很低,这就意味着你必须做100万次。是的,这是昂贵的,但无论如何,你尝试允许这样做是昂贵的。以下是一篇关于Facebook和Twitter如何使用扇出读写的文章:。希望有帮助。还有其他解决办法吗?