【发布时间】:2016-11-16 07:27:37
【问题描述】:
我的数据是非规范化的,并使用了 firebase 团队建议的反向索引。类似于:
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}
现在我想加载 Ada 的所有组。我可以轻松获得她所属的组 ID 列表,因为它是她的用户对象的一部分。
有没有办法让我一次通过 ID 查询 Ada 的所有特定组?还是我需要为每个组 ID 创建一个 ValueEventListener 并分别请求每个组?
在安全方面 - 假设每个组只能由其成员读取,因此我无法查询所有组并在事后对它们进行排序。
【问题讨论】:
-
大多数应用程序通过索引中的键并单独加载每个组。这并不是一个很大的性能消耗,因为 Firebase 会通过管道处理数据库请求。见stackoverflow.com/questions/35931526/…
-
@FrankvanPuffelen 你的意思是如果我遍历列表并为每个列表设置一个
ValueEventListener,数据库将优化它自己检索数据的方式?还是我必须以某种方式请求数据? -
所有请求都通过同一个连接。
get(1)、get(2)、get(3)和getAll([1,2,3])之间的唯一区别是帧的一些开销。 -
@ItaiHanski 也在为同样的问题苦苦挣扎——你找到更好的解决方案了吗?我发现的所有答案都像是“黑客”。
-
@eth0 不是真的。我基本上为每个组创建一个侦听器,然后等到他们都返回一个逻辑上被“加载”的答案
标签: android firebase firebase-realtime-database