MySQL によるランキング管理

CREATE TABLE ranking (
    user_id INT UNSIGNED NOT NULL COMMENT "ユーザID",
    score INT NOT NULL COMMENT "順位付けに使う値",
    rank INT UNSIGNED NOT NULL COMMENT "順位",

    PRIMARY KEY (user_id),
    INDEX USING BTREE (score)
);
user_id score rank
1 100 0
2 70 0
3 50 0
4 50 0
5 20 0

というテーブルがあったとき、

SET @rank = 1, @rownum = 0, @prev = null;
UPDATE ranking SET rank = (@rank := IF((@rownum := @rownum + 1) AND (@prev <=> score OR (@prev := score) <=> NULL), @rank, @rownum)) ORDER BY score DESC;

することで

user_id score rank
1 100 1
2 70 2
3 50 3
4 50 3
5 20 5

となります。


ranking テーブル自体をメモリテーブルにして、 1 分ごとに上クエリを発行していれば、中々最新のデータになるのではないでしょうか。
※もちろん score の元データは別のテーブルでちゃんと記録されてるとして。