实时游戏中排名计算的最有效方法

时间:2015-01-26 02:06:47

标签: php mysql algorithm ranking ranking-functions

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

我正在进行博彩足球比赛(用户试图预测比赛结果之前的比赛)。在我的国家被称为" 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)用于服务器,以及一些偶尔要求排名的手机。

对不起我的蹩脚英语=(

1 个答案:

答案 0 :(得分:1)

我会使用以下方法:

保留一个排名表,在每个游戏日之后存储当前排名。复制表以获取临时排名表。每当游戏日开始时,将玩家的当前排名复制到临时排名表中(您可以通过在原始排名表中引入temporary_score列来避免第二种关系和复制。)

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