【发布时间】:2010-12-10 08:34:34
【问题描述】:
我一直在研究我的应用程序的一项功能来实现排行榜 - 基本上是根据用户的得分对用户进行排名。我目前在个人基础上跟踪分数。我的想法是,这个排行榜应该是相对的,而不是绝对的,也就是说,它不是整个网站上得分最高的前 10 名用户,而是用户朋友网络中的前 10 名。这似乎更好,因为每个人都有机会成为他们网络中的第一名,并且对于那些对这类事情感兴趣的人来说,存在一种友好的竞争形式。我已经存储了每个用户的分数,所以挑战是如何以有效的方式实时计算该分数的排名。我使用的是 Google App Engine,因此有一些好处和限制(例如,IN [array])查询对数组的每个元素执行子查询,并且每个语句限制为 30 个元素
例如
第一个杰克 100
第二约翰 50
这是我想出的方法,但它们似乎都效率低下,我认为这个社区可以想出更优雅的方法。我的感觉是,任何解决方案都可能使用 cron 来完成,并且我将存储每日排名和列表顺序以优化读取操作,但如果有更轻量级和实时的东西会很酷
- 拉取按分数排序的站点所有用户列表。 对于每个用户,从该列表中选择他们的朋友并创建新的排名。 存储排名和列表顺序。 每天更新。 缺点 - 如果我有很多用户,这将需要很长时间
2a。为每个用户选择他们的朋友,并为每个朋友选择分数。 对该列表进行排序。 存储排名和列表顺序。 每天更新。 记录每个用户的最后位置,以便之前的列表可以用于下一次更新的重新排序,以提高效率(可以节省排序时间)
2b。与上面相同,只是只计算在最后一天查看过个人资料的人的排名和列表顺序 缺点 - 只有第二个查看个人资料的人的排名是最新的
【问题讨论】:
标签: python google-app-engine leaderboard