2

現在MySQLを使用しているオンラインゲームがあります。私は次のようなPlayerテーブルを持っています:

create table player (
    id integer primary key,
    name varchar(50),
    score integer
);

「スコア」列にインデックスがあり、次のようにランキングを表示します。

select id, name, score from player order by score desc limit 100

システムをRedisに移行したい(または、他のNoSQLがこの種の問題により適している場合は、教えてください)。では、このようなランキング表を効率的に表示する方法は何だろうか。

AFAICT、これはMap / Reduceジョブである可能性がありますか?Map / Reduceについてはほとんど何も知りませんが、実際の例を見つけることができなかったため、まだ完全には理解していないドキュメントをいくつか読んでいます。

誰かがRedisで上記のクエリを実行する方法の大まかな例を教えてもらえますか?

4

2 に答える 2

3

redisでは、並べ替えられたセットを使用できます(http://redis.io/commands#sorted_set)並べ替えられたセットでアイテムをスコアリングした場合、呼び出すことで上位Nを取得できますZRANGE players 0 N

于 2012-09-11T07:44:58.343 に答える
1

良い質問-MongoDBでは、group()関数を使用してこのタイプのクエリを返す必要があります。

select id, name, score from player order by score desc limit 100

次のようになります。

db.player.group(
           {key: { id:true, name:true },
            reduce: function(obj,prev) { if(prev.cmax<obj.score) prev.cmax = obj.score; },
            initial: { cmax: 0 } // some initial value
            });

MapReduceベースのアプローチを使用するのがおそらく最善です。以下を参照してください。

于 2012-09-11T07:32:46.010 に答える