0

我有一个关于制作“高分榜”的问题。

假设我有一个拥有 1.000.000 活跃用户的在线游戏。每个用户都有从 0 到 X 的分数。现在,我想显示一个排名列表。在一页中显示所有百万条目是很疯狂的,因此它被分成 Y 页(每页 100 个条目 => 10.000 页)。

我不确定如何解决它。

1. 最简单的方法是加载所有 1m 条目

在一个 SELECT 中,获取结果并使用 for 循环查找当前用户并显示该特定页面。(但所有其他 999.900 条目将保存在 RAM 中,即使它没有显示出来)。对于页面更改,我可以只使用结果数据而无需第二次数据库调用。(所以我不在乎那段时间的点数变化)

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;

2.我的第二个想法是,单独加载每个页面,但我不知道

2.1 性能是否真的更好 2.2 如何获得正确的起始页,因为我只有用户的积分,而没有真正的他的位置

那么我该如何解决这个问题。我真的不知道mysql可以处理什么。更多的小电话比一个大电话更好吗?我什至可以保存大量结果数据吗?第二种解决方案会在每次页面更改时更新所有更改点,但我更关心性能,然后总是更新列表数据。

谢谢您的帮助!马库斯

4

1 回答 1

0

使用分页。在 SQL 中,它是一个“限制”子句:

SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points LIMIT 0, 20;

上面的查询将只返回原始选择的前 20 行。

您可以通过 get 传递页面参数,例如:highscore.php?page=1 或 ?page=2 等等。

于 2015-08-21T11:27:34.160 回答