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 回答