1

我正在尝试开发一个游戏网站。用户可以将其他用户添加为他们的朋友。用户将在完成各种游戏关卡时获得积分。现在我需要在其页面上显示所有已经玩过该游戏的用户的朋友的平均积分(例如:当用户玩游戏A时,他的朋友获得的平均积分应该显示在游戏A页面上。同样的游戏在他玩游戏 B) 时,将显示他朋友的 B 平均分。

我的做法:

  • 将用户的好友列表(最多 1000 个)作为多值属性存储在数据存储中,并在用户登录站点时将其加载到 GAE 内存缓存中。
  • 使用常驻后端缓存所有用户的游戏数据(每个特定游戏获得的积分)。一个 cron 作业每小时更新一次后端缓存。当用户第一次请求游戏页面(例如:游戏 A)时,请求处理程序通过 URL-Fetch 服务与后端联系以计算朋友点的平均值。
  • 现在后端从内存缓存中获取用户的好友列表(最多 1000 个),从内存缓存(后端缓存)中获取游戏 A 的好友点并返回计算的平均值。获取平均值后的请求处理程序,将其保存在数据存储中,并将其存储在内存缓存中,以便对游戏 A 页面的后续请求从内存缓存/数据存储中获取数据,而无需在后端进行计算开销。该平均值的有效期为 1 小时,之后在下一次请求游戏 A 页面时重新计算。

我的问题

  • 上述方法是解决这个问题的正确方法吗?
  • 如何使用后端实例(python-2.7)高效可靠地实现内存缓存?
  • 如何估计仅这项工作所需的后端内存和 CPU?(假设必须存储 10 万个键值对,其中“userid/gamename”作为键,用户点作为值。用户好友列表最大大小为 1000。)
  • 如果随着负载的增加我必须使用多个后端实例,如何对它们进行负载平衡?

提前致谢。

4

1 回答 1

0

看看尼克约翰逊的这篇关于计数器的博客文章:http: //blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

将 NDB 数据存储用于: - 自动缓存,而不是您自己的内存缓存 - NDB 有一些新的有趣属性,例如:带压缩的 json 属性、重复属性,其作用类似于 Python 列表

并查看 mapreduce 以进行有效更新。

于 2013-01-24T05:03:31.600 回答