正确的方法来创建排名表?

时间:2013-08-23 09:39:17

标签: mysql database-design database-schema

我正在创建网站,当然需要显示结果。目前为了获得排名,我需要为每个玩家加总得分,然后对它们进行排序,即使我只需要单人游戏结果。我认为当系统中的玩家数量上升时,它会非常缓慢。这就是为什么我需要一些方法来缓存结果并仅在更改某些内容时更新它们(或者在结果必须更新时添加某种超时)。

另外一项要求是能够计算总得分,即我将参加几场比赛,我需要分别为所有比赛和每场比赛分数。

我目前想到的是单表来存储一切。它的架构是:

ranking_tbl shema

rank_type (可能是竞争,团队,玩家或其他)

rank_owner (谁拥有这些排名,可以是团队成员排名 - 所有者将成为团队)

rank_item (排名靠前,在球队范例内排名是球员)

得分(排名的实际得分)

排名(预先排名,仅在添加新分数时更新)

排名将是我系统的重要组成部分并且大量使用,所以我需要它尽可能高效。

问题:有没有比使用我的表格更好的方法来实现排名?

1 个答案:

答案 0 :(得分:1)

我认为您的架构会起作用。我可以看到3种可用于获得所需功能的解决方案。

  1. Cron - 使用Cron作业(计划任务)每晚更新排名意味着您可以在非高峰时间(例如凌晨2点)进行批量处理。您可以安排一个脚本,按分数对玩家进行重新排序,为其分配排名并将其保存到数据库中。
  2. 单次保存重新计算 - 如果您一次只插入一个玩家,您可能会在保存任何分数后重新计算排名。这将提供出色的最新排名,但在添加大量分数时可能会有一些性能上的折衷。
  3. 多重保存重新计算 - 将您的分数编译为包含玩家ID和分数的CSV文件。然后,您可以编写一个脚本来解析您的CSV,更新所有玩家的分数。保存分数后,您可以重新计算所有玩家的等级。
  4. 我个人更喜欢第三种选择,但最初设置的时间可能会有更多的开销。

    希望这有帮助。