Java& MySQL-排名

时间:2015-06-20 09:02:13

标签: java mysql

我正在制作游戏,我需要一个排名系统。我已经用MySQL保存了杀戮,死亡,胜利,无辜射击等所有统计数据。关于我如何能够对每个人进行排名的那一刻,我一无所知。我想通过MySQL,但它们会很快更新。我认为我可以在游戏开始时加载HashMap中的所有排名,但由于有数千名玩家,因此效果非常低。我还希望使用大部分统计数据来解决这个问题。有人可以向我解释我怎么能这样做?谢谢!

1 个答案:

答案 0 :(得分:0)

一种方法是使用mysql Events来触发存储过程。存储过程将执行排名并将排名存储在db中。然后,您只需将事件触发时间设置为您想要的任何内容,例如10分钟。

mysql事件:https://dev.mysql.com/doc/refman/5.7/en/events.html

CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;
schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

然后你会设置一个存储过程来生成排名并为你的玩家设置它:https://dev.mysql.com/doc/refman/5.7/en/stored-programs-views.html

示例程序如下:

CREATE PROCEDURE simpleproc (OUT param1 INT)
    BEGIN
      SELECT COUNT(*) INTO param1 FROM t;
    END

您可以根据需要使程序变得复杂。