Firebase 模仿 WHERE IN
Firebase mimicing WHERE IN
鉴于下面提供的日期模型,用户登录并检索他们的数据后,他们还可以获得他们的朋友列表。
但是,为了现在通过 ID fdb17f3a-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 中有效地查找数据而不是将所有朋友的详细信息转储到他们的 phone?
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": {
...
...
}
}
不需要对数据库进行 40 次调用。您只需保留每个用户的朋友列表(每个对象包含您可能需要的每个用户信息):
/users/:id:/friends
因此,当您想要一份好友列表时:
/users/:myId:/friends
这将为您提供一个列表(只需调用一次!),您可以循环浏览该列表。因此,无需为每个特定的用户端点单独调用。
在你的数据库中有重复数据以提高性能没有问题!
更新(回复评论):
要显示用户的朋友或例如喜欢照片的人列表,通常只存储 ID 和姓名就足够了。要显示更多信息,可以在单击事件时显示该特定用户的个人资料。
Loloooii 的方法可以节省调用次数,绝对是一种有效的方法。
但是您还假设对 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 的方法。
鉴于下面提供的日期模型,用户登录并检索他们的数据后,他们还可以获得他们的朋友列表。
但是,为了现在通过 ID fdb17f3a-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 中有效地查找数据而不是将所有朋友的详细信息转储到他们的 phone?
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": {
...
...
}
}
不需要对数据库进行 40 次调用。您只需保留每个用户的朋友列表(每个对象包含您可能需要的每个用户信息):
/users/:id:/friends
因此,当您想要一份好友列表时:
/users/:myId:/friends
这将为您提供一个列表(只需调用一次!),您可以循环浏览该列表。因此,无需为每个特定的用户端点单独调用。
在你的数据库中有重复数据以提高性能没有问题!
更新(回复评论):
要显示用户的朋友或例如喜欢照片的人列表,通常只存储 ID 和姓名就足够了。要显示更多信息,可以在单击事件时显示该特定用户的个人资料。
Loloooii 的方法可以节省调用次数,绝对是一种有效的方法。
但是您还假设对 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 的方法。