如何正确查询用户创建的所有帖子?

时间:2016-10-22 20:05:57

标签: javascript node.js firebase firebase-realtime-database

DATABASE HIERARCHY:

posts
   post1_uid
      author: user2UID
      info1
      info2
   post2_uid
      author: user1UID
      info1
      info2
users
   user1_UID
      info1
      info2
      info3
   user2_UID
      info1
      info2
      info3

状况:

用户可以创建帖子。每个帖子都有一个“author”属性,用于保存创建帖子的用户的UID。

如果我想显示来自一个用户的所有帖子,请写入我的Firebase GET请求:

CODE:

if (childData.author == firebase().auth().currentUser.uid) {
    //Show those posts created by the current user
}

问题

如果我的Firebase数据库有数百万个帖子并且当前用户的ID需要与每个帖子的“作者”属性进行比较,这会有效吗?

如果不是,还有更好的选择吗?

我做了什么

在我的“users / UID /”路径中创建一个“posts”节点,其中包含用户创建的所有帖子的UID。

就像那样,我迭代了一个小得多的json树(只有用户创建的所有帖子(100)),而不是遍历数据库中的所有帖子(Millions)来查找用户创建的那些帖子。但这真的会影响性能吗?数据嵌套的增加值得吗?

其他数据库层次结构:

posts
   post1_uid
      author: user1UID
      info1
      info2
   post2_uid
      author: user1UID
      info1
      info2
users
   user1_UID
      info1
      info2
      info3
      posts
         referenceUID
            post1UID
            post2UID    
   user2_UID
      info1
      info2
      info3

这是实际的数据库层次结构,其中包含一些假数据,以模仿我的示例的行为。

enter image description here

TL; DR:

如何正确组织Firebase数据库以优化查找用户创建的所有帖子的查询?

1 个答案:

答案 0 :(得分:2)

答案是在每个用户内部明确地嵌套发布数据。

从整个帖子节点过滤时,这是主要的性能问题。首先,为了过滤当前用户的帖子,您必须运行postsRef.orderByChild('author').equalTo(currentUser.uid)这样的查询,因为您注意到orderByChild即使您使用author上的索引也是昂贵的操作百万记录费用昂贵。

第二种方法的缺点是你复制了帖子条目,但是对于nosql数据库来说没问题,每次发生一些变化时你都要小心更新所有重复项。