Java Firebase数据库高级查询选项
我的数据结构如下。本质上,我创建了一个“追随者”类别,作为每个键的子项,其中一个键表示一次投票。如果我的应用程序的当前用户ID列在“追随者”类别中,我希望该节点与我的查询相关。否则,我希望它被忽略 这种类型的查询可能吗?我从我的顶层“Polls”开始,然后我必须遍历每个子键,然后在该键中遍历“Following”子键:Java Firebase数据库高级查询选项,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我的数据结构如下。本质上,我创建了一个“追随者”类别,作为每个键的子项,其中一个键表示一次投票。如果我的应用程序的当前用户ID列在“追随者”类别中,我希望该节点与我的查询相关。否则,我希望它被忽略 这种类型的查询可能吗?我从我的顶层“Polls”开始,然后我必须遍历每个子键,然后在该键中遍历“Following”子键: 这种查询是可能的 您只需查看每个轮询对象,并查看您要查找的用户ID是否存在于追随者列表中 另一种解决方案是保留一个Followers节点,该节点根据用户ID将Followers链
这种查询是可能的 您只需查看每个轮询对象,并查看您要查找的用户ID是否存在于追随者列表中 另一种解决方案是保留一个Followers节点,该节点根据用户ID将Followers链接到他们关注的投票 这里将对此进行更详细的描述: 如果将数据拆分为单独的路径(也称为非规范化),则可以根据需要在单独的调用中高效地下载数据。考虑这个扁平结构:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
有趣的是,听起来我没有最佳的数据结构。我已经想到了这一点,但是我设想用户不断地“投票”并向民意调查数据库中写入信息,因此我也会在该数据库中收听。我还没有真正找到一种方法来“去规范化”数据结构。如何在当前结构下创建查询?我在确定实际查询代码时遇到了一些问题。我不确定这是否是最有效的,但实际的查询是:创建PollResult列表获取所有轮询->为每个轮询遍历所有关注者->如果您要查找的关注者在轮询的关注者列表中,将轮询添加到轮询结果列表。一旦你完成了所有的民意调查,你应该有所有的民意调查的具体用户如下。明白了-所以我需要复制节点?我仍然对实际的代码感到困惑。我非常感谢你的帮助。你最初的询问是正确的,你只需要查看所有的民意测验。查询firebase的效率不高,这就是为什么他们建议在必要时对数据进行结构化,以便更快地检索。以下是通过事件(在您的情况下,这将是轮询)搜索搜索词的应用程序的外观。您将搜索用户ID,而不是用户提供的单词:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}