实际上我的问题与此处所述https://parse.com/questions/issue-with-using-countobjects-on-class-with-large-number-of-objects-millions相同,这是一个9个月大的帖子,但遗憾的是从来没有得到真正的答案。
我有一个手机游戏的解析后端,我想根据他的分数查询用户的全球排名。
如果我有超过1000个用户,还有更多的分数条目,我该如何查询呢?
此外,我希望能够查询历史排名以及最近24小时排名。
解析时甚至可以这样做吗?
答案 0 :(得分:0)
如果您需要执行类似的大型查询,则应重新设计解决方案。保留一个使用云代码更新的排行榜类;无论是在afterSave挂钩中,还是在定期运行的预定作业中。您的主要关注点必须是快速查找。一旦您的查找开始变大或计算量很大,您应该重新设计后端以实现可伸缩性。
答案 1 :(得分:0)
基于所有时间和时间的排行榜的解决方案
您应该将所有用户的记录保存在单独的实体中,假设LeaderBoard并且在单独的实体中保留所有时间排行榜或时基排行榜用户列表的顶级用户,假设是TopScoreUsers。通过这种方式,您无需每次在实际的排行榜实体(即LeaderBoard)上运行查询以获得最高用户。
假设您的应用/游戏拥有应该仅显示100位顶级用户的所有时间排行榜。当任何用户提交分数然后您首先检查时,该用户是否属于前100名用户列表(来自TopScoreUser),如果是,则将其添加到名为TopScoreUser的单独实体中(如果此列表已有100个用户,则在此处找到当前用户的位置)列出并删除最后一条记录)然后在LeaderBoard实体中更新用户自己的分数,否则只更新LeaderBoard实体中的用户分数。
同样的情况是基于时间的排行榜。
对于用户排名,推荐的方法是使用一些计算或公式来确定近似排名,否则如果用户数百万,很难找到/管理用户实际排名。
希望这会对你有帮助。