-1

鉴于下面提供的日期模型,用户登录并检索他们的数据后,他们还可以获得他们的朋友列表。

但是,为了现在通过 idsfdb17f3a-7b7d-4aa5-9a0b-b9fb33c349de和 获得这两个朋友的详细信息a96da7b1-7c4e-44bc-b82e-fc75bed52bcd,目前,最有效的操作似乎是简单地遍历 url,以如下方式:

for singleFriendID in allFriendIds

    firebase.com/[my_db_name]/users/{singleFriendID} 

end

但即使这样也有其主要限制,如果说你想要一个你的 40 个朋友的用户名列表,你现在需要 40 个单独的、特定的调用到服务器......

如何有效地在 Firebase 中查找数据,而不是将所有朋友的详细信息转储到他们的手机上?

Firebase 架构:

{  
   "users":{  
      "99e4989b-a046-4c5f-9478-5ebd8bdc3ded":{  
         "email":"person@gmail.com",
         "friends":{  
            "fdb17f3a-7b7d-4aa5-9a0b-b9fb33c349de":{  
               "confirmed":true,
               "selfSendRequest":false,
               "timeInvited":"2016-02-21 08:49:31"
            },
            "a96da7b1-7c4e-44bc-b82e-fc75bed52bcd":{  
               "confirmed":true,
               "seldSendRequest":false,
               "timeInvited":"2016-02-21 08:49:31"
            }
         },
         "password":"aPassword",
         "phoneNumber":"16144444444",
         "username":"person2"
      }
      "a96da7b1-7c4e-44bc-b82e-fc75bed52bcd": {
      ...
      ...
   }
}
4

2 回答 2

3

Loolooii 的方法将节省调用次数,绝对是一种有效的方法。

但是您还假设对 Firebase 数据库的 40 次调用很多。如果您花一点时间来衡量这一点,您可能会感到惊讶。

在传统数据库中,您每次调用都会往返于数据库。

client                   server
    --- give me item 1 --->
                             loading
                             item 1
    <-- here is item 1 ----
    --- give me item 2 --->
                             loading
                             item 2
    <-- here is item 2 ----
    --- give me item 3 --->
                             loading
                             item 3
    <-- here is item 3 ----
    --- give me item 4 --->
                             loading
                             item 4
    <-- here is item 4 ----

Firebase 对所有请求进行管道传输。因此,基本上客户端会立即快速连续发送所有项目的请求:

client                   server
    --- give me item 1 --->
    --- give me item 2 --->
    --- give me item 3 --->
    --- give me item 4 --->
                             loading
                             item 1
                             loading
                             item 2
                             loading
                             item 3
                             loading
                             item 4
    <-- here is item 1 ----
    <-- here is item 2 ----
    <-- here is item 3 ----
    <-- here is item 4 ----

您会发现这要快得多,因为您只等待 1 次往返,再加上加载项目的时间。如果最后一点令人担忧,请采用 Loolooii 的方法。

于 2016-02-22T16:27:23.343 回答
1

无需对数据库进行 40 次调用。您只需为每个用户保留一个朋友列表(每个对象都包含您可能需要的每个用户信息):

/users/:id:/friends

因此,当您想要朋友列表时:

/users/:myId:/friends

这会给你一个列表(一个电话!),你可以循环。因此,无需为每个特定的用户端点进行单独的调用。

数据库中存在重复数据以提高性能没有问题!

更新(回答评论):

要显示用户的朋友或喜欢照片的人的列表,通常只存储 ID 和名称就足够了。为了显示更多信息,可以在点击事件上显示该特定用户的个人资料。

于 2016-02-22T16:18:51.777 回答