查询Firebase Firestore的最有效方法

时间:2018-05-01 22:37:58

标签: swift firebase google-cloud-firestore social-media network-efficiency

我目前正在创建一种社交媒体应用程序,就像任何社交媒体应用程序一样,从朋友那里显示某种信息几乎是至关重要的。

我已尝试过各种方式向朋友发布的帖子显示帖子,但速度很慢,我怀疑这是最有效的方法。

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

用户 - > (uid) - >朋友(uid' s)                   帖子(帖子ID的数组)                   其他信息...

帖子 - > (post id) - > IMAGE_URL                       其他信息...

通过此设置我: 1.我拿走了当前登录的用户uid并获得了所属的文档    在"用户"。

下的那个用户
  1. 然后我将那些用户朋友列表作为一个数组并循环遍历它们。

  2. 对于每个uid,我然后查询"用户"再一次找到了这份文件 属于该用户。

  3. 然后我拿了第一个" post id"在他们的"帖子"数组,如果有一个

  4. 我拿了帖子ID并在"帖子"中找到了相应的帖子。收集并下载它。

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

  6. 这是我的第一个方法,但是我可以识别出几个问题,而且很可能还有几个我还没想过的问题。

    1. 在第2步和第4步中。在这两个步骤中,我正在下载整个数组,因为firestore不允许您下载数组中的某个索引。这会减慢过程,图像是否存在

    2. 让我们说用户向下滚动以刷新新帖子然后很难加载更多帖子,因为即使我开始下载我离开的地方,也可以在那个时间添加另一个帖子,这会抛出整个系统

    3. 我也正在尝试只收集带有帖子文档的收集呼叫帖子,并附在每个用户身上。

      还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您正试图在joinsuser之间促进posts(即您希望所有posts user firebase.auth().signInAnonymously().catch(function(error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // ... }); firebase.auth().onAuthStateChanged(function(user) { if (user) { // User is signed in. var isAnonymous = user.isAnonymous; var uid = user.uid; // ... } else { // User is signed out. // ... } // ... }); {1}}可以看到按时间或相关性排序)。我建议创建一个Firebase函数,用于在用户' feed'下编写记录。当他们的一个朋友创建帖子时收集。该记录将包含帖子的Reference以及对帖子进行排名/订购的必要信息。然后,您可以进行两个查询(第一个相对快速且可分页)以便为用户提供Feed。如果用户获得了一位新朋友,那么只需拥有另一个Firebase功能即可从该朋友那里获得一些最新的帖子(可能不是从一开始就开始)。