作者:手机用户2502915433 | 来源:互联网 | 2023-02-09 16:32
对于我的新项目,我已经从解析服务器转移到了Firebase,但是在项目中我开始认为这是个坏主意。
基本上,我正在开发一个应用程序,人们可以在该应用程序中发布有关其镇上正在进行的音乐会的信息。
我的第一个挑战是过滤事件,因此用户只能在自己的城镇中获得事件。我通过构建城市之后的数据来完成此任务:
{
concerts: {
"New york": {
...,
...
},
"Chicago": {
...,
...
}
}
}
然后我认为我需要针对音乐会类型的另一个过滤器,例如摇滚,流行音乐等。因此,尽管我进行了另一次重组。但是,可能需要再增加5到10个过滤器,而以良好的方式构造数据库将变得非常困难。
我虽然关于多个查询,但是这是不允许的:
firebase.database().ref("concerts")
.orderByChild("type").equalTo("rock")
.orderByChild("length").equalTo("2")
.orderByChild("artist").equalTo("beatles")
我考虑过从服务器获取所有内容,然后在客户端中过滤结果。但是,我看到了两个问题:
可能会下载大量不必要的数据。
某些音乐会将仅被锁定给某些用户(例如,至少参加过其他10场音乐会的用户),并且可能存在安全方面的问题,将这些音乐会带回家以防止用户看到他们。
我曾考虑过将过滤器组合在一起以创建查询键,就像这样,但是如果有10多个过滤器,它将变得很复杂。
有解决方案吗?还是我应该忘记此用例的Firebase?
提前致谢
1> Jay..:
可以在Firebase中制作极其复杂的查询。数据需要存储在一个易于查询的结构中,最重要的是,不要害怕重复数据。
例如,假设我们有一个应用程序,使用户可以选择特定年份和月份,特定城市和特定流派的音乐会。
有3个参数
year_month城市类型
用户界面首先查询用户以选择城市
Austin
然后用户界面要求选择年份和月份
201704
然后一种流派
Rock
您的Firebase结构如下所示
concerts
concert_00
city: Memphis
year_month: 201706
genre: Country
city_date_genre: Memphis_201606_Country
concert_01
city: Austin
year_month: 201704
genre: Rock
city_date_genre: Austin_201704_Rock
concert_02
city: Seattle
year_month: 201705
genre: Disco
city_date_genre: Seattle_201705_Disco
您的用户界面已经向用户轮询了查询信息,并以此构建查询字符串
Austin_201704_Rock
然后在“ city_date_genre”节点中查询该字符串,您便拥有了数据。
如果用户想了解奥斯汀2017年4月的所有音乐会怎么办
queryStartingAt("Austin_201704").queryEndingAt("Austin_201704")
您可以通过添加另一个查询节点并更改数据顺序来轻松扩展此功能
concerts
concert_00
city: Memphis
year_month: 201706
genre: Country
city_date_genre: Memphis_201606_Country
city_genre_date: Memphis_Country_201606
根据用户选择数据的顺序,您可以查询关联的节点。
添加其他节点只需要少量数据,并且可以对所需数据进行开放式查询。