1

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

还有其他要求是能够计算总分,即我将有几场比赛,我需要显示所有比赛的分数,并且分别为每场比赛显示分数。

我目前想到的将是存储所有内容的单个表。它的架构是:

排名_tbl shema

rank_type(可以是比赛、团队、球员或其他)

rank_owner(拥有这些等级的人,可以是团队玩家等级 - 所有者是团队)

rank_item(排名,在团队示例中为 player )

分数(排名依据的实际分数)

rank(预缓存的排名,仅在添加新分数时更新)

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

问题:有没有比使用我的表 shema 更好的方法来获得排名?

4

1 回答 1

1

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

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

我个人更喜欢第 3 个选项,但在最初设置的时间消耗上可能会有更多开销。

希望这可以帮助。

于 2013-08-23T09:51:32.483 回答