【问题标题】:The most efficient way to calculate rankings in real time games [closed]在实时游戏中计算排名的最有效方法[关闭]
【发布时间】:2015-01-26 02:06:47
【问题描述】:

我想知道实时计算积分和排名的最快和最有效的方法。

我正在做一个投注足球游戏(用户试图预测之前比赛结果的游戏)。在我国被称为“Quiniela”。

玩家在比赛开始前进行“预测”。我的问题是:从游戏开始的那一刻起,这是最有效的方式(不仅仅是代码级​​别,而是数据库和服务器)“实时”计算玩家排名作为他们对游戏实际结果的预测.

例如:

如果 Team1 与 Team2 比赛, 用户 U1 预测比赛将以 0-0 结束, U2预测比赛将以1-0结束, U3 预测比赛将以 1-1 结束。

在比赛开始时,U1 会排名第一,因为如果比赛以这样结束,他的预测将是正确的,或者至少是最准确的。

然后比分切换到 1-0,用户 U1 将是排名的最后一位(因为他的预测已经不可能了),U2 将是第一名,U3 将是第二名。

如果比分变成 1-1,U2 会第一,U3 会第二(因为他猜到了部分结果),U3 最后。

我考虑过在您更改分数时创建一个具有一个级别的可能性树(0-0 第一个节点,1-0 和 0-1 作为子节点),“暂时”更改排名,我会保留它在缓存中。

游戏结束后,我会在数据库中保存最新的排名。

有更优化的方法来解决这个问题吗? 以前有人提出过,已经解决了吗? 我用 MySQL 做数据库,用 PHP (Cake Php) 做服务器,还有一堆不时询问排名的手机。

对不起我蹩脚的英语=(

【问题讨论】:

  • 虽然这个问题很开放,但我要问的是是否有一种算法已经可以做到(我在大学里没有看到)让我这样做。这就像问哪个是排序数字的最佳算法。如果它有名称(例如排序算法,在这种情况下)有人请告诉我。

标签: php mysql algorithm ranking ranking-functions


【解决方案1】:

我会使用以下方法:

保留一个排名表,您可以在其中存储每个比赛日后的当前排名。为临时排名表复制该表。每当比赛日开始时,将玩家当前的排名复制到临时排名表中(可以通过在原始排名表中引入一个temporary_score列来避免二次关系和复制)。

每当游戏分数发生变化时,重新计算所有分数。比赛结束后,您只需将临时排名复制回排名表即可。

【讨论】:

  • 问题是当你有大约 10,000 个用户可能会使数据库超载时,每个事件都更新“临时列分数”,我想避免这种情况。
  • 更新 10000 行应该不是问题。我认为您可以完全使用 SQL 和存储过程来完成这些“事件更新”。
  • 好吧,我会试试的,如果全部爆炸,我会再问你一次。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多