【发布时间】:2018-02-20 14:55:33
【问题描述】:
我正在使用 Firebase 数据库来存储游戏的分数。在我决定实施“每周得分”之前,一切正常。
为了能够按分数过滤,然后按周排序,我将数据存储在以下结构中:
game_scores-weekly
2018-01-29
user_id: { score, date, bla, bla bla}
user_id: { score, date, bla, bla bla}
user_id: { score, date, bla, bla bla}
2018-02-05
user_id: { score, date, bla, bla bla}
user_id: { score, date, bla, bla bla}
所以,这工作得很好,但由于“game_scores-weekly/new_week” indexOn “score”上没有索引,我每周都会收到关于性能问题的烦人警告。手动添加索引有效...直到下周,所以不是一个选项。
"game_scores-weekly": {
"2018-02-19": {
".indexOn": ["score", "uid"]
},
"2018-02-12": {
".indexOn": ["score", "uid"]
}
}
有没有办法在日期中以某种方式指定通配符,以便它适用于任何新日期?或者也许我可以每周以编程方式创建新索引,或者有没有其他我可能没有想到的解决方案?
另外,考虑过手动创建一年中所有星期的列表并一次性添加,但可能会受到限制?
最后但并非最不重要的一点是,我只对本周和上周的分数感兴趣,任何较旧的东西我都想保留一些历史数据,但我不会在游戏中查询它,所以可能摆脱旧周的索引。
干杯!
【问题讨论】:
-
令我感到奇怪的是,您没有将它们存储为用户的孩子。
-
我还存储了分数发布在“分数条目”的子项中的时间戳,但据我从文档/阅读中了解到,您不能按一个字段过滤然后排序由同一查询中的另一个。必须处理应用程序逻辑中的一个或另一个,这在处理大型记录时效率不高/不可行。
-
我知道在 Firebase 函数中,您可以使用方括号来指定变化的值。在您的情况下:
game_scores-weekly/{date}/user_id。或许可以在其他 SDK 中做同样的事情。
标签: firebase firebase-realtime-database