【发布时间】:2014-03-25 14:25:02
【问题描述】:
我想使用 Google App Engine (Python) 为移动游戏构建一个后端,其中包括针对所有玩家的“实时”全球排行榜,用于持续一定天数的活动。
典型的用法如下: - 用户开始和结束战斗,获得积分(战斗2-5分钟) - 积分在活动期间累积在玩家的账户中。 - 玩家可以随时查看排行榜。 - 排行榜将返回前 10 名玩家,以及分数高于和低于玩家分数的 5 名玩家。
现在,实时方面没有真正的限制,板可以每 30 秒更新一次,到每小时更新一次。我希望它尽可能“快”,而不会花费太多。
由于我对GAE不是很熟悉,所以这是我想到的解决方案:
- 每个玩家实体都有一个 event_points 属性
- 使用 Cron 作业,定期查询数据存储区中得分不为零的所有玩家。查询是 已排序。
- cron 作业然后遍历查询结果,写回每个 Player 实体中的排名。
一想到这个解决方案,感觉很“蛮力”。
此解决方案的问题在于所有实体的读写成本。 如果我们最终有 50K 活跃用户,这将意味着定期进行 50K+1 次读取和 50k+1 次写入的排序查询,这可能非常昂贵(取决于时间间隔)
我知道 memcache 可以是一种防止某些读取和某些写入的方法,但是如果某些实体不在 memcache 中,那么查询它是否有意义? 另外,我读过 memcache 可以随时刷新,所以除非有办法廉价地“备份”它,否则这似乎是一种危险的用途,因为数据相对重要。
有没有更简单的方法来解决这个问题?
【问题讨论】:
-
投票结束这个问题的人不理解“基于意见”的含义。我提供的答案是基于 App Engine 的文档,而不是我个人的偏好。显然,解决问题的方法通常不止一种,但这是一个很好的问题,有一个具体的、详细描述的问题。
标签: python google-app-engine cron leaderboard