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