我正在开发一个游戏的锦标赛版本,我期待1000个同时玩家.比赛开始时,玩家将被快速淘汰(可能超过每秒5次),但随着锦标赛的进行,这个过程会变慢.取决于玩家从锦标赛中被淘汰的情况,奖励一定数量的积分.例如,先下降的玩家,什么都不得,而第500名玩家获得1分,第一名获胜者获得200分.现在我想在玩家被淘汰后立即奖励和显示积分数量.
问题是当我在淘汰玩家后将新行推入数据存储区时,行实体必须位于一个单独的实体组中,因此我不会达到1个实体每秒1-5次写入的gae数据存储区限制组.此外,我需要能够一致地读取和写入行数,以便我可以正确地确定所有被淘汰的玩家的奖金.
实现数据模型以支持此功能的最佳方法是什么?
最佳答案 由于玩家数量有限,几秒钟内的争用问题不太可能持续很长时间,因此您有两种选择:
>完全忽略这个问题.消除的集群将会发生,但只要不是持续的情况,交易的重试机制将确保它们都被执行.
>当有人外出时,独立录制,并更新锦标赛状态,异步分配排名.这意味着您无法立即通知他们的排名,而是需要进行异步回复或让他们对其进行轮询.
坦率地说,我会建议前者:即使你的1000人锦标赛中有一半在前5分钟熄灭 – 这是一个不太可能发生的事件 – 你仍然看到每秒不到2次淘汰赛.实际上,任何尖峰都会比这更短,更短.
需要记住的一点是,由于事务重试的工作方式,同一实体组上的事务一起发生,将以半随机顺序解析 – 也就是说,它不是严格的FIFO队列.如果你需要,你必须自己强制执行它,尽管在任何类型的分布式系统中这都是微不足道的事情.