【问题标题】:Parse.com: get rank within leaderboardParse.com:在排行榜中获得排名
【发布时间】:2014-05-24 07:11:29
【问题描述】:

实际上我的问题与https://parse.com/questions/issue-with-using-countobjects-on-class-with-large-number-of-objects-millions 此处所述的问题相同,这是一个 9 个月大的线程,不幸的是从未得到真正的答案。

我有一个手机游戏的解析后端,我想根据他的分数查询用户的全球排名。

如果我有超过 1000 个用户,并且有更多的分数条目,我该如何查询?

另外,我希望能够查询历史排名以及最近 24 小时排名。

这甚至可以通过解析实现吗?

【问题讨论】:

  • 嗨,您找到解决方案或任何变通方法了吗?谢谢。

标签: parse-platform leaderboard


【解决方案1】:

如果您需要进行类似的大型查询,您应该重新设计您的解决方案。保持使用云代码更新的排行榜类;要么在 afterSave 挂钩中,要么在定期运行的计划作业中。您的主要关注点必须是闪电般的快速查找。一旦您的查找开始变大或计算繁重,您就应该重新设计后端以实现可扩展性。

【讨论】:

    【解决方案2】:

    所有时间和基于时间的排行榜的解决方案是

    您应该在单独的实体(假设为 LeaderBoard)中记录所有用户的得分,并在单独的实体(假设为 TopScoreUsers)中维护所有时间排行榜的顶级用户或时基排行榜用户列表。通过这种方式,您无需每次都在实际排行榜实体(即排行榜)上运行查询来获取您的顶级用户。

    假设您的应用/游戏的所有时间排行榜应该只显示 100 位顶级用户。当任何用户提交分数时,您首先检查该用户是否在前 100 个用户列表中(来自 TopScoreUser),如果是,则将其添加到名为 TopScoreUser 的单独实体中(如果此列表已经有 100 个用户,则在此查找当前用户的位置列出并删除最后一条记录),然后在 LeaderBoard 实体中更新用户自己的分数,否则只在 LeaderBoard 实体中更新用户分数。

    基于时间的排行榜也是如此。

    对于用户排名,推荐的方法是使用一些计算或公式来确定近似排名,否则如果用户数以百万计,则很难找到/管理用户的实际排名。

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2019-03-28
      • 2018-12-20
      • 2018-01-31
      • 2016-10-03
      • 1970-01-01
      相关资源
      最近更新 更多