我正在开发一个锦标赛版本的游戏,我希望1000+同步玩家。当锦标赛开始时,玩家将很快被淘汰(可能超过每秒5人),但随着锦标赛的进行,这个过程会变慢。根据球员从锦标赛中被淘汰的时间,将获得一定数量的积分。例如,第一个倒下的玩家什么也得不到,而排名第500位的玩家得到1分,第一名获胜者得到200分。现在,我想要在球员被淘汰后立即奖励和显示积分。
问题是,当我在玩家被淘汰后将新行推送到数据存储中时,行实体必须在单独的实体组中,这样我就不会达到1个实体组每秒1-5次写入的gae数据存储限制。此外,我还需要能够一致地读取和写入行数,以便我可以为所有被淘汰的球员正确确定奖品。
为了支持这一点,实现数据模型的最佳方式是什么?
发布于 2010-12-20 07:04:26
由于玩家数量有限,每秒几次的争用问题不太可能持续很长时间,因此您有两种选择:
坦率地说,我建议使用前者:即使你的1000人锦标赛的一半在前5分钟内就结束了-这是一个荒谬的不太可能的事件-你仍然看到每秒不到2次淘汰。在现实中,任何峰值都会比这更小,寿命更短。
要记住的一件事是,由于事务重试的工作方式,同一实体组上一起发生的事务将以半随机顺序进行解析-即,它不是严格的FIFO队列。如果您需要这样做,您必须自己执行它,尽管这在任何类型的分布式系统中都不是一件微不足道的事情。
发布于 2011-01-28 07:25:47
现有的评论和答案很好地解决了这个特定的问题。
在更高的层次上,看看这个来自google code jam团队的post and open source library。他们遇到了类似的问题,最终开发了一个基于数据存储的可伸缩记分板,可以有效地处理对任意页面的更新和请求。
https://stackoverflow.com/questions/4484006
复制相似问题